Files
lingxi-web/telegram-gateway/docker/docker-compose.yml
T

117 lines
3.3 KiB
YAML

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: