feat(web-arm): deploy Immich with Authelia OIDC, group-gated access #181
No reviewers
Labels
No labels
bug
enhancement
in-progress
needs-info
needs-triage
p0
ready-for-agent
ready-for-human
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Cloonar/nixos!181
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "afk/178"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Deploys Immich on web-arm via the native
services.immichmodule (immich 2.7.5, nixpkgs 26.05), fronted at https://immich.cloonar.com with OAuth-only login through Authelia, restricted to members of theimmichLDAP group. This is the thin end-to-end slice: a working, access-gated, empty Immich.What's included
hosts/web-arm/modules/immich/— native module on127.0.0.1:2283(nginx fronts it, firewall closed), its own redis instance, machine-learning on.library/) on the Hetzner Storage-Box CIFS share;thumbs//upload//profile/stay on the local SSD under/var/lib/immich.immich-server/immich-machine-learningatCPUWeight=20; the websites keep the default 100, so under contention they get ~5x the CPU share.immichOIDC client + deny-by-default authorization policy gating ongroup:immich./var/lib/immichexcluded from borg (CIFS originals snapshotted Hetzner-side, thumbs regenerable, DB already in the postgresql dump).Deviation from the issue
The issue asked to pin a fixed
users.users.immich.uid/gidfor the CIFS mount. Instead the mount usesuid=immich,gid=immich, whichmount.cifsresolves by name at mount time — same effect, no invented magic uid to risk colliding with web-arm's auto-allocated ids. (Discussed and approved.)First-deploy / post-deploy notes
postgresql_14instance and flipsshared_preload_librariesfor pgvector/vectorchord → Postgres restarts, briefly interrupting PowerSync/Grafana./var/lib/immich/library(CIFS) with its thumbnail under local/var/lib/immich/thumbs;journalctl -u immich-servershows no config-schema errors. The immich units run withPrivateMounts=true, so confirm the CIFS submount is visible/writable inside the service.Verification
nix-instantiatedry-build (pre-commit hook) passes for all hosts, including web-arm.Closes #178
Validation summary —
/land-pr#181Verdict: PASS (merge pending human free-text go-ahead).
main←afk/178, author dominikfeat(web-arm):)secrets.yamledits3e49ee6)system.stateVersion./modules/immich)$pbkdf2-sha512$digest — same pattern as the 6 existing OIDC clients; plaintext lives in sopsafk/178, body carriesCloses #178Diff review vs issue #178 intent — faithfully implements all seven sections: native immich service (loopback, firewall closed, own redis, DB reuse + pgvector), CIFS storage split for originals, sops-template config with the OIDC secret kept out of the store,
CPUWeight=20throttling, Authelia deny-by-defaultgroup:immichpolicy + OIDC client, nginx vhost, and the borg exclude. Also pulls inpkgs.cifs-utilsfor the mount. One documented, approved deviation: the CIFS mount usesuid=immich,gid=immich(name-resolved bymount.cifs) instead of a pinned uid/gid.Caveats (out of scope at merge time, by design):
immich.jsonruntime config schema. The keys are asserted validated against immich 2.7.5; a bad key fails startup loudly. This is the issue's post-deployjournalctl -u immich-serveracceptance check.src/*Hashchanged (native module + nixpkgs), so the eval gate's vendorHash blind spot doesn't apply here.shared_preload_libraries→ Postgres restarts, briefly blipping PowerSync/Grafana (expected; called out in the PR).PrivateMounts=trueis a post-deploy verification step.