`[[page|Label]]` is Obsidian syntax, not OKF. `kb-lint` resolves it Obsidian-style — by filename, anywhere in the bundle — so it has never tripped the link gate, while every other consumer of the bundle (an OKF renderer, a Gitea wiki export, `grep` for reachability) sees bracketed text where a link should be. That is how two generated pages ended up with no inbound link at all and nobody noticed: the my-first link census of the bundle reported them as orphans because their only inbound edges were wikilinks. Mechanical conversion, 52 links across 17 pages, each resolved against the same page set `kb-lint` uses: an explicit `|Label` is kept verbatim, an unlabelled link takes the target's frontmatter `title`. Targets are emitted bundle-absolute (`/tools/niri/tips.md`), the form the spec recommends and the form 99 existing links in this bundle already use. Two links were `[[index]]`, which resolves by filename to 21 pages — the ambiguity that filename-resolution invites. Both meant their own directory's index, so both are now written out in full: `/tools/gitea/index.md`, `/tools/niri/index.md`. The linter still tolerates wikilinks; whether it should reject them outright is an open question on #64, because that would replace the two tests pinning today's tolerance. Refs #64
3.5 KiB
Gitea on dankclaw
Private Git hosting on dankclaw. Two quadlet-managed containers in the rootless podman session of user dank: Gitea and PostgreSQL, sharing a dedicated network unit. The former gitea-caddy container is retired — the canonical fleet Caddy (caddy.service, see /caddy/index.md) fronts gitea.franksdank.cloud; do not recreate the retired unit.
Host: dankclaw (192.168.0.143 LAN)
Config: ~/.config/containers/systemd/gitea-{postgres,server}.container + gitea.network
Local access: http://dankclaw:3000 — Gitea 1.27.3 (/api/v1/version, probed 2026-10-19)
Domain: https://gitea.franksdank.cloud (live; served by fleet Caddy, DNS-01 TLS)
Architecture
| Container | Unit | Port | Purpose |
|---|---|---|---|
gitea-server |
gitea-server.service |
3000 (HTTP), 2222 (SSH) | Git web UI, API, SSH daemon |
gitea-postgres |
gitea-postgres.service |
5432 (internal) | Database |
| (network) | gitea-network.service |
— | quadlet gitea.network bring-up |
The containers share the private network systemd-gitea (quadlet gitea.network, DNS enabled). The automatic podman default network has DNS disabled; do not run the stack on it.
Management
All commands run as dank on dankclaw.
| Action | Command |
|---|---|
| Start all | systemctl --user start gitea-postgres gitea-server |
| Stop all | systemctl --user stop gitea-server gitea-postgres |
| Restart Gitea only | systemctl --user restart gitea-server |
| Follow logs | podman logs -f gitea-server or journalctl --user -u gitea-server -f |
| Check status | systemctl --user status gitea-postgres gitea-server |
Data Persistence
All data lives on host bind mounts under /home/dank/Containers/gitea/ (fleet storage standard since 2026-09-01; verified live 2026-10-18). Containers are ephemeral. Stopping a quadlet unit removes its container; the next start recreates it. Volumes survive. The old /opt/gitea/ tree remains on disk as a leftover — do not use it.
| Path | Contents |
|---|---|
/home/dank/Containers/gitea/data/ |
Git repositories, app.ini, attachments |
/home/dank/Containers/gitea/postgres/ |
PostgreSQL data files |
/home/dank/Containers/gitea/env |
EnvironmentFile (mode 0600; GITEA_DB_PASSWORD) |
See data-persistence for backup and restore.
Boot Persistence
User-level linger is enabled for dank. The units start at host boot without a login. Each unit carries [Install] WantedBy=default.target; the podman generator applies it. The legacy podman-compose stack had no units and did not survive reboots (incident 2026-08-16).
See management for boot persistence details and troubleshooting.
Repo Copies
The quadlet files and .env templates are tracked in the serverAppConfigs deploy repo; the sibling vault page Infrastructure/Gitea.md (in ~/Projects/serverAppConfig/serverAppConfigs-docs/) is the deploy-side source of truth. Secrets live only on the host under Containers/gitea/ (mode 0600), never in either docs tree.
See Also
- Gitea Architecture — container architecture, network topology, ports.
- Gitea Data Persistence — data layout, ownership mapping, backup strategy.
- Gitea Management — operations, upgrades, backups, incident log.
- Gitea Client Access — token-based HTTP access from clients, credential store, git 2.56 store-format trap.