5.2 KiB
Frappe Bench Infrastruktur-Design
Datum: 2026-06-05
Host: AZ-CLD-1
Status: abgestimmtes Design, noch nicht umgesetzt
Ziel
Das bestehende Frappe-LMS-Setup soll strukturell in eine produktionsnahe, erweiterbare Frappe-Bench-Architektur überführt werden.
Kernentscheidungen:
- Frappe läuft produktionsnah getrennt nach Prozessen: Backend, Frontend/Nginx, Websocket, Worker und Scheduler.
- Die Frappe-Laufzeit wird als gemeinsame Bench für mehrere Sites verstanden.
- Redis läuft als Host-Infrastruktur und nicht mehr als LMS-spezifischer Container.
- MariaDB läuft als Host-Infrastruktur und orientiert sich strukturell an
hosts/AZ-CLD-1/services/postgres.nix. - Die Docker-Compose-Vorlage dient als Referenz für MariaDB-/Redis-/Bench-Erwartungen, nicht als 1:1 Container-Topologie.
- Es wird kein
nixos-rebuild switchund keingit pushim Rahmen dieser Änderung ausgeführt. Ein Build-Test ist erlaubt.
Zielstruktur
Neue bzw. geänderte Dateien:
hosts/AZ-CLD-1/services/mariadb.nix
hosts/AZ-CLD-1/services/redis.nix
hosts/AZ-CLD-1/services/containers/frappe.nix
Die bestehende Datei:
hosts/AZ-CLD-1/services/containers/frappe-lms.nix
wird inhaltlich in frappe.nix überführt, weil sie künftig die gemeinsame Frappe-Bench repräsentiert und nicht nur die LMS-Site.
MariaDB
MariaDB wird zentral als Host-Service definiert. Das Frappe-Modul darf nicht mehr selbst services.mysql aktivieren.
mariadb.nix übernimmt analog zu postgres.nix:
- Aktivierung des Host-Datenbankdienstes
- zentrale Datenbank-Settings
- Firewall-Freigaben für erlaubte Netze
- Frappe-kompatible Admin-/Init-Logik
- perspektivisch zentrale Backups
Die MariaDB-Settings aus der Compose-Vorlage werden übernommen:
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-character-set-client-handshake = true
skip-innodb-read-only-compressed = true
Frappe-Container erreichen MariaDB über die Podman-Host-IP:
10.89.0.1:3306
Die Firewall erlaubt Zugriff nur aus dem Podman-Netz, insbesondere 10.89.0.0/24.
Redis
Redis wird zentral als Host-Service definiert. Frappe bringt keine eigenen Redis-Container mehr mit.
Frappe nutzt einen gemeinsamen Host-Redis mit getrennten logical DBs:
redis_cache redis://10.89.0.1:6379/1
redis_queue redis://10.89.0.1:6379/2
redis_socketio redis://10.89.0.1:6379/2
Damit bleibt das Setup nah an der Compose-Vorlage, die ebenfalls nur einen Redis-Service definiert, vermeidet aber Kollisionen mit anderen Host-Verbrauchern.
Firewall-Regel:
- Zugriff lokal erlauben
- Zugriff aus
10.89.0.0/24erlauben - keine allgemeine externe Freigabe
Frappe Bench
containers/frappe.nix beschreibt eine gemeinsame Frappe-Bench mit Multisite-Fähigkeit.
Die erste Site bleibt:
sites = {
"learn.az-gruppe.com" = {
apps = [ "lms" ];
adminPasswordEnv = "FRAPPE_ADMIN_PASSWORD";
};
};
Weitere Sites können später ergänzt werden, ohne die Grundstruktur umzubauen:
sites."portal.az-gruppe.com" = {
apps = [ "lms" "custom_app" ];
};
Die globalen Bench-Settings werden einmalig gesetzt:
db_host 10.89.0.1
db_port 3306
redis_cache redis://10.89.0.1:6379/1
redis_queue redis://10.89.0.1:6379/2
redis_socketio redis://10.89.0.1:6379/2
socketio_port 9000
Container-Prozesse
Die produktionsnahe Trennung bleibt erhalten:
frappe-backend
frappe-frontend
frappe-websocket
frappe-queue-short
frappe-queue-long
frappe-scheduler
Die Container teilen sich das gemeinsame Sites-Verzeichnis unter /var/lib/frappe/sites oder einer äquivalenten Bench-Datenstruktur.
Die Frontend-/Nginx-Instanz bleibt über Traefik erreichbar. Für learn.az-gruppe.com bleibt die bestehende Traefik-Domain erhalten.
Initialisierung
Die Initialisierung bleibt idempotent:
- Verzeichnisse werden vorbereitet.
- Fehlende Env-Datei oder fehlende Secrets führen zu einem klaren Fehler.
- Gemeinsame Bench-Konfiguration wird gesetzt.
- Existiert
sites/<domain>/site_config.json, wird die Site-Erzeugung übersprungen. - Existiert die Site nicht, wird sie mit
bench new-siteangelegt. - Apps werden gemäß Site-Konfiguration installiert.
Für die erste Site wird lms installiert.
CLI-Helfer
Der bisherige Helfer wird allgemeiner benannt:
frappe {init|migrate|backup|status}
Nicht mehr:
frappe-lms ...
status prüft künftig:
mysql.serviceredis.service- Frappe-Konfigurations-/Init-Services
- alle Frappe-Podman-Container
Backups
Kurzfristig bleibt der Frappe-Backup-Mechanismus:
bench --site all backup --with-files
MariaDB-Backups werden zentral im MariaDB-Modul ergänzt, soweit die NixOS-Optionen bzw. vorhandenen Backup-Patterns dies sauber unterstützen.
Validierung
Erlaubt:
nix flake check
nixos-rebuild build --flake .#AZ-CLD-1
Nicht erlaubt im Rahmen dieser Änderung:
nixos-rebuild switch
Ebenfalls nicht ausführen:
git push
Zusätzliche statische Prüfungen:
containers/frappe.nixenthält keine Redis-Container mehr.containers/frappe.nixdefiniert nicht mehrservices.mysql.services/default.niximportiertmariadb.nixundredis.nix.containers/default.niximportiertfrappe.nixstattfrappe-lms.nix.