3 Infrastruktur
SurfaceScratcher edited this page 2026-05-18 07:41:00 +02:00

Infrastruktur

Server

Server Typ Zweck
Produktions-Server VDS (78 GB, 1 vCPU) Alle Dienste inkl. CI/CD
(geplant) Raspberry Pi 5 ARM64 Android-CI-Builds

Hinweis: Der CI-Server hat begrenzte Disk-Kapazität (78 GB). Docker-Images und Forgejo-Packages müssen regelmäßig bereinigt werden.

Dienste (selbst gehostet)

Dienst URL Zweck
Forgejo git.mrrm.de Git + Container Registry + Wiki
Drone CI ci.mrrm.de CI/CD Pipelines
Keycloak auth.mrrm.de Identity Provider
Traefik intern Reverse Proxy + TLS
Portainer intern Docker Management
Grafana + Prometheus intern Monitoring
Loki intern Log-Aggregation
Uptime Kuma intern Uptime-Monitoring

Container Registry

Images in der Forgejo-eigenen Registry:

git.mrrm.de/admin-mrrm/mrrmlabapp/api:latest
git.mrrm.de/admin-mrrm/mrrmlabapp/web:latest
git.mrrm.de/admin-mrrm/mrrmlabapp/ocr:latest
git.mrrm.de/admin-mrrm/mrrmlabapp/android-builder:latest
git.mrrm.de/admin-mrrm/mrrmlabapp/fdroid-server:latest

Nur latest-Tags werden behalten (kein SHA-Tagging) um Speicher zu sparen.

Disk-Space-Management

Wenn der Server voll läuft:

# Docker-Images bereinigen
docker image prune -a

# Alte Package-Versionen in Forgejo löschen (via API)
# → Siehe CI/CD-Wiki für Cleanup-Skript

# Gitea tmp bereinigen
sudo rm -rf /var/lib/docker/volumes/gitea_gitea-data/_data/gitea/tmp/*

# Ungenutzte Volumes
docker volume prune

Swap

Auf dem CI-Server ist eine /swapfile-ci (4 GB) für speicherintensive Builds eingerichtet.

F-Droid Server

Setup-Dokumentation: infra/fdroid/SETUP.md

Pfade auf dem Server:

/opt/server-stack/hosts/prod-alt/mrrmlabapp/fdroid/
  config.yml          # fdroidserver-Konfiguration (enthält Keystore-Passwort!)
  keystore.p12        # F-Droid Repo-Signing-Key (NICHT der App-Signing-Key)
  repo/               # Signierte APKs + generierter Index
  metadata/           # App-Metadaten + Changelogs
  update.sh           # Script: fdroid update + Cleanup
  nginx.conf          # Nginx-Konfiguration

Backup & Restore

  • restic → QNAP (sftp:qnap-backup:/share/Backup - Server/restic-repo), täglicher Timer (03:30), geteiltes Repo mit Host-Tagging
  • QNAP-NAS ist tagsüber ausgeschaltet, startet nur fürs nächtliche Backup-Fenster — resticq-Operationen tagsüber schlagen mit No route to host fehl
  • mrrmlabapp-DB-Backup + Restore-Test: siehe Restore-Mrrmlabapp-DB
  • Paperless-Backup + Restore-Test: siehe Restore-Paperless