operations/ops-cheatsheet.md

Ops Cheatsheet

Lệnh hay dùng sau khi production đã deploy. Trên server /opt/booking-system.

Setup alias (1 lần)

Tránh gõ docker compose -f docker-compose.prod.yml mỗi lệnh:

echo "alias dc='docker compose -f /opt/booking-system/docker-compose.prod.yml'" >> ~/.bashrc
source ~/.bashrc

Sau đó dùng dc thay cho docker compose -f docker-compose.prod.yml mọi nơi dưới.

🔐 Super-admin

# Tạo / reset super-admin (interactive: nhập email + password ≥6 ký tự)
dc exec api yarn reset:superadmin

Login: https://glamvoo.com/admin với credential vừa tạo.

🌱 Seed dữ liệu

# Seed demo data (tenants + services + resources mẫu)
dc exec api yarn seed

# Seed daily test bookings (testing only)
dc exec api yarn seed:daily

⚠️ yarn seed có thể wipe data. Production thật KHÔNG nên chạy — chỉ dùng nếu DB rỗng hoặc demo env.

🗄️ Database

# Xem migration status
dc exec api yarn db:status

# Apply migration mới (deploy.sh auto chạy, manual chỉ khi cần)
dc exec api yarn db:migrate:deploy

# Prisma Studio (web UI view DB) — port 5555 internal
dc exec api yarn db:studio
# Trên máy local: ssh -L 5555:localhost:5555 user@server → mở http://localhost:5555

# psql trực tiếp từ host
psql "postgresql://glamvoo_user:PASSWORD@localhost:5432/glamvoo"

📋 Logs

dc logs -f                        # tất cả service, follow
dc logs -f api                    # chỉ api (mọi replicas)
dc logs --tail 100 api            # 100 dòng cuối
dc logs --since 30m api           # 30 phút qua
dc logs --since 2026-05-09T10:00:00 api

🩺 Health & Status

dc ps                                                          # status containers
curl https://glamvoo.com/api/health | jq                       # health public
dc exec api curl -s http://localhost:3010/api/health | jq      # health internal
docker stats                                                   # CPU/RAM realtime

🔧 Debug

dc exec api sh                                          # shell vào api
dc exec web sh                                          # shell vào web
dc exec redis redis-cli                                 # redis CLI
dc exec api node -e "console.log(process.env.DATABASE_URL)"   # inspect env
dc inspect api                                          # config + state full

🚀 Deploy / Restart / Scale

./deploy.sh                              # deploy code mới (sau khi GHA xanh)
dc up -d                                 # reload sau khi đổi .env (Docker auto detect)
dc restart api                           # restart 1 service
dc restart web

API_REPLICAS=4 ./deploy.sh               # scale lên 4 api replicas
IMAGE_TAG=sha-abc123 ./deploy.sh         # rollback về SHA cụ thể

dc stop                                  # stop tất cả (giữ container + volume)
dc start                                 # start lại
dc down                                  # stop + xoá container (giữ volume)
dc down -v                               # ⚠️ stop + xoá container + volume (DESTRUCTIVE)

🧹 Cleanup

docker image prune -f                                       # xoá image dangling
docker image prune -af --filter "until=168h"                # xoá image > 1 tuần
docker builder prune -af                                    # xoá build cache
docker system df                                            # disk usage Docker

🔄 Bull Board (queue admin)

https://glamvoo.com/api/queues

Login: BULL_BOARD_USER / BULL_BOARD_PASS từ .env. Xem email/notification queue, retry failed jobs.

🔒 Cert renewal (manual nếu cần)

Certbot auto-renew qua systemd timer (certbot.timer). Force renew:

sudo certbot renew
# Sau khi renew, reload nginx để pick cert mới
dc exec nginx nginx -s reload

🆘 Khi vướng

Triệu chứng Lệnh check Fix
Container restart loop dc logs api Xem error → fix env hoặc image
502 trên public dc ps → service unhealthy dc logs <service>, đợi healthcheck
Can't reach DB dc exec api curl -s localhost:3010/api/health Check pg_hba.conf + UFW + .env DATABASE_URL
Disk đầy docker system df docker image prune -af --filter "until=168h"
Throttler block bất thường dc logs redis Restart redis sẽ reset counter (TTL 60s)
Migration conflict dc exec api yarn db:status Manual fix qua psql

Cross-reference