services: postgres: image: postgres:16-alpine container_name: tgw-postgres environment: POSTGRES_USER: ${DB_USERNAME:-postgres} POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: ${DB_DATABASE:-telegram_gateway} volumes: - pgdata:/var/lib/postgresql/data - ./scripts/init-db.sql:/docker-entrypoint-initdb.d/init.sql healthcheck: test: ['CMD-SHELL', 'pg_isready -U ${DB_USERNAME:-postgres} -d ${DB_DATABASE:-telegram_gateway}'] interval: 5s timeout: 5s retries: 5 redis: image: redis:7-alpine container_name: tgw-redis volumes: - redisdata:/data healthcheck: test: ['CMD', 'redis-cli', 'ping'] interval: 5s timeout: 5s retries: 5 app: build: context: .. dockerfile: docker/Dockerfile args: DEBIAN_MIRROR: ${DEBIAN_MIRROR:-https://deb.debian.org/debian} DEBIAN_SECURITY_MIRROR: ${DEBIAN_SECURITY_MIRROR:-https://deb.debian.org/debian-security} container_name: tgw-app ports: - '127.0.0.1:3010:3000' env_file: - ../.env environment: NODE_ENV: production DB_TYPE: postgres DB_SYNCHRONIZE: 'false' DB_MIGRATIONS_RUN: 'true' DB_HOST: postgres DB_PORT: 5432 DB_USERNAME: ${DB_USERNAME:-postgres} DB_PASSWORD: ${DB_PASSWORD} DB_DATABASE: ${DB_DATABASE:-telegram_gateway} REDIS_HOST: redis REDIS_PORT: 6379 REDIS_ENABLED: 'true' JWT_SECRET: ${JWT_SECRET} TDLIB_PATH: /app/node_modules/@prebuilt-tdlib/linux-x64-glibc/libtdjson.so TG_API_ID: ${TG_API_ID} TG_API_HASH: ${TG_API_HASH} TG_DEFAULT_PROXY_TYPE: ${TG_DEFAULT_PROXY_TYPE:-} TG_DEFAULT_PROXY_HOST: ${TG_DEFAULT_PROXY_HOST:-} TG_DEFAULT_PROXY_PORT: ${TG_DEFAULT_PROXY_PORT:-} TG_DEFAULT_PROXY_USERNAME: ${TG_DEFAULT_PROXY_USERNAME:-} TG_DEFAULT_PROXY_PASSWORD: ${TG_DEFAULT_PROXY_PASSWORD:-} TG_DEFAULT_PROXY_SECRET: ${TG_DEFAULT_PROXY_SECRET:-} depends_on: postgres: condition: service_healthy redis: condition: service_healthy volumes: - uploads:/app/uploads - tdlibdata:/app/tdlib_data restart: unless-stopped healthcheck: test: [ 'CMD', 'node', '-e', "fetch('http://127.0.0.1:3000/api/admin/ready').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))", ] interval: 10s timeout: 5s retries: 10 start_period: 20s webhook-receiver: profiles: ['test'] image: node:20-bookworm-slim container_name: tgw-webhook-receiver command: ['node', '/receiver/webhook-receiver.js'] environment: WEBHOOK_TEST_SECRET: ${WEBHOOK_TEST_SECRET:-gateway-test-secret} WEBHOOK_FAIL_COUNT: ${WEBHOOK_FAIL_COUNT:-3} volumes: - ./scripts/webhook-receiver.js:/receiver/webhook-receiver.js:ro ports: - '18080:8080' restart: unless-stopped socks5-proxy: profiles: ['test'] image: node:20-bookworm-slim container_name: tgw-socks5-proxy command: ['node', '/proxy/socks5-proxy.js'] volumes: - ./scripts/socks5-proxy.js:/proxy/socks5-proxy.js:ro ports: - '11080:1080' - '11081:1081' restart: unless-stopped volumes: pgdata: redisdata: uploads: tdlibdata: