Docker
Overview
Sutomo uses three Docker Compose files and two Dockerfiles for different environments.
| File | Purpose |
|---|---|
Dockerfile | Production image (lighter, no handbook build) |
Dockerfile.dev | Dev image (includes Vitepress handbook build) |
docker-compose.yml | Production services |
docker-compose.dev.yml | Dev overrides (adds DB, Redis, ports) |
docker-compose.test.yml | CI test environment |
Container Architecture
Container Functions
| Container | Image | Command | Function |
|---|---|---|---|
sutomo-app | FrankenPHP + Laravel Octane | octane:start --workers=2 (dev) / --workers=8 (prod) | Serves HTTP, runs PHP |
sutomo-queue | Same as app | queue:work --tries=3 | Processes queued jobs |
sutomo-db | PostgreSQL 17 | Default | Database (dev only) |
sutomo-redis | Redis 7-alpine | Default | Cache + Queue (dev only) |
sutomo-prometheus | Prometheus v3 | Config | Metrics collection |
sutomo-loki | Loki v3 | Config | Log aggregation |
sutomo-grafana | Grafana 13 | Config | Metrics dashboard |
Dev vs Prod
| Aspect | Dev | Prod |
|---|---|---|
| Dockerfile | Dockerfile.dev | Dockerfile |
| Workers | 2 | 8 |
| Handbooks build | Yes | No |
| DB + Redis | Included | External |
| File mounts | Yes (live reload) | No |
Makefile Commands
bash
make build # Build & start containers (dev)
make build prod # Build & start containers (production)
make up # Start containers (no rebuild)
make down # Stop & remove containers
make restart # Restart app container
make migrate-seed # Run migrate:fresh --seed
make test # Run tests
make test ARGS="--filter=TestName"
make clean # Remove containers + volumesKey Files
| File | Purpose |
|---|---|
Dockerfile | Production image definition |
Dockerfile.dev | Dev image definition |
docker-compose.yml | Production Compose services |
docker-compose.dev.yml | Dev Compose overrides |
docker-compose.test.yml | CI test Compose environment |
Makefile | Common command shortcuts |