services: postgres: image: postgres:16-alpine container_name: ota-postgres restart: unless-stopped environment: - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_ROOT_PASS} - POSTGRES_DB=postgres - POSTGRES_PASS_PROD=${POSTGRES_PASS_PROD} - POSTGRES_PASS_PREPROD=${POSTGRES_PASS_PREPROD} - POSTGRES_PASS_OMNEX_CLI=${POSTGRES_PASS_OMNEX_CLI} - POSTGRES_PASS_OMNEX_ADMIN=${POSTGRES_PASS_OMNEX_ADMIN} - POSTGRES_PASS_MOBILE_PROD=${POSTGRES_PASS_MOBILE_PROD} - POSTGRES_PASS_MOBILE_PREPROD=${POSTGRES_PASS_MOBILE_PREPROD} volumes: - postgres_data:/var/lib/postgresql/data - ./init-multi-db.sh:/docker-entrypoint-initdb.d/init-multi-db.sh:ro networks: - ota-net healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] interval: 10s timeout: 5s retries: 5 ota-prod: image: xaviaio/xavia-ota:latest container_name: ota-prod restart: unless-stopped environment: - HOST=https://ota-prod.uber-stup.club - BLOB_STORAGE_TYPE=local - DB_TYPE=postgres - POSTGRES_USER=ota_prod - POSTGRES_PASSWORD=${POSTGRES_PASS_PROD} - POSTGRES_DB=ota_prod - POSTGRES_HOST=postgres - POSTGRES_PORT=5432 - PRIVATE_KEY_BASE_64=${PRIVATE_KEY_PROD} - ADMIN_PASSWORD=${ADMIN_PASSWORD_PROD} - UPLOAD_KEY=${UPLOAD_KEY_PROD} volumes: - ota_prod_releases:/app/local-releases networks: - ota-net depends_on: postgres: condition: service_healthy ota-preprod: image: xaviaio/xavia-ota:latest container_name: ota-preprod restart: unless-stopped environment: - HOST=https://ota-preprod.uber-stup.club - BLOB_STORAGE_TYPE=local - DB_TYPE=postgres - POSTGRES_USER=ota_preprod - POSTGRES_PASSWORD=${POSTGRES_PASS_PREPROD} - POSTGRES_DB=ota_preprod - POSTGRES_HOST=postgres - POSTGRES_PORT=5432 - PRIVATE_KEY_BASE_64=${PRIVATE_KEY_PREPROD} - ADMIN_PASSWORD=${ADMIN_PASSWORD_PREPROD} - UPLOAD_KEY=${UPLOAD_KEY_PREPROD} volumes: - ota_preprod_releases:/app/local-releases networks: - ota-net depends_on: postgres: condition: service_healthy ota-omnex-cli: image: xaviaio/xavia-ota:latest container_name: ota-omnex-cli restart: unless-stopped environment: - HOST=https://ota-omnex-cli.uber-stup.club - BLOB_STORAGE_TYPE=local - DB_TYPE=postgres - POSTGRES_USER=ota_omnex_cli - POSTGRES_PASSWORD=${POSTGRES_PASS_OMNEX_CLI} - POSTGRES_DB=ota_omnex_cli - POSTGRES_HOST=postgres - POSTGRES_PORT=5432 - PRIVATE_KEY_BASE_64=${PRIVATE_KEY_OMNEX_CLI} - ADMIN_PASSWORD=${ADMIN_PASSWORD_OMNEX_CLI} - UPLOAD_KEY=${UPLOAD_KEY_OMNEX_CLI} volumes: - ota_omnex_cli_releases:/app/local-releases networks: - ota-net depends_on: postgres: condition: service_healthy ota-omnex-admin: image: xaviaio/xavia-ota:latest container_name: ota-omnex-admin restart: unless-stopped environment: - HOST=https://ota-omnex-admin.uber-stup.club - BLOB_STORAGE_TYPE=local - DB_TYPE=postgres - POSTGRES_USER=ota_omnex_admin - POSTGRES_PASSWORD=${POSTGRES_PASS_OMNEX_ADMIN} - POSTGRES_DB=ota_omnex_admin - POSTGRES_HOST=postgres - POSTGRES_PORT=5432 - PRIVATE_KEY_BASE_64=${PRIVATE_KEY_OMNEX_ADMIN} - ADMIN_PASSWORD=${ADMIN_PASSWORD_OMNEX_ADMIN} - UPLOAD_KEY=${UPLOAD_KEY_OMNEX_ADMIN} volumes: - ota_omnex_admin_releases:/app/local-releases networks: - ota-net depends_on: postgres: condition: service_healthy ota-mobile-prod: image: xaviaio/xavia-ota:latest container_name: ota-mobile-prod restart: unless-stopped environment: - HOST=https://ota-mobile-prod.uber-stup.club - BLOB_STORAGE_TYPE=local - DB_TYPE=postgres - POSTGRES_USER=ota_mobile_prod - POSTGRES_PASSWORD=${POSTGRES_PASS_MOBILE_PROD} - POSTGRES_DB=ota_mobile_prod - POSTGRES_HOST=postgres - POSTGRES_PORT=5432 - PRIVATE_KEY_BASE_64=${PRIVATE_KEY_MOBILE_PROD} - ADMIN_PASSWORD=${ADMIN_PASSWORD_MOBILE_PROD} - UPLOAD_KEY=${UPLOAD_KEY_MOBILE_PROD} volumes: - ota_mobile_prod_releases:/app/local-releases networks: - ota-net depends_on: postgres: condition: service_healthy ota-mobile-preprod: image: xaviaio/xavia-ota:latest container_name: ota-mobile-preprod restart: unless-stopped environment: - HOST=https://ota-mobile-preprod.uber-stup.club - BLOB_STORAGE_TYPE=local - DB_TYPE=postgres - POSTGRES_USER=ota_mobile_preprod - POSTGRES_PASSWORD=${POSTGRES_PASS_MOBILE_PREPROD} - POSTGRES_DB=ota_mobile_preprod - POSTGRES_HOST=postgres - POSTGRES_PORT=5432 - PRIVATE_KEY_BASE_64=${PRIVATE_KEY_MOBILE_PREPROD} - ADMIN_PASSWORD=${ADMIN_PASSWORD_MOBILE_PREPROD} - UPLOAD_KEY=${UPLOAD_KEY_MOBILE_PREPROD} volumes: - ota_mobile_preprod_releases:/app/local-releases networks: - ota-net depends_on: postgres: condition: service_healthy nginx: image: nginx:alpine container_name: ota-nginx restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro - ./certs:/etc/nginx/certs:ro - certbot_www:/var/www/certbot:ro networks: - ota-net depends_on: - ota-prod - ota-preprod - ota-omnex-cli - ota-omnex-admin - ota-mobile-prod - ota-mobile-preprod dozzle-agent: image: amir20/dozzle:latest command: agent volumes: - /var/run/docker.sock:/var/run/docker.sock:ro ports: - "0.0.0.0:7007:7007" restart: unless-stopped networks: ota-net: volumes: postgres_data: ota_prod_releases: ota_preprod_releases: ota_omnex_cli_releases: ota_omnex_admin_releases: ota_mobile_prod_releases: ota_mobile_preprod_releases: certbot_www: