# Component Dependencies — atheos-blog-lxc **Stage**: INCEPTION — Application Design (minimal depth) ## Dependency matrix Rows *depend on* columns. `→` = depends on, `—` = none. | | C1 LXC | C2 nginx | C3 php-fpm | C4 Atheos | C5 workspace | C6 git | C7 blog | |---|---|---|---|---|---|---|---| | **C1 LXC** | — | — | — | — | — | — | — | | **C2 nginx** | ✔ | — | ✔ (I-1) | — | — | — | — | | **C3 php-fpm** | ✔ | — | — | — | ✔ (I-2) | — | — | | **C4 Atheos** | — | — | ✔ | — | ✔ | ✔ (I-3) | — | | **C5 workspace** | — | — | — | — | — | — | ✔ | | **C6 git** | ✔ | — | — | — | — | — | — | | **C7 blog** | — | — | — | — | ✔ | — | — | **Reading it**: nothing works before C1; nginx is useless without php-fpm; Atheos depends on three things simultaneously; the clone is a leaf. ## Build / provisioning order (topological) ``` C1 LXC ├─► C2 nginx ──► (needs) C3 php-fpm ──► C4 Atheos ──► C5 workspace ──► C7 blog (clone) └─► C6 git ──────────────────────────────────────────────┘ ``` - **Critical path**: C1 → C2/C3 → C4 → C5 → C7 - **Parallelisable**: nginx install and git install are independent ## External dependencies (version-pinned at build time) | Dependency | Source | Pin strategy | |---|---|---| | Alpine rootfs | PVE template `alpine-3.23-default_20260116_amd64.tar.xz` | template filename is versioned | | `nginx`, `php83*`, `git` | Alpine `main`/`community` repos | record installed versions in the RUNBOOK at build time | | **Atheos** | `github.com/Atheos/Atheos` (master, no releases) | **pin to a resolved commit SHA** (design Q2); record it | | `armistace/blog` | Gitea, branch `master` | clone `master`; note the commit for the record | ## Coupling risks (where the design is tight) | Coupling | Why it's tight | Mitigation | |---|---|---| | nginx ↔ php-fpm socket path | a string must match exactly; failure is a 502 with no other signal | resolve from the installed pool config, then assert both sides match | | FPM user ↔ workspace ownership | a UID mismatch yields "dubious ownership" or unwritable dirs | set ownership once from the actual FPM user, verify by writing a file | | template filename ↔ Alpine version | a wrong/renamed template fails `pct create` | confirm the exact filename with `pveam available` before creating | | Atheos master ↔ PHP 8.3 | upstream targets older PHP; 8.3 may warn | smoke-test the installer page and check the error log for PHP fatals |