Ctrl K
ComunidadGuías…

deploy/compose.standalone-mit-helfer.yml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# 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