services: postgres: image: postgres:15-alpine container_name: remnawave_bot_db restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-remnawave_bot} POSTGRES_USER: ${POSTGRES_USER:-remnawave_user} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-secure_password_123} POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C" volumes: - postgres_data:/var/lib/postgresql/data networks: - bot_network healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-remnawave_user} -d ${POSTGRES_DB:-remnawave_bot}"] interval: 30s timeout: 5s retries: 5 start_period: 30s redis: image: redis:7-alpine container_name: remnawave_bot_redis restart: unless-stopped command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru volumes: - redis_data:/data networks: - bot_network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 10s retries: 3 bot: build: . container_name: remnawave_bot restart: unless-stopped depends_on: postgres: condition: service_healthy redis: condition: service_healthy env_file: - .env environment: DOCKER_ENV: "true" DATABASE_MODE: "auto" POSTGRES_HOST: "postgres" POSTGRES_PORT: "5432" POSTGRES_DB: "${POSTGRES_DB:-remnawave_bot}" POSTGRES_USER: "${POSTGRES_USER:-remnawave_user}" POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:-secure_password_123}" REDIS_URL: "redis://redis:6379/0" TZ: "Europe/Moscow" LOCALES_PATH: "${LOCALES_PATH:-/app/locales}" volumes: # Логи - ./logs:/app/logs:rw # Данные приложения (для SQLite в случае переключения) - ./data:/app/data:rw - ./locales:/app/locales:rw # Конфигурация приложения # - ./app-config.json:/app/app-config.json:ro # Timezone - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro # Логотип для сообщений - ./vpn_logo.png:/app/vpn_logo.png:ro ports: - "${WEB_API_PORT:-8080}:8080" - "${TRIBUTE_WEBHOOK_PORT:-8081}:8081" - "${YOOKASSA_WEBHOOK_PORT:-8082}:8082" - "${CRYPTOBOT_WEBHOOK_PORT:-8083}:8083" - "${PAL24_WEBHOOK_PORT:-8084}:8084" - "${WATA_WEBHOOK_PORT:-8085}:8085" - "${HELEKET_WEBHOOK_PORT:-8086}:8086" networks: - bot_network healthcheck: test: ["CMD-SHELL", "python -c 'import requests; requests.get(\"http://localhost:8081/health\", timeout=5)' || exit 1"] interval: 60s timeout: 10s retries: 3 start_period: 30s volumes: postgres_data: driver: local redis_data: driver: local networks: bot_network: driver: bridge ipam: config: - subnet: 172.20.0.0/16 gateway: 172.20.0.1