Skip to content

Docker

Overview

Sutomo uses three Docker Compose files and two Dockerfiles for different environments.

FilePurpose
DockerfileProduction image (lighter, no handbook build)
Dockerfile.devDev image (includes Vitepress handbook build)
docker-compose.ymlProduction services
docker-compose.dev.ymlDev overrides (adds DB, Redis, ports)
docker-compose.test.ymlCI test environment

Container Architecture

Container Functions

ContainerImageCommandFunction
sutomo-appFrankenPHP + Laravel Octaneoctane:start --workers=2 (dev) / --workers=8 (prod)Serves HTTP, runs PHP
sutomo-queueSame as appqueue:work --tries=3Processes queued jobs
sutomo-dbPostgreSQL 17DefaultDatabase (dev only)
sutomo-redisRedis 7-alpineDefaultCache + Queue (dev only)
sutomo-prometheusPrometheus v3ConfigMetrics collection
sutomo-lokiLoki v3ConfigLog aggregation
sutomo-grafanaGrafana 13ConfigMetrics dashboard

Dev vs Prod

AspectDevProd
DockerfileDockerfile.devDockerfile
Workers28
Handbooks buildYesNo
DB + RedisIncludedExternal
File mountsYes (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 + volumes

Key Files

FilePurpose
DockerfileProduction image definition
Dockerfile.devDev image definition
docker-compose.ymlProduction Compose services
docker-compose.dev.ymlDev Compose overrides
docker-compose.test.ymlCI test Compose environment
MakefileCommon command shortcuts