services: db: image: postgres:16-alpine restart: unless-stopped volumes: - postgres_data:/var/lib/postgresql/data environment: POSTGRES_DB: ${SQL_DATABASE:-busmanager} POSTGRES_USER: ${SQL_USER:-busmanager} POSTGRES_PASSWORD: ${SQL_PASSWORD} healthcheck: test: ["CMD-SHELL", "pg_isready -U ${SQL_USER:-busmanager}"] interval: 5s timeout: 5s retries: 5 web: build: . restart: unless-stopped ports: - "${APP_PORT:-8000}:8000" depends_on: db: condition: service_healthy environment: SECRET_KEY: ${SECRET_KEY} DEBUG: ${DEBUG:-False} ALLOWED_HOSTS: ${ALLOWED_HOSTS:-localhost} SQL_ENGINE: django.db.backends.postgresql SQL_DATABASE: ${SQL_DATABASE:-busmanager} SQL_USER: ${SQL_USER:-busmanager} SQL_PASSWORD: ${SQL_PASSWORD} SQL_HOST: db SQL_PORT: 5432 STATIC_ROOT: /app/staticfiles EMAIL_HOST: ${EMAIL_HOST:-} EMAIL_PORT: ${EMAIL_PORT:-25} # Optional: Azure AD SSO AZURE_CLIENT_ID: ${AZURE_CLIENT_ID:-} AZURE_CLIENT_SECRET: ${AZURE_CLIENT_SECRET:-} AZURE_REDIRECT_URI: ${AZURE_REDIRECT_URI:-} AZURE_AUTHORITY: ${AZURE_AUTHORITY:-} # Optional: Telstra SMS TELSTRA_CLIENT_ID: ${TELSTRA_CLIENT_ID:-} TELSTRA_CLIENT_SECRET: ${TELSTRA_CLIENT_SECRET:-} volumes: - static_files:/app/staticfiles # Runs the nightly coordinator status check (django-crontab job) cron: build: . restart: unless-stopped entrypoint: > sh -c "echo '0 6 * * * python /app/manage.py nightly_check_active_status >> /proc/1/fd/1 2>&1' | crontab - && crond -f -d 8" depends_on: db: condition: service_healthy environment: SECRET_KEY: ${SECRET_KEY} DEBUG: ${DEBUG:-False} ALLOWED_HOSTS: ${ALLOWED_HOSTS:-localhost} SQL_ENGINE: django.db.backends.postgresql SQL_DATABASE: ${SQL_DATABASE:-busmanager} SQL_USER: ${SQL_USER:-busmanager} SQL_PASSWORD: ${SQL_PASSWORD} SQL_HOST: db SQL_PORT: 5432 EMAIL_HOST: ${EMAIL_HOST:-} EMAIL_PORT: ${EMAIL_PORT:-25} AZURE_CLIENT_ID: ${AZURE_CLIENT_ID:-} AZURE_CLIENT_SECRET: ${AZURE_CLIENT_SECRET:-} AZURE_REDIRECT_URI: ${AZURE_REDIRECT_URI:-} AZURE_AUTHORITY: ${AZURE_AUTHORITY:-} TELSTRA_CLIENT_ID: ${TELSTRA_CLIENT_ID:-} TELSTRA_CLIENT_SECRET: ${TELSTRA_CLIENT_SECRET:-} volumes: postgres_data: static_files: