From 4a43589e52c2f70e75a1d01e828c2863f294e4f9 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 30 Jul 2026 15:56:36 +0200 Subject: [PATCH] runner: Gitea-Actions-Runner builder-1 ergaenzen gitea/act_runner:0.6.1, Labels linux-build (electronuserland/builder:22) und win-wine (Wine-Cross-Builds fuer Windows). Kapazitaet 1 und Job-Limits 2200m/1.5cpu wegen knapper Host-Ressourcen (2 Kerne, 3.7 GiB, kein Swap). Gitea-Zugriff der Jobs via Host-Gateway-Hairpin, Actions- Cache auf 172.17.0.1:8088. Registrierungs-Token kommt aus .env (gitignored), Vorlage .env.example. Co-Authored-By: Claude Fable 5 --- .env.example | 5 +++++ docker-compose.yml | 35 ++++++++++++++++++++++++++++++++++- runner/config.yaml | 23 +++++++++++++++++++++++ 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 .env.example create mode 100644 runner/config.yaml diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..d1eda93 --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +# Vorlage: nach .env kopieren und Wert setzen. +# Nur fuer die Runner-Erstregistrierung noetig, danach wieder leeren. +# Token erzeugen: +# docker exec -u git thread-net-git-gitea-1 gitea actions generate-runner-token +RUNNER_TOKEN='changeme' diff --git a/docker-compose.yml b/docker-compose.yml index 960fc62..5501a4b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,4 @@ -# Stack "thread-net-git" (CFGMON): Traefik + Gitea + cAdvisor. +# Stack "thread-net-git" (CFGMON): Traefik + Gitea + cAdvisor + Actions-Runner. # Abgeloest aus Portainer (Stack-ID 8) am 2026-07-30. # # WICHTIG: Der Compose-Projektname MUSS "thread-net-git" bleiben (siehe @@ -78,6 +78,39 @@ services: networks: - traefik + runner: + # Offizielles Image heisst gitea/act_runner (nicht gitea/runner). + image: gitea/act_runner:0.6.1 + container_name: gitea-runner + restart: always + depends_on: + - gitea + environment: + GITEA_INSTANCE_URL: https://rohana.axion1337.de + # Nur fuer die Erstregistrierung noetig (aus .env); danach liegt die + # Runner-Identitaet in ./runner-data/.runner und .env kann geleert werden. + GITEA_RUNNER_REGISTRATION_TOKEN: ${RUNNER_TOKEN:-} + GITEA_RUNNER_NAME: builder-1 + GITEA_RUNNER_LABELS: >- + linux-build:docker://electronuserland/builder:22, + win-wine:docker://electronuserland/builder:wine + CONFIG_FILE: /config.yaml + TZ: Europe/Berlin + extra_hosts: + # Hairpin ueber das Docker-Host-Gateway: umgeht die Cloud-Firewall, + # das Traefik-Zertifikat bleibt dabei gueltig. + - "rohana.axion1337.de:host-gateway" + ports: + # Actions-Cache: nur auf dem Docker-Gateway gebunden, damit ihn + # Job-Container erreichen, aber nichts von aussen. + - "172.17.0.1:8088:8088" + volumes: + - ./runner/config.yaml:/config.yaml:ro + - ./runner-data:/data + - /var/run/docker.sock:/var/run/docker.sock + networks: + - default + networks: traefik: external: true diff --git a/runner/config.yaml b/runner/config.yaml new file mode 100644 index 0000000..32800b0 --- /dev/null +++ b/runner/config.yaml @@ -0,0 +1,23 @@ +log: + level: info + +runner: + # 2 parallele Electron-Builds auf 2 Kernen / 3.7 GiB ohne Swap enden im + # OOM -- bei Host-Upgrade hochsetzen. + capacity: 1 + timeout: 3h + +cache: + enabled: true + host: "172.17.0.1" + port: 8088 + +container: + network: bridge + privileged: false + # --add-host: Job-Container erreichen Gitea ueber das Host-Gateway + # (Firewall-Hairpin, siehe docker-compose.yml). + # --memory/--cpus: Limits fuer die Job-Container -- sie laufen als + # Siblings ueber docker.sock, Limits am Runner-Container selbst + # greifen fuer sie nicht. + options: "--add-host=rohana.axion1337.de:host-gateway --memory=2200m --memory-swap=2200m --cpus=1.5"