Unifi-Voucher-Tool/tools/runner/README.md
Friederich Loheide 83f4223d89
Some checks are pending
CI / PHP Lint (pull_request) Waiting to run
CI / PHP Lint-1 (pull_request) Waiting to run
CI / Unit Tests & Static Analysis (pull_request) Waiting to run
CI / PHP Lint (push) Waiting to run
CI / PHP Lint-1 (push) Waiting to run
CI / Unit Tests & Static Analysis (push) Waiting to run
Einrichtung für einen Forgejo-Actions-Runner beilegen
tools/runner/ enthält eine Compose-Datei, eine Beispiel-Konfiguration und
eine Schritt-für-Schritt-Anleitung, um den Runner auf dem Server zu
registrieren. Der Runner läuft in einem eigenen Verzeichnis und fasst
/opt/forgejo nicht an.

Abgestimmt auf die vorhandenen Workflows und den Server:
- Label-Zuordnung ubuntu-latest -> node:20-bookworm, damit runs-on in
  ci.yml und release.yml greift
- capacity 1 und Speicherlimit, weil der Server nur 4 GB hat
- Hinweis darauf, was das Reichen des Docker-Sockets bedeutet, und die
  Host-Modus-Alternative samt ihrer Grenzen (setup-php braucht Container)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 15:06:19 +00:00

98 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Forgejo-Actions-Runner einrichten
Ohne registrierten Runner bleiben die Workflows (`ci.yml`, `release.yml`) in der
Warteschlange stehen Forgejo nimmt sie an, es holt sie nur niemand ab.
Die folgenden Schritte laufen **als root auf dem Server** und legen den Runner in
einem eigenen Verzeichnis an. `/opt/forgejo` und die dortigen Container bleiben
dabei unberührt.
## 1. Verzeichnis anlegen
```bash
mkdir -p /opt/forgejo-runner/data
cd /opt/forgejo-runner
# docker-compose.yml und config.example.yml aus tools/runner/ hierher kopieren
```
## 2. Registrierungs-Token holen
Entweder in der Weboberfläche unter
**Repository → Einstellungen → Actions → Runner → „Runner erstellen"**,
oder über die API (Token mit Repo-Rechten vorausgesetzt):
```bash
curl -s -X POST -H "Authorization: token $FORGEJO_TOKEN" \
https://git.loheide.cloud/api/v1/repos/friloo/Unifi-Voucher-Tool/actions/runners/registration-token
```
Soll der Runner für **alle** Repositories zuständig sein, stattdessen
`…/api/v1/admin/runners/registration-token` verwenden.
> Das Token ist kurzlebig und wird nur einmal beim Registrieren gebraucht.
## 3. Registrieren
```bash
docker compose run --rm runner forgejo-runner register --no-interactive \
--instance https://git.loheide.cloud \
--token "<REGISTRIERUNGS-TOKEN>" \
--name "$(hostname)-runner" \
--labels 'ubuntu-latest:docker://node:20-bookworm,ubuntu-22.04:docker://node:20-bookworm'
```
Die Label-Zuordnung ist wichtig: die Workflows verwenden `runs-on: ubuntu-latest`,
und dieses Label zeigt hier auf das Image `node:20-bookworm`. Darin sind Node
(für `actions/checkout`), Git, curl und unzip bereits enthalten.
## 4. Konfiguration erzeugen und anpassen
```bash
docker compose run --rm runner forgejo-runner generate-config > data/config.yml
```
Anschließend mindestens diese Werte setzen (Vorlage: `config.example.yml`):
| Wert | Empfehlung | Grund |
|---|---|---|
| `runner.capacity` | `1` | der Server hat 4 GB RAM |
| `runner.timeout` | `30m` | die Jobs hier dauern wenige Minuten |
| `container.force_pull` | `false` | spart Bandbreite und Plattenplatz |
| `cache.enabled` | `true` | beschleunigt `composer install` |
## 5. Starten
```bash
docker compose up -d
docker compose logs -f # sollte "Runner registered successfully" zeigen
```
Danach erscheint der Runner unter **Repository → Einstellungen → Actions → Runner**
als „idle", und der nächste Push auf `main` baut das Release-ZIP.
## Was der Runner darf bitte bewusst entscheiden
Der Runner bekommt den **Docker-Socket des Hosts** gereicht. Damit kann jeder
Workflow, der auf diesem Runner läuft, Container mit Root-Rechten starten das
entspricht faktisch Root auf dem Server. Für ein privates Repository, in dem nur
eigene Workflows laufen, ist das üblich und vertretbar. Sobald Fremde Pull
Requests öffnen können, sollte der Runner stattdessen auf einer separaten
Maschine oder in einer VM laufen.
Alternative ohne Docker-Socket: Runner im **Host-Modus** (`ubuntu-latest:host`).
Dann laufen die Jobs direkt auf dem Server, ohne Container dafür müssen Node,
Git und PHP dort installiert sein, und die Jobs sehen das Dateisystem des Hosts.
Für `release.yml` würde das reichen, für `ci.yml` (PHP 7.4 **und** 8.2 über
`shivammathur/setup-php`) nicht.
## Speicherbedarf im Blick behalten
`node:20-bookworm` belegt rund 1 GB auf der Platte, die Job-Container brauchen
kurzzeitig einige hundert MB RAM. Bei 4 GB Gesamtspeicher sollte neben Forgejo,
Caddy und der Datenbank nur **ein** Job gleichzeitig laufen (`capacity: 1`).
Aufräumen gelegentlich mit:
```bash
docker image prune -f
docker builder prune -f
```