version: '3.8' services: # Initial Service initial-service: build: context: . dockerfile: Dockerfile container_name: initial-service restart: unless-stopped ports: - "12101:12101" # gRPC port - "12102:12102" # HTTP Gateway port environment: - SERVICE_ENV=docker - TZ=Asia/Shanghai volumes: - ./etc:/app/etc:ro - ./logs:/app/logs depends_on: - postgres - redis networks: - initial-network healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:12102/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s # PostgreSQL Database postgres: image: postgres:15-alpine container_name: initial-postgres restart: unless-stopped environment: POSTGRES_DB: initial_db POSTGRES_USER: postgres POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-initial_password} TZ: Asia/Shanghai volumes: - postgres_data:/var/lib/postgresql/data - ./scripts:/docker-entrypoint-initdb.d:ro ports: - "5432:5432" networks: - initial-network healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 # Redis Cache redis: image: redis:7-alpine container_name: initial-redis restart: unless-stopped command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD:-initial_redis_password} environment: TZ: Asia/Shanghai volumes: - redis_data:/data ports: - "6379:6379" networks: - initial-network healthcheck: test: ["CMD", "redis-cli", "--raw", "incr", "ping"] interval: 10s timeout: 3s retries: 5 # Nginx Reverse Proxy (Optional) nginx: image: nginx:alpine container_name: initial-nginx restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/ssl:/etc/nginx/ssl:ro depends_on: - initial-service networks: - initial-network profiles: - with-nginx volumes: postgres_data: driver: local redis_data: driver: local networks: initial-network: driver: bridge