# 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- Migrations chạy tự động khi container start (xem
DockerfileCMD) - Seed admin account phải chạy SAU KHI migrations đã hoàn thành
- Xem chi tiết trong
PRODUCTION_SEED_ADMIN.md
# Health check
curl http://localhost:3000/api/v1/health
# Swagger docs
open http://localhost:3000/api-docsSau 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 |
- Email:
admin@admin.com - Password:
admin
# Tất cả services
docker compose logs -f
# Chỉ app
docker compose logs -f app
# Chỉ database
docker compose logs -f postgres# Restart tất cả
docker compose restart
# Restart chỉ app
docker compose restart app# 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# 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/healthQuick Update (nếu không có migration):
git pull origin main
docker compose up -d --build
docker compose restart appFull 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 và restart
docker compose up -d --build
# Hoặc rebuild không cache
docker compose build --no-cache
docker compose up -dMigrations sẽ tự động chạy khi container khởi động (xem Dockerfile CMD).
# 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# 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- Thay đổi
JWT_ACCESS_SECRETtrong.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)
Để 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;
}
}API có health check endpoint:
curl http://localhost:3000/api/v1/healthDocker health check được cấu hình trong Dockerfile:
docker ps # Xem health status# Xem logs
docker compose logs app
# Kiểm tra database connection
docker compose exec app sh
# Trong container:
npx prisma db pull# 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)"# Kiểm tra port
lsof -i :3000
# Thay đổi port trong docker-compose.yml
ports:
- "3001:3000" # Thay 3000 thành 3001# 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- 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
- Setup domain và SSL certificate
- Configure Nginx reverse proxy
- Setup CI/CD pipeline
- Configure monitoring (Prometheus, Grafana)
- Setup log aggregation (ELK, Loki)
- Configure backup strategy