feat(deploy): add Docker full-stack deployment and server pack scripts
Enable one-click production deploy via docker-compose.prod.yml, with deployment docs and zip packaging for Baota upload. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
100
docker-compose.prod.yml
Normal file
100
docker-compose.prod.yml
Normal file
@@ -0,0 +1,100 @@
|
||||
# TheBet365 全栈生产部署
|
||||
# 一键启动: docker compose -f docker-compose.prod.yml up -d --build
|
||||
# 首次部署建议 SEED_DATABASE=true(见 .env.docker)
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:16-alpine
|
||||
container_name: thebet365-postgres
|
||||
environment:
|
||||
POSTGRES_USER: thebet365
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-thebet365}
|
||||
POSTGRES_DB: thebet365
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ['CMD-SHELL', 'pg_isready -U thebet365']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- thebet365
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
container_name: thebet365-redis
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', 'ping']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- thebet365
|
||||
|
||||
api:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/api/Dockerfile
|
||||
container_name: thebet365-api
|
||||
environment:
|
||||
DATABASE_URL: postgresql://thebet365:${POSTGRES_PASSWORD:-thebet365}@postgres:5432/thebet365
|
||||
REDIS_URL: redis://redis:6379
|
||||
JWT_SECRET: ${JWT_SECRET:-change-me-in-production-use-long-random-string}
|
||||
JWT_PLAYER_EXPIRES: ${JWT_PLAYER_EXPIRES:-24h}
|
||||
JWT_ADMIN_EXPIRES: ${JWT_ADMIN_EXPIRES:-2h}
|
||||
JWT_AGENT_EXPIRES: ${JWT_AGENT_EXPIRES:-8h}
|
||||
PORT: 3000
|
||||
NODE_ENV: production
|
||||
UPLOAD_DIR: /app/uploads
|
||||
SEED_DATABASE: ${SEED_DATABASE:-false}
|
||||
volumes:
|
||||
- uploads_data:/app/uploads
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
ports:
|
||||
- '${API_PORT:-3000}:3000'
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- thebet365
|
||||
|
||||
player:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/player/Dockerfile
|
||||
container_name: thebet365-player
|
||||
depends_on:
|
||||
- api
|
||||
ports:
|
||||
- '${PLAYER_PORT:-8080}:80'
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- thebet365
|
||||
|
||||
admin:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/admin/Dockerfile
|
||||
container_name: thebet365-admin
|
||||
depends_on:
|
||||
- api
|
||||
ports:
|
||||
- '${ADMIN_PORT:-8081}:80'
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- thebet365
|
||||
|
||||
networks:
|
||||
thebet365:
|
||||
name: thebet365
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
redis_data:
|
||||
uploads_data:
|
||||
Reference in New Issue
Block a user