deploy/compose.standalone-mit-helfer.yml
Rama main · réplica de lectura del repositorio original.
# Nodvard Deck MIT Update-Helfer: Updates per Knopf unter Einstellungen -> System -> Updates.
# Erst ab Nodvard Deck 0.7.0. Vorher gibt es den Helfer noch nicht: Bleib dann bei compose.standalone.yml.
# Wie compose.standalone.yml, dazu der kleine Dienst "updater". Der Helfer läuft nur, wenn du diese Datei nimmst.
# 1. Diese Datei als compose.yml in den Ordner laden. Eine compose.yml aus compose.standalone.yml darfst du damit
# ersetzen (gleicher Projektname, gleiche Daten). Die alte vorher sichern: cp compose.yml compose.yml.alt
# curl -fsSL -o compose.yml https://github.com/nodvard/deck/releases/latest/download/compose.standalone-mit-helfer.yml
# Die Datei am neuesten Release nennt den dort geprüften Helfer per Digest. Meldet curl 404, hat das Release sie
# noch nicht; dann die Datei aus dem Repository nehmen (Helfer mit Tag 1):
# curl -fsSL -o compose.yml https://raw.githubusercontent.com/nodvard/deck/main/deploy/compose.standalone-mit-helfer.yml
# Hattest du in der alten Datei etwas geändert (Port, Sicherungsordner, DNS), trag es in die neue ein. Vor allem
# einen Ordner statt des Datenspeichers (z. B. ./daten:/app/data): Fehlt er, startet Nodvard Deck mit leeren Daten.
# 2. In diesem Ordner: docker compose up -d
# 3. Browser öffnen: http://<Adresse-des-Rechners>:8080 (Einrichtungscode: docker compose logs nodvard-deck)
# Portainer/Synology: die ganze Datei als EINEN Stack bzw. EIN Projekt anlegen, der Helfer muss im selben Projekt stehen.
#
# ACHTUNG: Der Helfer bekommt Zugriff auf Docker, das ist so viel wie root auf diesem Rechner. Er hat kein Netz,
# hört auf keinem Port und tauscht nur Nodvard Deck gegen eine neuere offizielle Version (ghcr.io/nodvard/deck).
# Helfer aktualisieren (nicht während eines Updates), je nachdem, was beim Dienst updater steht:
# mit Digest (@sha256:...): die Zeile "image:" aus der Datei am neuesten Release übernehmen, dann
# docker compose up -d updater
# mit Tag 1: docker compose pull updater && docker compose up -d updater
# Helfer wieder entfernen: zurück zu compose.standalone.yml, dann docker compose up -d --remove-orphans
# Anderer Port: Umgebungsvariable NODVARD_DECK_PORT setzen (z. B. in einer Datei .env neben dieser Datei).
# Fester Projektname wie in compose.standalone.yml: Der Ordnername bestimmt sonst den Namen des Datenspeichers.
name: nodvard-deck
services:
# Genau wie in compose.standalone.yml, nur mit einer Zeile mehr unter volumes (Kanal zum Helfer).
nodvard-deck:
# Lieber nicht automatisch auf die nächste Reihe? Statt "latest" ghcr.io/nodvard/deck:X.Y eintragen (die ersten
# beiden Zahlen deiner Version): Dann kommen nur noch Fehler- und Sicherheitskorrekturen dieser Reihe. Eine genaue
# Version (X.Y.Z) bleibt, bis du sie hier änderst; dann gibt es kein Update per Knopf.
image: ghcr.io/nodvard/deck:latest
restart: unless-stopped
ports:
# Der alte Name LATTICE_PORT gilt nur noch übergangsweise (spätestens bis 1.0).
- "${NODVARD_DECK_PORT:-${LATTICE_PORT:-8080}}:8080"
volumes:
# Alle Daten (Datenbank, Schlüssel, Dokumente). Ein benannter Datenspeicher braucht keine
# Rechte-Einstellungen. Lieber einen Ordner? "./daten:/app/data" -- der Container setzt die
# Besitzrechte an diesem Ordner beim Start selbst.
- nodvard_deck_data:/app/data
# Kanal zum Update-Helfer: nur Aufträge und Rückmeldungen, keine Daten (gehört nicht in Sicherungen).
- nodvard_deck_updater:/app/updater
# Optional: Ordner für die Sicherungen aus Einstellungen -> System -> Sicherung, AUSSERHALB
# des Datenspeichers (am besten ein anderes Laufwerk oder ein NAS). Zeile einkommentieren,
# Ordner anlegen und dem Nutzer 1000 geben (`mkdir sicherungen && sudo chown 1000:1000 sicherungen`),
# dann in der Oberfläche als Ordner `/backups` wählen. Nur `/backups` (und darunter) ist
# als Ziel erlaubt, neben dem Standard /app/data/backups.
# - ./sicherungen:/backups
# NAS oder NFS: den eingehängten Ordner eintragen, Rechte für 1000 und Reihenfolge beim Start siehe
# docs/16-SICHERUNG.md, Abschnitt "Sicherungen auf ein NAS oder NFS".
# - /pfad/zum/nas:/backups
# Eigener Namensserver nur für diesen Container. Nötig nur, wenn interne Namen des Heimnetzes
# (z. B. von einem Pi-hole) nicht gefunden werden. Zum Einschalten die Zeilen einkommentieren:
# dns:
# - 192.168.1.10
# - 1.1.1.1
# Begrenzt die Docker-Logdatei (3 x 10 MB), damit sie nicht ungebremst wächst.
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
healthcheck:
test: ["CMD", "python", "-I", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8080/api/v1/health', timeout=2)"]
interval: 30s
timeout: 3s
# Vor dem Start läuft die Migration samt Kopie der Datenbank (`nodvard_deck.boot`) -- bei einer großen Datenbank auf einem Pi
# Minuten. Während dieser Zeit zählen Fehlschläge nicht. Die Notseite antwortet mit 503; der Check schlägt dann an.
start_period: 300s
retries: 3
# Der Update-Helfer. Er liest nur Aufträge aus dem Kanal, prüft sie selbst und spricht dann mit Docker.
updater:
# Im Repository steht hier Tag 1 (alle Versionen des Helfers mit derselben Schnittstelle), in der Datei am
# GitHub-Release genau der dort geprüfte Helfer per Digest (deck-updater@sha256:...). Mit Digest ändert er sich
# nur, wenn du die Zeile aus einem neueren Release übernimmst.
image: ghcr.io/nodvard/deck-updater:1
restart: unless-stopped
# Kein Netz: Das Herunterladen der neuen Version macht Docker selbst, nicht der Helfer.
network_mode: none
# Alles nur lesbar, keine Sonderrechte, keine neuen Rechte zur Laufzeit, feste Obergrenzen.
read_only: true
cap_drop:
- ALL
security_opt:
- "no-new-privileges:true"
mem_limit: 64m
pids_limit: 32
# Nur nötig, wenn du den Dienst "nodvard-deck" oben umbenannt hast:
# environment:
# NODVARD_DECK_UPDATER_SERVICE: nodvard-deck
volumes:
# Zugang zu Docker. Ohne ":ro": an einem Socket schützt das nichts, Docker liest und schreibt darüber trotzdem.
# Rootless Docker: in einer Datei .env neben dieser Datei den Pfad setzen, z. B.
# NODVARD_DECK_DOCKER_SOCKET=/run/user/1000/docker.sock
- ${NODVARD_DECK_DOCKER_SOCKET:-/var/run/docker.sock}:/var/run/docker.sock
# Kanal (dasselbe Volume wie /app/updater oben) und der eigene Zustand des Helfers (sieht Nodvard Deck nie).
- nodvard_deck_updater:/channel
- nodvard_deck_updater_state:/state
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
# Feste Namen: Sie bleiben gleich, auch wenn jemand den Projektnamen überstimmt (COMPOSE_PROJECT_NAME, -p).
volumes:
nodvard_deck_data:
name: nodvard-deck-data
nodvard_deck_updater:
name: nodvard-deck-updater
nodvard_deck_updater_state:
name: nodvard-deck-updater-state