feat: add resilient updates and access controls
Container-Image veröffentlichen / container (push) Has been cancelled
Container-Image veröffentlichen / container (push) Has been cancelled
This commit is contained in:
1 parent
a000152423
commit
f02ec9977c
41 files changed
+3277
-151
No files matched your search
@@ -23,36 +23,76 @@ Beim ersten Start werden Datenbank und Verschlüsselungsschlüssel automatisch i
|
||||
## Das Compose
|
||||
|
||||
```yaml
|
||||
x-domain-control-image: &domain-control-image
|
||||
image: git.j-mahler.de/admin/domain-control-webinterface-prod:v1.3.0
|
||||
|
||||
services:
|
||||
dyndns:
|
||||
image: git.j-mahler.de/admin/domain-control-webinterface-prod:v1.2.2
|
||||
<<: *domain-control-image
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9090:8080"
|
||||
volumes:
|
||||
- dyndns-data:/data
|
||||
- dyndns-secrets:/secrets
|
||||
- dyndns-update-control:/run/domain-control-update
|
||||
labels:
|
||||
de.j-mahler.domain-control.role: app
|
||||
read_only: true
|
||||
tmpfs:
|
||||
- /tmp:rw,noexec,nosuid,nodev,size=16m,mode=1777
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
update-agent:
|
||||
<<: *domain-control-image
|
||||
restart: unless-stopped
|
||||
user: "0:10001"
|
||||
entrypoint: [/usr/local/bin/update-agent]
|
||||
healthcheck:
|
||||
disable: true
|
||||
network_mode: none
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- dyndns-update-control:/run/domain-control-update
|
||||
read_only: true
|
||||
tmpfs:
|
||||
- /tmp:rw,noexec,nosuid,nodev,size=4m,mode=1777
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
cap_drop:
|
||||
- ALL
|
||||
pids_limit: 32
|
||||
mem_limit: 64m
|
||||
|
||||
volumes:
|
||||
dyndns-data:
|
||||
dyndns-secrets:
|
||||
dyndns-update-control:
|
||||
```
|
||||
|
||||
Soll ein anderer Port verwendet werden, muss nur die linke Zahl geändert werden.
|
||||
|
||||
## Aktualisieren
|
||||
|
||||
In `compose.yml` die Versionsnummer beim Image ändern, anschließend das Image ziehen und den Stack neu bereitstellen. Auf der Kommandozeile:
|
||||
Eine vollständige Schritt-für-Schritt-Anleitung für WebUI, Docker Compose,
|
||||
Portainer/Dockge und Rollbacks steht in [`UPDATE.md`](UPDATE.md).
|
||||
|
||||
Administratoren können im Menü **Update** nach stabilen Releases suchen und eine neue Version direkt installieren. Der Gitea-Benutzername und Token werden einmalig in der Weboberfläche hinterlegt; der Token wird mit dem Master-Key verschlüsselt gespeichert und weder an Templates noch an den Browser zurückgegeben.
|
||||
|
||||
Nur der separate, netzwerklose `update-agent` erhält Zugriff auf den Docker-Socket. Er kann ausschließlich das fest konfigurierte Anwendungs-Image ersetzen: Das neue Image wird vollständig geladen, bevor der laufende Container beendet wird, und erst nach erfolgreichem Healthcheck übernommen. Bei einem Fehler wird die vorherige Instanz automatisch wiederhergestellt. Ist Gitea oder die Registry nicht erreichbar, läuft der DNS-Updater unabhängig weiter und die zuletzt bekannte Update-Benachrichtigung bleibt erhalten.
|
||||
|
||||
Alternativ lässt sich die Version weiterhin vollständig über Docker Compose aktualisieren. Dafür nur die eine gepinnte Image-Zeile unter `x-domain-control-image` ändern; Web-App und Update-Agent verwenden dadurch garantiert dieselbe Version. Anschließend:
|
||||
|
||||
```bash
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Compose ersetzt geänderte Container und bindet die vorhandenen benannten Volumes wieder ein. `docker compose down -v` darf nicht verwendet werden, weil `-v` die Daten- und Secret-Volumes löschen würde. Der Ein-Klick-Updater verändert weder `compose.yml` noch Volumes; wer später wieder per Compose aktualisiert, setzt dort einfach die gewünschte konkrete Version und führt die beiden Befehle aus.
|
||||
|
||||
Benutzer, Domains und Einstellungen bleiben in `dyndns-data`. Der Schlüssel für gespeicherte API-Tokens liegt in `dyndns-secrets`. Für ein vollständiges Backup müssen beide Volumes gesichert werden.
|
||||
|
||||
## Funktionen
|
||||
@@ -63,6 +103,8 @@ Benutzer, Domains und Einstellungen bleiben in `dyndns-data`. Der Schlüssel fü
|
||||
- lokales Archiv statt Löschen von Hetzner-Records
|
||||
- frei einstellbares Update-Intervall mit Countdown
|
||||
- Admin- und Mitgliedskonten mit Domain- oder Subdomain-Rechten
|
||||
- ausschließlich Administratoren verwalten Konten und Freigaben; Admin-Vollzugriff besitzt keine bearbeitbaren Einzelrechte
|
||||
- automatische Release-Prüfung, Update-Benachrichtigung und kontrolliertes Ein-Klick-Update mit Rollback
|
||||
- eine Pi-hole-v6-Verbindung mit verschlüsseltem Anwendungspasswort und geschützter Anzeige nach erneuter Admin-Passwortprüfung
|
||||
- lokale Pi-hole-DNS-Einträge für IPv4 und IPv6 anlegen, aktivieren/deaktivieren, bearbeiten, aus der WebUI trennen, wiederherstellen und vollständig löschen
|
||||
|
||||
|
||||
Reference in new issue
Block a user