Damit das Image dort landet, wo das NAS es holen kann. **`.gitea/workflows/image.yml`** — Gitea baut selbst. Bei jedem Push auf `main` entsteht das Image für **beide** Architekturen und landet in der Registry desselben Gitea. Niemand muss daran denken, niemand muss angemeldet sein, und niemand kann die Architektur vergessen. Voraussetzung ist ein registrierter Act-Runner. Hat deiner keinen, läuft die Datei nie an — dafür gibt es den zweiten Weg. **`Tools/image-veroeffentlichen.sh`** — ein Befehl vom Arbeitsrechner, baut amd64 und arm64 und lädt hoch. Angemeldet wird einmalig von Hand; das Passwort tippt nur, wer es kennt. Beides legt `:latest` ab, dazu den Kurz-Hash und auf einem Git-Tag dessen Namen — damit sich eine Fassung festnageln lässt, statt immer „latest" zu ziehen. Die Anleitung bekommt vier neue Abschnitte: Gitea baut selbst, von Hand bauen, das Paket öffentlich stellen, und **die Registry im NAS eintragen** — also genau der Dialog „Quellname des Images", mit Alias `gitea` und Link `https://git.scarriffle.com/`. Für ein privates Paket ein Zugriffstoken mit `read:package`, nicht das Kontopasswort: ein Token lässt sich einzeln widerrufen. Die Beispiel-Compose zeigte auf `ghcr.io/scarriffle/flaro` — dort liegt nichts und lag nie etwas. Jetzt auf die Gitea-Registry. --- **Ein Fehler im eigenen Skript, gefunden beim ersten Lauf.** Die Prüfung „läuft Docker?" war `docker info | grep -q .` — und `grep -q` beendet die Pipe beim ersten Treffer, Docker bekommt SIGPIPE, und mit `set -o pipefail` gilt das als Fehlschlag. Das Skript meldete „Docker läuft nicht", während Docker lief und gerade ein Image gebaut hatte. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
76 lines
3.0 KiB
YAML
76 lines
3.0 KiB
YAML
# Beispiel, kein fertiger Betrieb. Jeder Pfad hier gehört angepasst.
|
|
#
|
|
# Übernommen aus einem laufenden Plex-Container auf einem UGREEN-NAS — die
|
|
# Form ist bewährt, die Werte sind es nur dort.
|
|
|
|
services:
|
|
flaro:
|
|
# Die Registry des eigenen Gitea. Wer woanders veröffentlicht, trägt
|
|
# hier etwas anderes ein — siehe docs/NAS-EINRICHTEN.md.
|
|
image: git.scarriffle.com/scarriffle/flaro:latest
|
|
container_name: flaro
|
|
restart: unless-stopped
|
|
|
|
ports:
|
|
- "8080:8080"
|
|
|
|
environment:
|
|
- TZ=Europe/Zurich
|
|
|
|
# Plakate, Hintergründe und NFO-Dateien neben den Film legen.
|
|
#
|
|
# **Standardmässig aus.** Dafür muss die Medieneinhängung unten ohne
|
|
# `:ro` stehen — und damit kann der Server dort im Grundsatz schreiben.
|
|
# Dass er nur Beiwerk anlegt, hängt an einer Erlaubnisliste im Code
|
|
# (`SidecarNames`): poster.jpg, fanart.jpg, logo.png, movie.nfo,
|
|
# tvshow.nfo, je Folge eine NFO und ein Standbild. Alles andere lehnt er
|
|
# ab, auch Mediendateien — die werden nie geändert, umbenannt oder
|
|
# gelöscht.
|
|
#
|
|
# Der Gewinn: dein Bestand wird tragbar. Ein Umzug, ein Neuaufbau der
|
|
# Datenbank oder ein zweiter Server finden Zuordnungen und Bilder wieder.
|
|
- FLARO_WRITE_SIDECARS=true
|
|
|
|
# Wem die Dateien auf dem Wirt gehören. 1000:1000 ist die Voreinstellung
|
|
# im Image; wer andere Kennungen hat, trägt sie hier ein — `id -u` und
|
|
# `id -g` auf dem Wirt sagen, welche.
|
|
user: "1000:1000"
|
|
|
|
volumes:
|
|
# Datenbank und Einstellungen. **Das Einzige, was gesichert werden muss.**
|
|
- /volume4/CRITICAL/Docker/Flaro/config:/config
|
|
|
|
# Bilder und Zwischenstände. Darf verlorengehen, baut sich neu auf.
|
|
- /volume4/CRITICAL/Docker/Flaro/cache:/cache
|
|
|
|
# Kratzplatz fürs Umrechnen. Am besten auf eine SSD und nicht dorthin,
|
|
# wo die Medien liegen — hier wird viel und kurzlebig geschrieben.
|
|
- /volume1/Transcode:/transcode
|
|
|
|
# Die Medien.
|
|
#
|
|
# **Ohne `:ro`, weil FLARO_WRITE_SIDECARS oben an ist.** Wer das nicht
|
|
# will, setzt die Variable auf `false` und hängt wieder mit `:ro` ein —
|
|
# dann bleiben Bilder und Metadaten nur in Flaros Cache, und der Bestand
|
|
# ist gegen jeden Zugriff des Servers geschützt.
|
|
#
|
|
# Transcode-Zwischenstände kommen hier **nie** her; die liegen auf dem
|
|
# eigenen Volume darüber.
|
|
#
|
|
# Was hier eingehängt wird, ist der Pfad, den du später in der Oberfläche
|
|
# als Bibliothek anlegst — also `/media`, nicht `/volume4/MYFLIX`.
|
|
- /volume4/MYFLIX:/media
|
|
|
|
# Hardware fürs Umrechnen. Intel wie AMD laufen über VAAPI an derselben
|
|
# Stelle. Fehlt die Zeile, rechnet Flaro in Software — langsamer, aber es
|
|
# läuft. Zum blossen Umpacken wird sie ohnehin nicht gebraucht.
|
|
devices:
|
|
- /dev/dri:/dev/dri
|
|
|
|
healthcheck:
|
|
test: ["CMD", "dotnet", "--info"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 20s
|