75 lines
4.2 KiB
Markdown
75 lines
4.2 KiB
Markdown
# 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:latest` from `backend/Dockerfile` (Python 3.11 slim, installs `requirements.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/`.
|
|
- Frontend container:
|
|
- Image `igny8-frontend-dev:latest` from `frontend/Dockerfile.dev` (built separately; serves via Vite dev server on 5173 exposed as 8021).
|
|
- Env `VITE_BACKEND_URL`.
|
|
- Marketing dev and Sites renderer containers: images `igny8-marketing-dev:latest` and `igny8-sites-dev:latest`, ports 8023→5174 and 8024→5176; Sites mounts `/data/app/igny8/sites` and `/data/app/sites-data`.
|
|
- Celery worker/beat:
|
|
- Use `igny8-backend:latest`, commands `celery -A igny8_core worker` and `celery -A igny8_core beat`.
|
|
- Share same DB/Redis env and code volumes.
|
|
- Network: `igny8_net` marked `external: true`; compose expects Postgres and Redis running in another stack (`/data/app/docker-compose.yml` per 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 backend`
|
|
- `docker build -t igny8-frontend-dev:latest -f frontend/Dockerfile.dev frontend`
|
|
- `docker build -t igny8-marketing-dev:latest -f frontend/Dockerfile.marketing.dev frontend`
|
|
- `docker 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_net` and 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.yml` and keep parity with `settings.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.
|