- docs/deployment.md: manual build/push/pull workflow via Gitea registry, token handling (no secrets in repo), test vs. production compose variants, rollback and later CI automation notes. - compose.yaml: pull the prebuilt image from the Gitea registry instead of building from source on Unraid (source is not checked out there). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.4 KiB
Deployment
Wie ein neuer Stand der Website auf Unraid landet. Aktueller Stand: Handbetrieb — Image lokal bauen, in die Gitea-Registry pushen, auf Unraid ziehen. Die Automatisierung per Gitea Actions (plan.md Schritt 10) kommt später.
Test- vs. Produktivbetrieb. Solange die Domain noch nicht umgezogen ist und NPM nicht davorsteht, läuft der Container mit einem Port-Mapping und ist im lokalen Netz direkt erreichbar (
http://<unraid>:5000). Im Produktivbetrieb entfällt das Mapping — dann ist nur NPM der Weg zum Container (plan.md AE-4, Abschnitt 8). Die beiden compose-Varianten sind unten getrennt beschrieben.
Voraussetzungen (einmalig)
Gitea-Registry-Token
Der Push in die Registry braucht ein Gitea-Zugriffstoken mit Paket-Schreibrecht
(package: Read and Write) — nicht das Kontopasswort.
- Gitea → oben rechts Profilbild → Settings → Applications.
- Abschnitt Manage Access Tokens: Name vergeben (z.B.
registry-push). - Unter Select scopes:
packageauf Read and Write stellen. - Generate Token klicken, Zeichenkette sofort kopieren (nur einmal sichtbar).
Token ist ein Geheimnis. Niemals in Git, Chats, Screenshots oder Tickets im Klartext ablegen. Wird eins doch einmal sichtbar: in Gitea löschen und neu erzeugen. Ein
package-Token erlaubt das Hochladen beliebiger Images in die Registry.
Der Docker-Login speichert das Token danach lokal, sodass es nur einmal eingegeben werden muss.
Neuen Stand ausrollen (Handbetrieb)
Alle Befehle auf dem Entwicklungsrechner (Docker installiert), im Repo-Root.
1. Image bauen
docker build -t gitea.anticarnist.de/tom/elternbeirat:latest .
Der Image-Pfad ist kleingeschrieben — Container-Registries verlangen das im
Pfad, obwohl Benutzer (Tom) und Repo (Elternbeirat) großgeschrieben sind.
2. An der Registry anmelden (einmalig, bis das Token wechselt)
docker login gitea.anticarnist.de
- Username:
Tom - Password: das
package-Token (nicht das Kontopasswort).
3. Image in die Registry pushen
docker push gitea.anticarnist.de/tom/elternbeirat:latest
4. Auf Unraid neu ziehen und starten
Über das Docker Compose Manager-Plugin (Unraid-Weboberfläche, kein Terminal):
- Reiter Docker → Abschnitt Compose → das Projekt eb-web →
Compose Down, dann Compose Up (oder in der Projekt-UI „Pull" + „Up",
je nach Plugin-Version), damit die neue
:latestgezogen wird.
docker compose upzieht ein:latestnicht automatisch neu, wenn schon ein gleichnamiges Image lokal liegt. Im Zweifel vorher explizit „Pull".
compose-Varianten
Test (jetzt: ohne NPM, direkt im LAN erreichbar)
Liegt im Repo als compose.yaml. Zieht das Registry-Image und mappt Port
5000 → 8080:
services:
eb-web:
image: gitea.anticarnist.de/tom/elternbeirat:latest
container_name: eb-web
restart: unless-stopped
environment:
ASPNETCORE_URLS: http://+:8080
TZ: Europe/Berlin
ports:
- "5000:8080" # TEST-Zugang, im Produktivbetrieb entfernen
Erreichbar unter http://<unraid>:5000.
Produktiv (später: nur über NPM)
Kein ports:-Block, stattdessen das externe NPM-Docker-Netz (plan.md
Abschnitt 8):
services:
eb-web:
image: gitea.anticarnist.de/tom/elternbeirat:latest
container_name: eb-web
restart: unless-stopped
environment:
ASPNETCORE_URLS: http://+:8080
TZ: Europe/Berlin
networks: [npm]
networks:
npm:
external: true
Rollback
:latest allein macht Rollback unmöglich — deshalb sobald wir auf Gitea Actions
umstellen (Schritt 10) immer auch mit dem Commit-SHA taggen und pushen:
docker build -t gitea.anticarnist.de/tom/elternbeirat:latest \
-t gitea.anticarnist.de/tom/elternbeirat:<sha> .
docker push gitea.anticarnist.de/tom/elternbeirat --all-tags
Zum Zurückrollen in der Unraid-compose.yaml :latest durch :<sha> des
letzten funktionierenden Stands ersetzen und neu hochfahren.
Offene Automatisierung (später, plan.md Schritt 10)
.gitea/workflows/deploy.yml: auf Push nachmainbauen und pushen.- Zwei bekannte Stolpersteine: der
act_runnerbraucht Docker-Socket-Zugriff; die Registry braucht daswrite:package-Token, nicht das Login-Passwort. - Redeploy per Watchtower label-scoped, sonst aktualisiert er den ganzen Home-Lab-Bestand.