Files
thebet365/docker-compose.prod.yml
2026-06-13 22:16:14 +08:00

127 lines
3.0 KiB
YAML

# TheBet365 全栈生产部署
# 首次部署: ./scripts/deploy-first.sh
# 后续更新: ./scripts/deploy-update.sh
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:
image: thebet365-api:${IMAGE_TAG:-latest}
build:
context: .
dockerfile: docker/api/Dockerfile
container_name: thebet365-api
env_file:
- path: .env.docker
required: false
environment:
DATABASE_URL: postgresql://thebet365:${POSTGRES_PASSWORD:-thebet365}@postgres:5432/thebet365
REDIS_URL: redis://redis:6379
PORT: 3000
NODE_ENV: production
UPLOAD_DIR: /app/uploads
RUN_MIGRATIONS_ON_START: ${RUN_MIGRATIONS_ON_START:-false}
volumes:
- uploads_data:/app/uploads
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
expose:
- '3000'
healthcheck:
test:
[
'CMD-SHELL',
"node -e \"fetch('http://127.0.0.1:3000/api/health/ready').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"",
]
interval: 10s
timeout: 5s
retries: 12
start_period: 20s
restart: unless-stopped
networks:
- thebet365
player:
image: thebet365-player:${IMAGE_TAG:-latest}
build:
context: .
dockerfile: docker/player/Dockerfile
container_name: thebet365-player
depends_on:
api:
condition: service_healthy
ports:
- '${BIND_ADDR:-127.0.0.1}:${PLAYER_PORT:-8082}:80'
healthcheck:
test: ['CMD-SHELL', 'wget -q -O /dev/null http://127.0.0.1/ || exit 1']
interval: 10s
timeout: 5s
retries: 6
start_period: 10s
restart: unless-stopped
networks:
- thebet365
admin:
image: thebet365-admin:${IMAGE_TAG:-latest}
build:
context: .
dockerfile: docker/admin/Dockerfile
container_name: thebet365-admin
depends_on:
api:
condition: service_healthy
ports:
- '${BIND_ADDR:-127.0.0.1}:${ADMIN_PORT:-8081}:80'
healthcheck:
test: ['CMD-SHELL', 'wget -q -O /dev/null http://127.0.0.1/ || exit 1']
interval: 10s
timeout: 5s
retries: 6
start_period: 10s
restart: unless-stopped
networks:
- thebet365
networks:
thebet365:
name: thebet365
volumes:
postgres_data:
redis_data:
uploads_data: