services: db: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-drivers} POSTGRES_USER: ${POSTGRES_USER:-drivers} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-drivers} ports: - "127.0.0.1:${POSTGRES_PORT:-5433}:5432" volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-drivers} -d ${POSTGRES_DB:-drivers}"] interval: 5s timeout: 3s retries: 10 logging: &default-logging driver: json-file options: max-size: "10m" max-file: "5" redis: image: redis:7-alpine restart: unless-stopped command: ["redis-server", "--appendonly", "yes"] volumes: - redisdata:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 10 logging: *default-logging api: build: . restart: unless-stopped command: sh -c "alembic upgrade head && uvicorn app.main:app --host 0.0.0.0 --port 8000" env_file: - path: .env required: false environment: DATABASE_URL: ${DATABASE_URL:-postgresql+asyncpg://drivers:drivers@db:5432/drivers} BOT_TOKEN: ${BOT_TOKEN:-} BOT_USERNAME: ${BOT_USERNAME:-} API_BASE_URL: ${API_BASE_URL:-http://api:8000} WEBAPP_URL: ${WEBAPP_URL:-http://localhost:8000} PUBLIC_WEBAPP_URL: ${PUBLIC_WEBAPP_URL:-} CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:8000,http://127.0.0.1:8000} INTERNAL_API_TOKEN: ${INTERNAL_API_TOKEN:-} APP_ENV: ${APP_ENV:-development} ALLOW_DEV_AUTH: ${ALLOW_DEV_AUTH:-false} OCR_PROVIDER: ${OCR_PROVIDER:-tesseract} OCR_LANGUAGES: ${OCR_LANGUAGES:-eng+rus+kor} REDIS_URL: ${REDIS_URL:-redis://redis:6379/0} SECRET_KEY: ${SECRET_KEY:-} VAPID_PUBLIC_KEY: ${VAPID_PUBLIC_KEY:-} VAPID_PRIVATE_KEY: ${VAPID_PRIVATE_KEY:-} ports: - "127.0.0.1:8000:8000" healthcheck: test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/ready', timeout=3).read()\""] interval: 10s timeout: 5s retries: 12 depends_on: db: condition: service_healthy redis: condition: service_healthy logging: *default-logging bot: build: . restart: unless-stopped command: python -m bot.main env_file: - path: .env required: false environment: BOT_TOKEN: ${BOT_TOKEN:-} BOT_USERNAME: ${BOT_USERNAME:-} API_BASE_URL: ${API_BASE_URL:-http://api:8000} WEBAPP_URL: ${WEBAPP_URL:-http://localhost:8000} PUBLIC_WEBAPP_URL: ${PUBLIC_WEBAPP_URL:-} INTERNAL_API_TOKEN: ${INTERNAL_API_TOKEN:-} APP_ENV: ${APP_ENV:-development} OCR_PROVIDER: ${OCR_PROVIDER:-tesseract} OCR_LANGUAGES: ${OCR_LANGUAGES:-eng+rus+kor} REDIS_URL: ${REDIS_URL:-redis://redis:6379/0} SECRET_KEY: ${SECRET_KEY:-} depends_on: api: condition: service_healthy logging: *default-logging volumes: pgdata: redisdata: