4.2 KiB
4.2 KiB
Deployment Guide
Purpose
Describe how to deploy the IGNY8 stack using the provided Dockerfiles and docker-compose.app.yml, including service wiring and required external dependencies.
Code Locations (exact paths)
- App compose stack:
docker-compose.app.yml - Backend image:
backend/Dockerfile - Frontend image:
frontend/Dockerfile - Backend settings/env:
backend/igny8_core/settings.py
High-Level Responsibilities
- Build images for backend, frontend, marketing, and sites renderer.
- Bring up the app stack (backend, frontend, marketing, sites, Celery worker, Celery beat) on the shared external network.
- Rely on external infra services (Postgres, Redis) defined outside this repo (referenced in compose comments).
Detailed Behavior
- Backend container:
- Image
igny8-backend:latestfrombackend/Dockerfile(Python 3.11 slim, installsrequirements.txt, runs Gunicorn on 8010). - Mounted volumes:
/data/app/igny8/backend(code),/data/app/igny8(shared),/data/app/logs(logs). - Env vars for DB/Redis and security flags (USE_SECURE_COOKIES/PROXY, DEBUG, SECRET_KEY).
- Healthcheck hits
http://localhost:8010/api/v1/system/status/.
- Image
- Frontend container:
- Image
igny8-frontend-dev:latestfromfrontend/Dockerfile.dev(built separately; serves via Vite dev server on 5173 exposed as 8021). - Env
VITE_BACKEND_URL.
- Image
- Marketing dev and Sites renderer containers: images
igny8-marketing-dev:latestandigny8-sites-dev:latest, ports 8023→5174 and 8024→5176; Sites mounts/data/app/igny8/sitesand/data/app/sites-data. - Celery worker/beat:
- Use
igny8-backend:latest, commandscelery -A igny8_core workerandcelery -A igny8_core beat. - Share same DB/Redis env and code volumes.
- Use
- Network:
igny8_netmarkedexternal: true; compose expects Postgres and Redis running in another stack (/data/app/docker-compose.ymlper comment). - Ports: backend 8011→8010, frontend 8021→5173, marketing 8023→5174, sites 8024→5176.
Data Structures / Models Involved (no code)
- Not model-specific; relies on runtime env (Postgres DB, Redis broker).
Execution Flow
- Build images:
docker build -t igny8-backend:latest -f backend/Dockerfile backenddocker build -t igny8-frontend-dev:latest -f frontend/Dockerfile.dev frontenddocker build -t igny8-marketing-dev:latest -f frontend/Dockerfile.marketing.dev frontenddocker build -t igny8-sites-dev:latest -f sites/Dockerfile.dev sites
- Ensure external infra stack (Postgres, Redis, network
igny8_net) is up. - Run:
docker compose -f docker-compose.app.yml -p igny8-app up -d. - Healthcheck will mark backend healthy before frontend depends_on proceeds.
Cross-Module Interactions
- Backend depends on Postgres/Redis; Celery worker/beat rely on same env to process automation/AI tasks.
- Frontend depends on backend health; sites renderer reads deployed sites from
/data/app/sites-data.
State Transitions (if applicable)
- Container lifecycle managed by Docker restart policy (
restart: always).
Error Handling
- Backend healthcheck fails if status endpoint not reachable; container marked unhealthy causing depends_on wait.
- Gunicorn exit surfaces via Docker logs; no auto-restart beyond Docker restart policy.
Tenancy Rules
- Enforced in application layer via middleware; deployment does not alter tenancy.
Billing Rules (if applicable)
- None at deployment layer.
Background Tasks / Schedulers (if applicable)
- Celery beat runs schedules (e.g., automation scheduler) using same image and env.
Key Design Considerations
- Compose uses images (not builds) to avoid accidental rebuilds in Portainer; images must exist beforehand.
- External network requirement means infra stack must pre-create
igny8_netand services. - Backend served by Gunicorn with 4 workers per compose command; adjust via compose if scaling container horizontally.
How Developers Should Work With This Module
- When changing env vars, update
docker-compose.app.ymland keep parity withsettings.py. - For new services (e.g., monitoring), add to compose and attach to
igny8_net. - Keep healthcheck endpoint stable (
/api/v1/system/status/) or update compose accordingly.