# Docker Deployment

> Docker Compose, container services, deployment

- Skill: `fossasia/docker-deployment` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add fossasia/docker-deployment`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fossasia/docker-deployment/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: fossasia (https://skillmd.com/u/fossasia)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/fossasia/docker-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.

