Files
oikos/knowledge/wiki/containers/104-gitea.md
dtoro 4efddb8bed docs: fix pre-existing broken links surfaced by docs-lint
Problem: docs-lint (added in the wiki-hq reorg) surfaced 126 broken relative
links that predated this session — a container rename, incident/plan docs
that moved into archive/done subfolders without their inbound links being
updated, and a handful of relative-depth bugs in files nested under
containers/archive/ and plans/done/.

Fixes applied, by category:
- 124-authentik.md -> 106-auth-outpost.md (container was renamed; ~40 refs).
- investigations/{2026-04-21-hubris-crash-loop,2026-05-31-authentik-vps-migration}.md
  -> archive/ prefix (both moved to investigations/archive/ previously).
- plans/{2026-06-01-slate-ax-to-sodola-migration,2026-06-04_130000-deprecate-claudio-bot,
  2026-06-25-yuvomi-deployment}.md -> plans/done/ prefix.
- Depth bugs in files nested one level deeper than their siblings assumed
  (investigations/archive/*, knowledge/wiki/containers/archive/*,
  plans/done/*) — corrected relative-path depth.
- Destroyed containers with no surviving page (126-plato) delinked to the
  containers/index.md archaeology row instead of a 404.
- ludo-mini.yaml -> strong.yaml (host was renamed, same physical machine).
- netbird-vps.md (no narrative page exists) -> netbird-vps.yaml (substrate
  record, matching the existing convention for hosts without a wiki page).
- runbook-dpkg-interrupted.md refs -> .agents/skills/runbook-dpkg-interrupted/SKILL.md
  (missed in the phase-4 runbook move because the referencing files used a
  bare filename, not a runbooks/ prefix).
- One dangling forward-reference to a never-written investigation delinked
  to the actual incident record it was describing.

Left alone: two links in knowledge/wiki/containers/101-jellyfin.md into
devops/homelab-authentik-admin/ — an intentional reference to a sibling repo,
not present in this checkout.

Verification: broken-link count 126 -> 2 (real remainder is the cross-repo
reference above); gen-topology.py --check still exit 0; build_host_files.py
still idempotent; all inventory.yaml doc_page targets still resolve.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 17:53:35 +02:00

4.1 KiB

104 — gitea

Self-hosted git server. Source of truth for all dtoro/* repositories that auto-deploy across the lab.

At a glance

  • Hostname: gitea
  • IP: 192.168.8.121
  • Privilege: privileged
  • Resources: 1 core / 1 GiB RAM / 8 GiB rootfs
  • Mounts: /mnt/library/mnt/library (under /mnt/library/repos, owner UID 102 / GID 105 — don't touch from other containers)
  • Public hostname: git.hubris.networkcaddy:3000
  • Version: 1.25.4 (last verified)

Service / port map

Service Listen Notes
gitea :3000 HTTP web + git over HTTP
gitea SSH :22 git over SSH
gitea-deploy-webhook 127.0.0.1:9797 Receives push events for the customizations repo

Customizations

/var/lib/gitea/custom is a checkout of dtoro/gitea-customizations.

  • templates/custom/footer.tmpl injects:
    • Online3DViewer v0.18.0 (vendored under public/assets/o3dv/) for inline 3D preview of CAD raw-file links: 3dm, 3ds, 3mf, amf, bim, brep, dae, fbx, fcstd, glb, gltf, ifc, igs, iges, stp, step, stl, obj, off, ply, wrl.
    • PlantUML client JS (vanilla, vendored from gitea.com/davidsvantesson/plantuml-code-highlight). Browser calls https://git.hubris.network/_plantuml/img/<encoded> — caddy handle_path /_plantuml/* rewrites and proxies to the PlantUML server on apps (105) :8079.
  • home.tmpl is the anonymous landing page (Homesauce hero + sign-in/explore buttons).
  • O3DV binary assets are not tracked — deploy.sh fetches them on first run.

Auto-deploy

Push to dtoro/gitea-customizations master → gitea webhook → http://127.0.0.1:9797/deploy (loopback) → gitea-deploy-webhook.service validates HMAC against /etc/gitea-deploy/secret → runs /opt/gitea-customizations/deploy.sh. Then systemctl restart gitea if templates changed.

app.ini [webhook] ALLOWED_HOST_LIST includes 127.0.0.1, 192.168.8.175, 192.168.8.205, 192.168.8.230, 192.168.8.136, 192.168.8.77 — every webhook target across the lab. Don't strip these when editing app.ini. See auto-deploy for the full list.

Git creds for the deploy service: /etc/gitea-deploy/git-credentials (mode 600), referenced via credential.helper = store --file=/etc/gitea-deploy/git-credentials in the repo's .git/config (because ProtectHome=true blocks /root).

DNS workaround

LXC has /etc/hosts override mapping auth.hubris.network → 192.168.8.175 (router DNS resolves the public IONOS A record, which is a dead end for LAN clients — see DNS). Belt-and-suspenders systemd unit hubris-hosts-override.service re-applies it idempotently. Override line is outside the # --- BEGIN PVE --- markers (Proxmox rewrites inside).

Changelog

2026-06-24 — terminalito deploy webhook (id 12)

Push webhook on dtoro/terminalitohttp://192.168.8.211:9797/deploy (trmnl (128)); app.ini ALLOWED_HOST_LIST extended with 192.168.8.211. See auto-deploy.

2026-04-28 — wiki entry created

Initial documentation.

2026-04-22 — app.ini ALLOWED_HOST_LIST extended for Artifacto webhook

Added 192.168.8.205. See Artifacto auto-deploy on apps (105).

2026-04-21 — /etc/hosts override for auth.hubris.network added

For OIDC integration with authentik (124). Outside the PVE markers, with a hubris-hosts-override.service for idempotency.

2026-04-20 — gitea customizations + auto-deploy pipeline shipped

dtoro/gitea-customizations repo created; webhook receiver at loopback :9797 validates HMAC and runs deploy.sh. CAD and PlantUML loaders live in footer.tmpl.