Docker Compose, container services, deployment
| File | Purpose |
|---|---|
docker-compose.yml | Development / local Compose stack |
deployment/docker-compose.yml | Production Compose stack |
deployment/env.sample | Sample production environment variables |
deployment/env.dev.sample | Sample development environment variables |
deployment/nginx/ | Nginx reverse-proxy configuration |
DEPLOYMENT.md | Step-by-step production deployment guide |
| Service | Image / Build | Role |
|---|
web | ./app (Dockerfile) | Django dev server on port 8000 |
worker | ./app (Dockerfile) | Celery task worker |
redis | redis:latest | Message broker and cache |
db | postgres:15 | PostgreSQL database |
# Copy and edit environment variables
cp deployment/env.dev.sample .env.dev
# Build images and start all services
docker compose up --build
# Run with detached containers
docker compose up -d --build
# View logs
docker compose logs -f web
docker compose logs -f worker
# Stop all services
docker compose down
docker compose exec web python manage.py migrate
docker compose exec web python manage.py create_admin_user
Use create_admin_user as the default onboarding command for least-privilege admin setup.
Use createsuperuser only when full superuser access is explicitly required.
| Aspect | Development (docker-compose.yml) | Production (deployment/docker-compose.yml) |
|---|---|---|
| Web server | Django runserver | Gunicorn behind host-level Nginx |
| Static files | Served by Django | Pre-built and served by Nginx |
| Env file | .env.dev | .env |
| Hot reload | Yes (volume mount) | No |
Required variables are documented in deployment/env.sample and deployment/env.dev.sample. At minimum, set:
EVY_SECRET_KEYEVY_POSTGRES_* varsEVY_REDIS_URLEVY_SITE_URL (production only)See DEPLOYMENT.md for the full production setup walkthrough, including Nginx, SSL (certbot), and backup configuration.