# 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://: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