Files
thread-net-git/README.md
T
Thore CimbalandClaude Fable 5 d904734d2d stack: Actions-Runner zurueckgebaut (CFGMON-11) - CI laeuft im Lab-GitLab
builder-1 hat keine Konsumenten mehr (Workflows nach GitLab portiert bzw.
entfernt, Actions-Toggles deaktiviert). Deploy dieses Stands + Runner-
Deregistrierung in der Gitea-UI + Loeschen von runner-data/ sind manuelle
Host-Schritte, dokumentiert in Backlogs CFGMON-11.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 18:00:43 +02:00

4.0 KiB

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

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):

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-<datum>.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 (Backlogs CFGMON-11): 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 CFGMON-09 im Repo sorb/Backlogs. 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-<datum>.tar.gz .

Bezüge

  • Monitoring-Stack (Grafana/Prometheus/Loki): Repo sorb/threadnet-operating, Checkout /opt/threadnet-operating. Prometheus scrapt cadvisor:8080 und traefik:8080 aus diesem Stack über das gemeinsame externe traefik-Netz.
  • Backlog: Repo sorb/Backlogs (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.