Selbstgehostete CI/CD mit Forgejo Runner auf Codeberg

Selbstgehostete CI/CD mit Forgejo Runner auf Codeberg

Mai 22, 2026 codeberg forgejo ci-cd docker self-hosting github-alternative devops automation

Warum einen eigenen CI/CD-Runner hosten?

Codeberg ist eine starke GitHub-Alternative. Die Plattform basiert auf Forgejo und wird von einem gemeinnützigen Verein betrieben. Wer Wert auf Datenschutz legt, findet hier eine gute Lösung. Allerdings stoßen die geteilten Runner an ihre Grenzen, wenn viele Nutzer gleichzeitig CI/CD-Jobs ausführen.

Die Antwort liegt darin, einen eigenen Forgejo-Runner zu betreiben. Der Runner verbindet sich selbstständig mit Codeberg. Er braucht keine offenen Ports, sondern funktioniert auf einem VPS, einem Heimserver oder sogar dem Laptop.

Wie der Runner aufgebaut ist

Ein Forgejo-Runner nimmt Jobs von Codeberg entgegen und führt sie aus. Aus Sicherheitsgründen läuft er in einem isolierten Docker-Umfeld. Mit Docker-in-Docker bleibt der Host-Docker-Daemon unberührt. Das schützt das System vor unerwünschtem Zugriff.

Docker Compose einrichten

Das Setup besteht aus zwei Containern:

version: '3.8'

services:
  docker-in-docker:
    image: docker:dind
    container_name: 'docker_dind'
    privileged: 'true'
    command: ['dockerd', '-H', 'tcp://0.0.0.0:2375', '--tls=false']
    restart: 'unless-stopped'

  runner:
    image: 'data.forgejo.org/forgejo/runner:12'
    links:
      - docker-in-docker
    depends_on:
      docker-in-docker:
        condition: service_started
    container_name: 'runner'
    environment:
      DOCKER_HOST: tcp://docker-in-docker:2375
    user: 1001:1001
    volumes:
      - ./data:/data
    restart: 'unless-stopped'
    command: 'forgejo-runner daemon --config runner-config.yml'

Der erste Container stellt eine isolierte Docker-Umgebung bereit. Der zweite Container ist der eigentliche Runner.

System vorbereiten

Vor dem Start der Container muss die Verzeichnisstruktur mit passenden Berechtigungen angelegt werden. Am besten legt man alles unter /opt/forgejo-runner an und führt folgende Befehle aus:

cd /opt/forgejo-runner
mkdir -p data/.cache
chown -R 1001:1001 data
chmod 775 data/.cache
chmod g+s data/.cache

Anschließend erzeugt man die Standardkonfiguration:

sudo sh -c 'docker run --rm data.forgejo.org/forgejo/runner:12 forgejo-runner generate-config > data/runner-config.yml'

Runner bei Codeberg registrieren

Jetzt geht es um die Anbindung an Codeberg. Im Account oder in der Organisation unter Actions → Runners kann man einen neuen Runner anlegen. Nach dem Vergeben eines Namen erhält man ein UUID und ein Token. Beide Werte sind wichtig und sollten sofort festgehalten werden.

Codeberg gibt anschließend die benötigten YAML-Werte vor.

Labels und Kapazität einstellen

In der Datei runner-config.yml sind zwei Punkte besonders wichtig:

1. Server-Konfiguration
Die von Codeberg übergebenen Zugangsdaten werden hier eingetragen.

2. Labels
Labels bestimmen, welche Jobs der Runner annehmen darf. Mit der Syntax [Workflow Label]:[Execution Method]://[Environment] lässt sich genau festlegen, welche Container-Images zur Verfügung stehen.

Die meisten Entwickler verwenden Labels wie ubuntu-latest oder ubuntu-22.04 und binden entsprechende Node- oder andere Images an.

Optional: Mehr Kapazität
Wer mehrere Jobs parallel laufen lassen möchte, erhöht den Wert capacity – zum Beispiel auf 4.

In Betrieb nehmen

Mit docker-compose up -d lässt sich das Setup starten. Anschließend kann man die Logs mit docker-compose logs -f runner kontrollieren. Werden keine Fehler angezeigt, verbindet sich der Runner erfolgreich mit Codeberg.

Was sich dadurch verbessert

Ein selbst gehosteter Runner bringt mehrere Vorteile:

  • Keine Wartezeiten mehr in der Warteschleife
  • Mehr Kontrolle über das Setup und die verwendeten Abhängigkeiten
  • Weniger Last auf Codebergs geteilten Runnern
  • Bessere Datenschutzbedingungen, weil Logs auf dem eigenen System bleiben
  • Möglichkeit, je nach Bedarf aufzurüsten

Fazit

Wer Codeberg nutzt, kann mit einem selbst gehosteten Runner die CI/CD-Infrastruktur verbessern. Das Projekt lässt sich leicht in einem Nachmittag umsetzen und wächst mit den Anforderungen. Wer noch auf GitHub unterstützt, findet hier eine einfache Möglichkeit, mehr Kontrolle über die CI/CD-Pipeline zu zu gewinnen.

Read in other languages:

RU BG EL CS UZ TR SV FI RO PT PL NB NL HU IT FR ES DA ZH-HANS EN