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 environment: DB_HOST: ${DB_HOST} DB_USER: ${DB_USER} DB_NAME: ${DB_NAME} DB_PASSWORD: ${DB_PASSWORD} REDIS_URL: ${REDIS_URL} PEPPER: ${PEPPER} JWT_SECRET_KEY: ${JWT_SECRET_KEY} GOOGLE_API_KEY: ${GOOGLE_API_KEY} expose: - "8000" depends_on: - db - redis networks: - default 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 environment: DB_HOST: ${DB_HOST} DB_USER: ${DB_USER} DB_NAME: ${DB_NAME} DB_PASSWORD: ${DB_PASSWORD} REDIS_URL: ${REDIS_URL} PEPPER: ${PEPPER} JWT_SECRET_KEY: ${JWT_SECRET_KEY} GOOGLE_API_KEY: $GOOGLE_API_KEY} depends_on: - db - redis 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} 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: ghcr.io/c-d-p/maia-frontend:latest container_name: MAIA_FRONTEND restart: unless-stopped 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