# thread-net-git — Traefik + Gitea + cAdvisor (CFGMON) Infrastruktur-Repo für den Kern-Stack auf dem Operating-Host (CFGMON, `rohana.axion1337.de`). Abgelöst aus dem unversionierten Portainer-Stack (Stack-ID 8) am 2026-07-30 — siehe Backlog CFGMON-02. | Dienst | Image | Zweck | |---|---|---| | reverse-proxy | traefik:v3.7.9 | TLS-Terminierung für ALLE Dienste des Hosts (auch Grafana aus dem monitoring-Stack) | | gitea | gitea/gitea:1.27.0 | Git-Hosting, `rohana.axion1337.de` | | cadvisor | cadvisor:v0.49.1 | Container-Metriken für Prometheus (monitoring-Stack) | ## Unumstößliche Regeln 1. **Projektname `thread-net-git` nie ändern** (`name:` in der Compose). Das Gitea-Datenvolumen heißt `thread-net-git_gitea-data` und ist als `external` deklariert — bei falschem Namen bricht der Deploy laut ab. 2. **Volumes `thread-net-git_gitea-data` und `thread-net-git_letsencrypt` niemals löschen.** Ersteres sind die Produktivdaten (Repos, SQLite-DB, LFS, SSH-Hostkeys), letzteres enthält `acme.json` — eine Zertifikats- Neuausstellung scheitert an der Firewall (80/443 nur für User-IP offen). 3. **Gitea nie auf eine ältere Version pinnen** — SQLite-Schema kennt kein Downgrade. Upgrades: Minor-Schritte, vorher Backup (s.u.). 4. **Diesen Stack nie wieder über Portainer anfassen.** Portainer identifiziert Ressourcen über den Compose-Projektnamen; ein „Stack löschen" dort würde die laufenden Container entfernen. ## Deploy ```bash cd /opt/thread-net-git docker network create traefik # falls noch nicht vorhanden docker compose up -d ``` Erst-Deploy auf frischem Host (letsencrypt-Volume noch leer): ```bash docker compose up --no-start # legt Volumes/Container an # acme.json aus Backup einspielen (Rechte 600, root:root): docker run --rm -v thread-net-git_letsencrypt:/dst -v /opt/backup:/src alpine \ sh -c 'cp /src/acme-.json /dst/acme.json && chmod 600 /dst/acme.json' docker compose up -d ``` ## Runner (entfernt 2026-08-01) Der Gitea-Actions-Runner `builder-1` wurde im Zuge des CI-Umzugs ins Homelab-GitLab zurückgebaut (CFGMON-11, erledigt 2026-08-01): alle Workflows laufen jetzt in der Lab-CI, die Gitea-Actions-Toggles der Repos sind deaktiviert. Beim nächsten Deploy dieses Stacks verschwindet der Runner-Container; zusätzlich einmalig auf dem Host: `builder-1` in der Gitea-Admin-UI deregistrieren und `runner-data/` löschen. ## Backup & Restore Warm-Backup: nächtlich um 03:17 per Cron des Users `rantanplan` (`backup/gitea-backup.sh`, Log: `/opt/backup/backup.log`). **Derzeit pausiert** (Cron auskommentiert, seit 2026-07-30): die Backups sollen off-host in ein Borg-Repo auf einer Storage Box, bis dahin bleibt der letzte Dump vom 2026-07-30 liegen — siehe [management#10](https://git.lab/axion1337.chat/management/-/issues/10) (CFGMON-09). Das Skript stoppt kurz den Runner (SQLite-Journal-Race bei `gitea dump`), streamt den Dump ohne Zwischenkopie (`gitea dump --type tar -f - | gzip`) und behält **nur den neuesten Stand** auf dem Host — die 38-G-Platte trägt nicht mehr. Manuell: einfach das Skript ausführen. Restore auf frischem Host: Volume `thread-net-git_gitea-data` anlegen, Dump-Zip entpacken (`gitea-repo.zip` → `/data/git/repositories`, `gitea-db.sql` importieren bzw. `gitea.db` aus `data/` übernehmen, `app.ini` nach `/data/gitea/conf/`), dann Stack deployen. Details: https://docs.gitea.com/administration/backup-and-restore **Off-Host-Kopie nicht vergessen** — ein Backup auf demselben Host schützt nicht vor Plattenverlust: `scp -P 2248 rantanplan@188.245.193.243:/opt/backup/gitea-dump-.tar.gz .` ## Bezüge - Monitoring-Stack (Grafana/Prometheus/Loki): Repo `axion1337.chat/threadnet-operating`, Checkout `/opt/threadnet-operating`. Prometheus scrapt `cadvisor:8080` und `traefik:8080` aus diesem Stack über das gemeinsame externe `traefik`-Netz. - Offene Punkte: **Issues** im [management-Projekt](https://git.lab/axion1337.chat/management/-/issues) auf git.lab (ADR-0005); Bestand und Historie zum Host in [`hosts/cfgmon.md`](https://git.lab/axion1337.chat/management/-/blob/main/hosts/cfgmon.md). - Gitea-Konfiguration (`app.ini` mit Secrets) liegt bewusst NICHT im Repo, sondern nur im Datenvolumen; Änderungen via `GITEA__section__KEY`-Env-Vars in der Compose.