services: # PostgreSQL база данных postgres: image: postgres:15-alpine container_name: tgloader_postgres env_file: - .env environment: POSTGRES_DB: ${POSTGRES_DB:-tgloader} POSTGRES_USER: ${POSTGRES_USER:-tgloader} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-tgloader_password} volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-tgloader}"] interval: 10s timeout: 5s retries: 5 networks: - tgloader_network # Redis для сессий redis: image: redis:7-alpine container_name: tgloader_redis command: redis-server --appendonly yes volumes: - redis_data:/data ports: - "6379:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 networks: - tgloader_network # Основное приложение app: build: . container_name: tgloader_app depends_on: postgres: condition: service_healthy redis: condition: service_healthy env_file: - .env environment: # Флаг для определения Docker окружения (чтобы не загружать .env файл) DOCKER_ENV: "1" # Явно указываем DATABASE_URL для Docker (переопределяет любые значения из env_file или хоста) # Используем значение из .env, если оно задано, иначе значение по умолчанию для Docker # Примечание: docker-compose читает переменные из .env через env_file, но мы явно переопределяем здесь DATABASE_URL: ${DATABASE_URL:-postgresql+asyncpg://tgloader:${POSTGRES_PASSWORD:-tgloader_password}@postgres:5432/tgloader} # REDIS_HOST для Docker должен указывать на имя сервиса REDIS_HOST: ${REDIS_HOST:-redis} volumes: - ./data:/app/data - ./downloads:/app/downloads - ./logs:/app/logs ports: - "5000:5000" restart: unless-stopped networks: - tgloader_network volumes: postgres_data: redis_data: networks: tgloader_network: driver: bridge