--- name: docker-deployment description: Docker Compose, container services, deployment --- # Skill: Docker Deployment ## Key Files | 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 | ## Services (Development Stack) | 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 | ## Building and Running (Development) ```bash # 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 ``` ## Running a Management Command Inside a Container ```bash 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. ## Development vs Production | 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 | ## Environment Variables Required variables are documented in `deployment/env.sample` and `deployment/env.dev.sample`. At minimum, set: - `EVY_SECRET_KEY` - individual `EVY_POSTGRES_*` vars - `EVY_REDIS_URL` - `EVY_SITE_URL` (production only) See `DEPLOYMENT.md` for the full production setup walkthrough, including Nginx, SSL (certbot), and backup configuration.