Skip to content

Latest commit

 

History

History
303 lines (219 loc) · 6.32 KB

File metadata and controls

303 lines (219 loc) · 6.32 KB

🚀 Deployment Steps

Production Workflow

# 1. Clone và setup
git clone <your-repo>
cd mockpilot
cp .env.example .env
# Chỉnh sửa .env với các giá trị production
# ⚠️ QUAN TRỌNG: Set ADMIN_EMAIL, ADMIN_PASSWORD, ADMIN_NAME

# 2. Build Docker image
docker compose build

# 3. Start services (migrations chạy tự động)
docker compose up -d

# 4. Đợi migrations chạy xong, sau đó seed admin account
docker compose exec app sh -c "
  export ADMIN_EMAIL=\${ADMIN_EMAIL:-admin@example.com} &&
  export ADMIN_PASSWORD=\${ADMIN_PASSWORD} &&
  export ADMIN_NAME=\${ADMIN_NAME:-Admin User} &&
  node prisma/seed-admin.js
"

# 5. Xem logs
docker compose logs -f app

# 6. Kiểm tra status
docker compose ps

⚠️ Lưu ý:

  • Migrations chạy tự động khi container start (xem Dockerfile CMD)
  • Seed admin account phải chạy SAU KHI migrations đã hoàn thành
  • Xem chi tiết trong PRODUCTION_SEED_ADMIN.md

Verify

# Health check
curl http://localhost:3000/api/v1/health

# Swagger docs
open http://localhost:3000/api-docs

📊 Services

Sau khi chạy docker compose up -d, bạn sẽ có:

Service URL Description
NestJS API http://localhost:3000 Main API server
Swagger Docs http://localhost:3000/api-docs API documentation
PostgreSQL localhost:5432 Database (internal)
PgAdmin http://localhost:5050 Database admin UI

PgAdmin Credentials

  • Email: admin@admin.com
  • Password: admin

⚠️ Lưu ý: Trong production, nên disable PgAdmin hoặc thay đổi password.

🔄 Common Commands

Xem logs

# Tất cả services
docker compose logs -f

# Chỉ app
docker compose logs -f app

# Chỉ database
docker compose logs -f postgres

Restart services

# Restart tất cả
docker compose restart

# Restart chỉ app
docker compose restart app

Stop services

# Stop (giữ data)
docker compose stop

# Stop và xóa containers (giữ data)
docker compose down

# Stop và xóa tất cả (XÓA DATA)
docker compose down -v

Update Production sau khi pull code mới

⚠️ QUAN TRỌNG: Sau khi pull code mới từ git, cần rebuild Docker image và restart services.

# 1. Pull code mới
git pull origin main  # hoặc branch của bạn

# 2. Rebuild Docker image (có code changes)
docker compose build

# 3. Restart services (migrations sẽ chạy tự động)
docker compose up -d

# 4. Đợi migrations chạy xong (nếu có migration mới)
# Kiểm tra logs để đảm bảo migrations đã hoàn thành
docker compose logs app | grep -i migration

# 5. Generate Prisma Client (nếu có schema changes)
docker compose exec app npx prisma generate

# 6. Restart app để load Prisma client mới
docker compose restart app

# 7. Verify
curl http://localhost:3000/api/v1/health

Quick Update (nếu không có migration):

git pull origin main
docker compose up -d --build
docker compose restart app

Full Update (có migration mới):

git pull origin main
docker compose build
docker compose up -d
# Đợi migrations chạy xong
docker compose exec app npx prisma generate
docker compose restart app

Rebuild sau khi code thay đổi

# Rebuild và restart
docker compose up -d --build

# Hoặc rebuild không cache
docker compose build --no-cache
docker compose up -d

🗄️ Database Management

Prisma Migrations

Migrations sẽ tự động chạy khi container khởi động (xem Dockerfile CMD).

Manual Migration

# Vào container
docker compose exec app sh

# Chạy migration
npx prisma migrate deploy

# Generate Prisma Client (nếu cần)
npx prisma generate

Database Backup

# Backup
docker compose exec postgres pg_dump -U nestjs_user nestjs_db > backup.sql

# Restore
docker compose exec -T postgres psql -U nestjs_user nestjs_db < backup.sql

🔒 Production Security Checklist

  • Thay đổi JWT_ACCESS_SECRET trong .env
  • Thay đổi PostgreSQL password trong docker-compose.yml
  • Thay đổi PgAdmin password hoặc disable PgAdmin
  • Cấu hình firewall (chỉ expose port 3000)
  • Setup SSL/HTTPS (sử dụng reverse proxy như Nginx)
  • Enable rate limiting
  • Setup monitoring và logging
  • Configure CORS properly (hiện tại allow all origins)

🌐 Reverse Proxy (Nginx)

Để expose ứng dụng ra internet với HTTPS, sử dụng Nginx:

server {
    listen 80;
    server_name your-domain.com;
    
    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

📈 Monitoring

Health Check

API có health check endpoint:

curl http://localhost:3000/api/v1/health

Container Health

Docker health check được cấu hình trong Dockerfile:

docker ps  # Xem health status

🐛 Troubleshooting

App không start

# Xem logs
docker compose logs app

# Kiểm tra database connection
docker compose exec app sh
# Trong container:
npx prisma db pull

Database connection error

# Kiểm tra postgres đã sẵn sàng
docker compose exec postgres pg_isready -U nestjs_user

# Test connection
docker compose exec app sh
# Trong container:
node -e "console.log(process.env.DATABASE_URL)"

Port đã được sử dụng

# Kiểm tra port
lsof -i :3000

# Thay đổi port trong docker-compose.yml
ports:
  - "3001:3000"  # Thay 3000 thành 3001

Rebuild từ đầu

# Stop và xóa tất cả
docker compose down -v

# Xóa images
docker rmi nest-typescript-starter-app

# Rebuild
docker compose up -d --build

📝 Notes

  • Database data được persist trong Docker volume postgres_data
  • Application code được build vào Docker image
  • Environment variables từ .env được load tự động
  • Prisma migrations chạy tự động khi container start

🎯 Next Steps

  1. Setup domain và SSL certificate
  2. Configure Nginx reverse proxy
  3. Setup CI/CD pipeline
  4. Configure monitoring (Prometheus, Grafana)
  5. Setup log aggregation (ELK, Loki)
  6. Configure backup strategy