# Docker Compose для локального тестирования version: '3.8' services: # Основное приложение lottery-bot: build: context: . dockerfile: Dockerfile container_name: lottery_bot restart: unless-stopped environment: - DATABASE_URL=${DATABASE_URL:-postgresql+asyncpg://lottery:password@postgres:5432/lottery_bot} - BOT_TOKEN=${BOT_TOKEN} - ADMIN_IDS=${ADMIN_IDS} - LOG_LEVEL=${LOG_LEVEL:-INFO} volumes: - ./data:/app/data - ./logs:/app/logs depends_on: postgres: condition: service_healthy redis: condition: service_healthy networks: - lottery_network # PostgreSQL база данных postgres: image: postgres:15-alpine container_name: lottery_postgres restart: unless-stopped environment: - POSTGRES_DB=lottery_bot - POSTGRES_USER=lottery - POSTGRES_PASSWORD=password ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./scripts/init_postgres.sql:/docker-entrypoint-initdb.d/init.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U lottery -d lottery_bot"] interval: 10s timeout: 5s retries: 5 networks: - lottery_network # Redis для кэширования redis: image: redis:7-alpine container_name: lottery_redis restart: unless-stopped command: redis-server --appendonly yes ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 3 networks: - lottery_network # pgAdmin для управления БД (опционально) pgadmin: image: dpage/pgadmin4:latest container_name: lottery_pgadmin restart: unless-stopped environment: - PGADMIN_DEFAULT_EMAIL=admin@lottery.local - PGADMIN_DEFAULT_PASSWORD=admin ports: - "8080:80" depends_on: - postgres networks: - lottery_network profiles: - admin # Prometheus для мониторинга (опционально) prometheus: image: prom/prometheus:latest container_name: lottery_prometheus restart: unless-stopped command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' ports: - "9090:9090" volumes: - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus networks: - lottery_network profiles: - monitoring # Grafana для визуализации (опционально) grafana: image: grafana/grafana:latest container_name: lottery_grafana restart: unless-stopped environment: - GF_SECURITY_ADMIN_PASSWORD=admin ports: - "3000:3000" volumes: - grafana_data:/var/lib/grafana - ./monitoring/grafana/provisioning:/etc/grafana/provisioning depends_on: - prometheus networks: - lottery_network profiles: - monitoring volumes: postgres_data: name: lottery_postgres_data redis_data: name: lottery_redis_data prometheus_data: name: lottery_prometheus_data grafana_data: name: lottery_grafana_data networks: lottery_network: name: lottery_network driver: bridge