Files
azionelab-v2/docs/deployment.md
T

1.7 KiB

Deployment

Local environment

Copy .env.example to .env, replace the development placeholders, then run:

cp .env.example .env
docker compose up --build -d
docker compose ps
docker compose exec backend python manage.py seed_demo

The backend applies migrations and collects static files before starting Gunicorn. All services have health checks; wait for healthy status before opening the site.

Compose exposes the Astro site on loopback port 4321 and Django/Wagtail on loopback port 8000. PostgreSQL is available only on the Compose network. postgres_data and media_data are persistent named volumes.

The stack uses explicit PostgreSQL 16.9, Python 3.12.12, and Node.js 22.20 image versions. Containers are not privileged and use no-new-privileges.

Required runtime variables are DATABASE_URL, DJANGO_SECRET_KEY, DJANGO_DEBUG, DJANGO_ALLOWED_HOSTS, WAGTAILADMIN_BASE_URL, and PUBLIC_CMS_API_URL. PostgreSQL bootstrap variables are also documented in .env.example. Do not use the example credentials outside local development.

WAGTAILADMIN_BASE_URL must be browser-reachable because it is used for media URLs. PUBLIC_CMS_API_URL must be reachable by Astro; within Compose it is http://backend:8000.

Production boundary

The Compose stack is a local development deployment. A public environment still needs TLS termination, production static/media serving, restricted admin access, managed secrets, off-host backups, monitoring, and an explicit domain/allowed-host policy.

Rollback

Revert the application commit and rebuild images. Keep the database and media volumes unless content deletion is intentional. Schema rollback must be evaluated per Django migration; take coordinated database and media backups first.