Claude 0bb44485c1 backup: naechtlicher gitea dump mit Ein-Dump-Rotation
Cron (rantanplan, 03:17): gitea dump -> /opt/backup, nur der neueste
Dump bleibt auf dem Host -- 38G-Platte traegt nicht mehr. Aeltere
Staende off-host ziehen (siehe README/Skriptkopf).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 16:21:30 +02:00
2026-07-30 15:56:36 +02:00
2026-07-30 15:56:36 +02:00

thread-net-git — Traefik + Gitea + cAdvisor + Actions-Runner (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)
runner gitea/act_runner:0.6.1 Gitea-Actions-Runner builder-1 (Labels: linux-build, win-wine)

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

Erstregistrierung (einmalig, Identität landet danach in runner-data/.runner):

cp .env.example .env
docker exec -u git thread-net-git-gitea-1 gitea actions generate-runner-token
# Token in .env als RUNNER_TOKEN eintragen, dann:
docker compose up -d runner
# Registrierung prüfen (Admin-UI → Actions → Runners), danach .env leeren.

Job-Labels: linux-build (electronuserland/builder:22) und win-wine (electronuserland/builder:wine, Windows-Cross-Builds). Kapazität 1, Job-Container limitiert auf 2,2 GiB / 1,5 CPUs (runner/config.yaml) — der Host hat nur 2 Kerne / 3,7 GiB ohne Swap.

Job-Container erreichen rohana.axion1337.de über das Docker-Host-Gateway (extra_hosts + --add-host in den Container-Options) — das umgeht die Cloud-Firewall, ohne die Zertifikatsprüfung zu brechen.

Backup & Restore

Warm-Backup (laufender Betrieb, nächtlich per Cron des Users rantanplan):

docker exec -u git -w /tmp thread-net-git-gitea-1 \
  gitea dump -c /data/gitea/conf/app.ini -f /tmp/gitea-dump.zip
docker cp thread-net-git-gitea-1:/tmp/gitea-dump.zip /opt/backup/gitea-dump-$(date +%F).zip
docker exec thread-net-git-gitea-1 rm /tmp/gitea-dump.zip

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>.zip .

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.
S
Description
IaC: Traefik + Gitea + cAdvisor + act_runner Stack (CFGMON)
Readme
61 KiB
Languages
Shell 100%