Komposthaufen file browser
Copyparty replaces arschrock's host Apache directory listing at
https://brunner.ninja/komposthaufen/. The maintained community chart from
https://github.com/erNail/copyparty-chart owns the Deployment, configuration,
Service, ServiceAccount and index PVC. No separate homelab chart repository or
image build is needed. bootstrap/copyparty.yaml pins the published chart.
The temporary primary-image tag override in values.yaml follows the root
policy for a latest chart that trails its application. Remove it when the chart
catches up; keep its official image repository unchanged.
Anonymous users receive only r (read/list/download) permission. No account
has upload, move, delete or admin permission. The supported HTML-head hook
hides upload controls and the upload-shaped local-file hash search panel;
normal filename/path search remains available. This CSS is presentation only;
permissions and the filesystem mount enforce read-only access. The non-root container also mounts
/komposthaufen recursively read-only. Symlinks cannot escape the exported
volume. HTML is served as text and embedded directory prologues are disabled.
The Traefik-owned route keeps its name but moves from default to copyparty
to avoid enabling cross-namespace routing globally. It preserves the URL prefix; Copyparty's rp-loc handles it.
Direct downloads, HEAD and HTTP byte ranges retain their normal URL shape.
The writable RBD PVC contains rebuildable SQLite search indexes, thumbnails and
session state. Indexing scans on startup and hourly; file contents are not hashed
and media tag extraction is not enabled. Search covers path/name, size and date.
The authoritative files stay on the existing bcachefs bind mount; nothing is
copied, renamed, chowned or deleted. The current backup owner in apps/backup
does not cover this host library. The library has an existing backup coverage
gap. The disposable index needs no historical backup: recreate it and let
Copyparty rescan. Preserve the host data independently; Ceph replication and
its existing backup mirrors are not historical backups of this library.
Host storage maintenance
../../scripts/media-storage-{offline,online}.sh are the shared Plex, Jellyfin,
Copyparty and Paper maintenance helpers. The existing scripts at
~/kubernetes/media-storage-{offline,online}.sh on arschrock forward to these
versioned helpers. ~/unmount.sh --stop uses bcachefs-maintenance.py to cordon,
stop filesystem holders, invoke the offline helper and verify mount namespaces
before unmounting. ~/mount_binds.sh restores and checks the bind mounts, calls
the online helper to recreate consumers and restore the storage-ready labels,
and restores scheduling. Copyparty uses the same component selector as Plex
and Jellyfin. Never tolerate the unschedulable taint or bypass the ready label.
After changing GitOps, update arschrock's checkout before storage maintenance:
git -C ~/kubernetes/homelab-gitops pull --ff-only.
The chart has readiness/liveness hooks but no startup-probe template; liveness has a startup grace period and does not wait for the background index scan. Configuration changes require a Deployment restart because this chart does not hash its ConfigMap into the pod template.
Recovery and legacy Apache
Reconcile the Argo Application and its retained PVC to recover the service.
For an index-only failure, stop Copyparty before rebuilding its disposable
index; never remove anything under /komposthaufen to repair search.
Apache's host unit is httpd.service; it is disabled/stopped after cutover.
Its configuration remains intact, but currently has a missing hiredis library
required by mod_auth_openidc. An Apache rollback would first require repairing
that dependency, then enabling the service and reverting only the komposthaufen
route to legacy-apache-service. The youtube.brunner.ninja route is intentionally
retained for a separate migration and remains unavailable while Apache is off.
No old dedicated source repository exists for this host Apache service; remote
repository archival is not applicable.