docs(infra): add storage topology
This commit is contained in:
@@ -0,0 +1,49 @@
|
|||||||
|
# Storage
|
||||||
|
|
||||||
|
**Last updated:** 2026-08-11
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Shared storage is provided by a QNAP NAS over NFS. All Docker Swarm nodes
|
||||||
|
mount the same NFS export, giving stacks a consistent data path regardless of
|
||||||
|
which node a container lands on.
|
||||||
|
|
||||||
|
## NAS
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
|-------|-------|
|
||||||
|
| Hardware | QNAP NAS |
|
||||||
|
| IP | 192.168.50.212 |
|
||||||
|
| NFS export | `/DockerSwarmData` |
|
||||||
|
|
||||||
|
## Mount Points (Swarm nodes)
|
||||||
|
|
||||||
|
| Mount point | Purpose |
|
||||||
|
|-------------|---------|
|
||||||
|
| `/mnt/DockerSwarmData/` | Root of all shared Swarm data |
|
||||||
|
| `/mnt/DockerSwarmData/Projects/` | Dev project source trees |
|
||||||
|
|
||||||
|
Docker Swarm stack data (volumes, configs, persistent state) lives under
|
||||||
|
`/mnt/DockerSwarmData/`.
|
||||||
|
|
||||||
|
## Sharp Edges
|
||||||
|
|
||||||
|
### NFS bind mounts can hide container-built assets
|
||||||
|
|
||||||
|
When a service generates files inside the container at startup (e.g. an app
|
||||||
|
that seeds a config dir), an NFS bind mount will shadow the container's
|
||||||
|
image-layer content with whatever is on the NAS — which may be empty on first
|
||||||
|
deploy.
|
||||||
|
|
||||||
|
**Mitigation:** Prefer Docker named volumes when the image owns initial
|
||||||
|
content. Use bind mounts only for data that already exists on the NAS or is
|
||||||
|
explicitly managed outside the container.
|
||||||
|
|
||||||
|
### SQLite on NFS is a footgun
|
||||||
|
|
||||||
|
NFS does not reliably implement POSIX file locking. SQLite depends on file
|
||||||
|
locks for write serialisation. Running SQLite (or any lock-dependent embedded
|
||||||
|
DB) on an NFS mount under concurrent writes **will cause corruption**.
|
||||||
|
|
||||||
|
**Mitigation:** Run SQLite databases on local node storage, or replace with a
|
||||||
|
network-capable database (Postgres, MySQL) on `memory-archives`.
|
||||||
Reference in New Issue
Block a user