# Docker Compose для продакшн-развертывания version: '3.8' services: # PostgreSQL Database postgres: image: postgres:15-alpine container_name: lottery_postgres restart: unless-stopped profiles: - local-db environment: POSTGRES_DB: ${POSTGRES_DB:-new_lottery_kr} POSTGRES_USER: ${POSTGRES_USER:-lottery} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-change_me_strong_password} volumes: - postgres_data:/var/lib/postgresql/data networks: - lottery_network healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-lottery}"] interval: 10s timeout: 5s retries: 5 # Redis для очередей рассылки redis: image: redis:7-alpine container_name: lottery_redis restart: unless-stopped command: redis-server --appendonly yes volumes: - redis_data:/data networks: - lottery_network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 # Telegram Bot bot: build: context: . dockerfile: Dockerfile container_name: lottery_bot restart: unless-stopped env_file: - .env environment: - LOG_LEVEL=${LOG_LEVEL:-INFO} - REDIS_URL=${REDIS_URL:-redis://redis:6379/0} - USE_REDIS_STORAGE=${USE_REDIS_STORAGE:-true} - DB_CONNECT_TIMEOUT=${DB_CONNECT_TIMEOUT:-5} - DB_POOL_SIZE=${DB_POOL_SIZE:-5} - DB_MAX_OVERFLOW=${DB_MAX_OVERFLOW:-10} - DB_POOL_TIMEOUT=${DB_POOL_TIMEOUT:-10} - DB_POOL_RECYCLE=${DB_POOL_RECYCLE:-1800} - ACTIVITY_UPDATE_INTERVAL_SECONDS=${ACTIVITY_UPDATE_INTERVAL_SECONDS:-300} volumes: - ./logs:/app/logs - bot_data:/app/data networks: - lottery_network depends_on: redis: condition: service_healthy healthcheck: test: ["CMD", "python", "-c", "import sys; sys.exit(0)"] interval: 30s timeout: 10s retries: 3 start_period: 10s volumes: bot_data: driver: local postgres_data: driver: local redis_data: driver: local networks: lottery_network: driver: bridge