diff --git a/Tools/image-veroeffentlichen.sh b/Tools/image-veroeffentlichen.sh index 5cf7555..23f8b18 100755 --- a/Tools/image-veroeffentlichen.sh +++ b/Tools/image-veroeffentlichen.sh @@ -7,6 +7,11 @@ # Tools/image-veroeffentlichen.sh → :latest # Tools/image-veroeffentlichen.sh 0.2.0 → :latest und :0.2.0 # +# Nur eine Architektur — deutlich schneller, weil die fremde sonst unter +# Emulation läuft: +# +# FLARO_PLATTFORMEN=linux/amd64 Tools/image-veroeffentlichen.sh +# # Vorher einmalig anmelden — das Passwort tippst du selbst ein: # # docker login git.scarriffle.com @@ -17,6 +22,7 @@ REGISTRY="${FLARO_REGISTRY:-git.scarriffle.com}" PFAD="${FLARO_IMAGE_PATH:-scarriffle/flaro}" BILD="$REGISTRY/$PFAD" FASSUNG="${1:-}" +PLATTFORMEN="${FLARO_PLATTFORMEN:-linux/amd64,linux/arm64}" cd "$(dirname "$0")/.." @@ -45,10 +51,10 @@ MARKEN=(-t "$BILD:latest") docker buildx inspect flaro-bauer >/dev/null 2>&1 \ || docker buildx create --name flaro-bauer --use >/dev/null -echo "Baue $BILD für amd64 und arm64 — das dauert, arm64 läuft unter Emulation." +echo "Baue $BILD für $PLATTFORMEN." docker buildx build \ --builder flaro-bauer \ - --platform linux/amd64,linux/arm64 \ + --platform "$PLATTFORMEN" \ -f server/Dockerfile \ "${MARKEN[@]}" \ --push . diff --git a/docs/NAS-EINRICHTEN.md b/docs/NAS-EINRICHTEN.md index bdb3b06..eb6228a 100644 --- a/docs/NAS-EINRICHTEN.md +++ b/docs/NAS-EINRICHTEN.md @@ -55,18 +55,18 @@ Einmal einrichten, danach ist jedes Update ein `docker compose pull`. baut Gitea das Image für **beide** Architekturen und legt es ab — ohne dass jemand daran denken muss, und ohne Anmeldung am Arbeitsrechner. -**Voraussetzung ist ein registrierter Act-Runner.** Hat dein Gitea keinen, -passiert nichts; dann gilt A2. Nachsehen unter -*Einstellungen → Actions → Runner*. Ein Runner lässt sich als Container -neben Gitea betreiben: +**Voraussetzung ist ein registrierter Act-Runner.** Gitea verteilt Arbeit +nur, es baut nicht selbst: ohne Runner legt es bei jedem Push einen Lauf an, +der dann liegenbleibt. Nachsehen unter +*Repo → Einstellungen → Actions → Runner*. -```bash -docker run -d --restart unless-stopped --name gitea-runner \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -e GITEA_INSTANCE_URL=https://git.scarriffle.com \ - -e GITEA_RUNNER_REGISTRATION_TOKEN= \ - gitea/act_runner:latest -``` +Der Runner gehört **auf das NAS** — dort läuft Docker ohnehin, und damit +braucht es für ein neues Image nie wieder einen Arbeitsrechner. Fertig +vorbereitet liegt er in `server/docker-compose.runner.yml`; hineingehört nur +das Registrierungstoken aus derselben Gitea-Seite. + +Danach erscheint der Runner in der Liste, und der wartende Lauf startet — +oder spätestens der nächste Push. #### A2 · Von Hand vom Arbeitsrechner diff --git a/server/docker-compose.runner.yml b/server/docker-compose.runner.yml new file mode 100644 index 0000000..c974981 --- /dev/null +++ b/server/docker-compose.runner.yml @@ -0,0 +1,44 @@ +# Ein Gitea-Runner auf dem NAS. +# +# **Wozu.** Gitea verteilt Arbeit nur, es baut nicht selbst. Ohne einen +# registrierten Runner legt es bei jedem Push einen Lauf an, der dann +# liegenbleibt. Mit diesem hier baut das NAS das Flaro-Image selbst und legt +# es in die Registry desselben Gitea — danach braucht es keinen Arbeits- +# rechner mehr. +# +# **Das Token holst du dir vorher:** +# Gitea → Repo → Einstellungen → Actions → Runner → Neuen Runner erstellen +# +# Ein Runner auf Organisations- oder Serverebene bedient alle Repos; das +# Token dafür steht in der jeweiligen Verwaltung. + +services: + runner: + image: gitea/act_runner:latest + container_name: gitea-runner + restart: unless-stopped + + environment: + - GITEA_INSTANCE_URL=https://git.scarriffle.com + # Hier das Token aus der Gitea-Oberfläche eintragen. + - GITEA_RUNNER_REGISTRATION_TOKEN= + - GITEA_RUNNER_NAME=nas + # **Welche Marken dieser Runner bedient.** `ubuntu-latest` ist die, die + # der Flaro-Workflow in `runs-on` nennt. Ohne diese Zeile meldet sich + # der Runner mit den Vorgaben an, und ein Lauf findet ihn womöglich + # nicht. + - GITEA_RUNNER_LABELS=ubuntu-latest:docker://catthehacker/ubuntu:act-latest + + volumes: + # **Der Docker-Socket ist der Kern.** Der Runner baut nicht selbst, + # sondern lässt den Docker des NAS bauen. Ohne ihn scheitert jeder + # Schritt, der ein Image anfasst. + # + # Das ist zugleich die Abwägung: wer in diesen Container kommt, kann + # Docker auf dem NAS steuern. Deshalb gehört er nicht ins Internet und + # nimmt nur Arbeit von deinem eigenen Gitea an. + - /var/run/docker.sock:/var/run/docker.sock + # Anmeldung und Zwischenstände. Ohne dieses Volume meldet sich der + # Runner nach jedem Neustart neu an, und in der Liste sammeln sich + # Karteileichen. + - /volume4/CRITICAL/Docker/gitea-runner:/data