services: # ----- Backend API (Uvicorn/FastAPI/Django etc.) ----- api: image: ghcr.io/c-d-p/maia:44b8760ab245407ac8dcac435cca6bbfad51284b container_name: MAIA_API restart: unless-stopped command: uvicorn main:app --host 0.0.0.0 --port 8000 expose: - "8000" depends_on: - db - redis networks: - default env_file: - ./.env.deploy labels: - "traefik.enable=true" - "traefik.http.routers.maia.rule=Host(`maia.depaoli.id.au`)" - "traefik.http.routers.maia.tls=true" - "traefik.http.routers.maia.entrypoints=secureweb" - "traefik.http.routers.maia.tls.certresolver=myresolver" - "traefik.http.services.maia.loadbalancer.server.port=8000" - "traefik.docker.network=host" # ----- Celery Worker ----- worker: image: ghcr.io/c-d-p/maia:44b8760ab245407ac8dcac435cca6bbfad51284b container_name: MAIA_Worker restart: unless-stopped command: celery -A core.celery_app worker --loglevel=info depends_on: - db - redis env_file: - ./.env.deploy networks: - default # ----- Database (PostgreSQL) ----- db: image: postgres:15 # Use a specific version container_name: MAIA_DB volumes: - /srv/docker/container/MAIA/db:/var/lib/postgresql/data # Persist data using a named volume environment: - POSTGRES_USER=${DB_USER} - POSTGRES_PASSWORD=${DB_PASSWORD} - POSTGRES_DB=${DB_NAME} env_file: - ./.env.deploy networks: - default restart: unless-stopped # ----- Cache (Redis) ----- redis: image: redis:7 # Use a specific version container_name: MAIA_Redis volumes: - /srv/docker/container/MAIA/redis_data:/data networks: - default restart: unless-stopped # ----- Frontend (nginx) ------ frontend: image: nginx:1.25-alpine container_name: MAIA_FRONTEND restart: unless-stopped volumes: - /srv/docker/container/MAIA/frontend/dist:/usr/share/nginx/html:ro # read only - /srv/docker/container/MAIA/frontend/conf/nginx.conf:/etc/nginx/conf.d/default.conf:ro networks: - default expose: - "80" labels: - "traefik.enable=true" - "traefik.http.routers.maia-frontend.rule=Host(`app.maia.depaoli.id.au`)" - "traefik.http.routers.maia-frontend.tls=true" - "traefik.http.routers.maia-frontend.entrypoints=secureweb" - "traefik.http.routers.maia-frontend.tls.certresolver=myresolver" - "traefik.http.services.maia-frontend.loadbalancer.server.port=80" - "traefik.docker.network=host" # ----- Network Definition ----- networks: default: # Define a custom bridge network driver: bridge name: maia_network