name: tx-os services: postgres: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-tx} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-tx_dev_password} POSTGRES_DB: ${POSTGRES_DB:-tx} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-tx} -d ${POSTGRES_DB:-tx}"] interval: 5s timeout: 5s retries: 20 migrate: build: context: . dockerfile: docker/api-server.Dockerfile image: tx-os/api-server:latest depends_on: postgres: condition: service_healthy environment: NODE_ENV: production DATABASE_URL: postgres://${POSTGRES_USER:-tx}:${POSTGRES_PASSWORD:-tx_dev_password}@postgres:5432/${POSTGRES_DB:-tx} SEED_ADMIN_PASSWORD: ${SEED_ADMIN_PASSWORD:?SEED_ADMIN_PASSWORD is required — re-run ./start.sh to generate one} SEED_USER_PASSWORD: ${SEED_USER_PASSWORD:?SEED_USER_PASSWORD is required — re-run ./start.sh to generate one} user: root entrypoint: ["/usr/bin/tini", "--"] command: ["/bin/bash", "/usr/local/bin/migrate.sh"] restart: "no" api: build: context: . dockerfile: docker/api-server.Dockerfile image: tx-os/api-server:latest restart: unless-stopped depends_on: postgres: condition: service_healthy migrate: condition: service_completed_successfully environment: NODE_ENV: production PORT: 8080 DATABASE_URL: postgres://${POSTGRES_USER:-tx}:${POSTGRES_PASSWORD:-tx_dev_password}@postgres:5432/${POSTGRES_DB:-tx} SESSION_SECRET: ${SESSION_SECRET:?SESSION_SECRET is required — copy .env.docker.example to .env and edit it} LOCAL_STORAGE_SIGNING_SECRET: ${LOCAL_STORAGE_SIGNING_SECRET:-${SESSION_SECRET}} LOCAL_STORAGE_ROOT: /app/storage STORAGE_DRIVER: ${STORAGE_DRIVER:-local} PRIVATE_OBJECT_DIR: ${PRIVATE_OBJECT_DIR:-/app/storage/private} PUBLIC_OBJECT_SEARCH_PATHS: ${PUBLIC_OBJECT_SEARCH_PATHS:-/app/storage/public} DEFAULT_OBJECT_STORAGE_BUCKET_ID: ${DEFAULT_OBJECT_STORAGE_BUCKET_ID:-tx-local} ALLOWED_ORIGINS: ${ALLOWED_ORIGINS:-http://localhost:${APP_PORT:-3000}} PUBLIC_BASE_URL: ${PUBLIC_BASE_URL:-http://localhost:${APP_PORT:-3000}} LOG_LEVEL: ${LOG_LEVEL:-info} SMTP_HOST: ${SMTP_HOST:-} SMTP_PORT: ${SMTP_PORT:-} SMTP_USER: ${SMTP_USER:-} SMTP_PASS: ${SMTP_PASS:-} SMTP_FROM: ${SMTP_FROM:-} SMTP_SECURE: ${SMTP_SECURE:-} volumes: - app_storage:/app/storage web: build: context: . dockerfile: docker/tx-os.Dockerfile image: tx-os/web:latest restart: unless-stopped depends_on: - api ports: - "${APP_PORT:-3000}:80" volumes: postgres_data: app_storage: