# 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:-8082}: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:
