September 2025. Story of simplification.
Before
services:
mysql:
redis:
backend:
frontend:
dispatcher:
nginx:
html-cache-generator:
worker:
8 containers. Each with its own Dockerfile. Each can crash.
Problems
Build 15 minutes. One container crashed - figure out which one. Logs in 8 places.
docker-compose up - and wait. Something didn't come up - figure out why.
Local development turned into fighting Docker.
First simplification
Removed html-cache-generator. Puppeteer too heavy, couldn't fix the flicker.
Removed worker - backend runs tasks directly.
6 containers.
Second simplification
Embedded Dispatcher into backend. One process, one container.
Built frontend statically. Nginx serves files.
4 containers.
LITE profile
SQLite instead of MySQL. In-memory instead of Redis.
2 containers: backend + nginx.
Result
Before: 15 minutes, 8 containers, 500MB RAM After: 30 seconds, 2 containers, 23MB RAM
For production with load - full configuration. For everything else - LITE.