Services
File:docker-compose.yaml
All services on the
tb.network Docker network.
Database defaults
Primary:Dockerfile
File:Dockerfile
Multi-stage build:
Stage 1: Nginx
Stage 2: App (PHP-FPM)
- libxml2, bash, sudo
- freetype, libjpeg, libpng (image processing)
- libzip, curl, imap, xslt
- PostgreSQL libs, libgcrypt, oniguruma
- gd (with freetype/jpeg/png support)
- bcmath, ctype, json
- pdo, pdo_mysql, mysqli
- tokenizer, xml
- Dockerize v0.6.1 (wait-for-service utility)
- Composer (dependency installation)
Container startup
The entrypoint runs:Permissions
The Dockerfile setswww-data:www-data ownership on:
bootstrap/storage/public/
Nginx configuration
File:app-nginx.conf
- Max upload size: 100MB
- PHP handling: FastCGI pass to
app:9000 - Gzip: Static gzip enabled
- All routes fall through to
index.php(Laravel routing)
Volumes
Docker Compose mounts:- Source code →
/src vendor/→ named volume (persists between rebuilds)storage/→ named volumebootstrap/→ named volumepublic/→ shared between app and nginx
./data→ MySQL primary data./data_test→ MySQL test data
data/ and data_test/ directories are gitignored. They persist database state between Docker restarts.