ADR-001: Storage via Host Bind Mounts
Status: Accepted — still in force (2026-10-04): docker-compose.yml bind-mounts ./data/storage:/storage into api and worker.
Date: 2024-12
Context
Book files (EPUB, PDF, FB2) must persist beyond container lifecycle. Options:
- Docker volumes
- Host bind mounts
- Object storage (S3/MinIO)
- Database BLOBs
Decision
Use host filesystem bind mounts at /srv/books/storage.
Layout:
/srv/books/storage/books/{editionId}/original/{filename}.epub/srv/books/storage/books/{editionId}/derived/cover.jpgDB stores paths only, not binary content.
Consequences
Pros
- Files visible via SSH for debugging
- Simple backups (tar, rsync)
- Survives Docker restart/crash/container deletion
- No vendor lock-in
Cons
- Not cloud-native
- Requires manual host setup
- No built-in replication
Notes
- Containers mount:
/srv/books/storage:/storage - First-time setup:
sudo mkdir -p /srv/books/storage && sudo chown -R $USER /srv/books - S3/MinIO migration planned for production scale