Forgejo na Codeberg: jak samodzielnie uruchomić własny runner

Forgejo na Codeberg: jak samodzielnie uruchomić własny runner

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

Dlaczego warto mieć własny runner CI/CD?

Codeberg to świetna alternatywa dla GitHuba. Działa na bazie Forgejo i jest utrzymywany przez organizację non-profit, więc stawia na prywatność i społeczność. Problem w tym, że wspólne zasoby, jakie oferuje, są ograniczone — szczególnie przy większej liczbie projektów.

Rozwiązaniem jest uruchomienie własnego runnera Forgejo. Najlepsze w tym wszystkim jest to, że runner łączy się z Codebergem na zewnątrz. Nie trzeba konfigurować przekierowań portów, więc działa równie dobrze na VPS-ie, domowym serwerze, jak i na laptopie.

Jak to działa?

Runner Forgejo to po prostu proces, który odbiera zadania z Codeberga i je wykonuje. Żeby nie naruszać bezpieczeństwa systemu, uruchamiamy go w izolacji przy użyciu Docker-in-Docker. Dzięki temu runner tworzy własne kontenery, a Twój główny daemon Docker nie jest bezpośrednio dostępny z zewnątrz.

Prosty setup z Docker Compose

Całość opiera się na dwóch kontenerach — jednym zapewniającym środowisko Docker i drugim, który pełni funkcję runnera:

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'

Pierwszy kontener daje izolowane środowisko Docker, drugi — sam runner — używa tego środowiska do wykonywania zadań.

Przygotowanie systemu

Najpierw przygotuj katalog, w którym będzie działać runner. Polecam ścieżkę /opt/forgejo-runner. Stwórz strukturę i ustaw odpowiednie uprawnienia:

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

Następnie generujesz domyślną konfigurację:

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

Krok na Codebergu

Wejdź w ustawowania konta lub organizacji, wybierz Actions → Runners i kliknij „Create new runner”. Nadaj mu nazwę i — co ważne — zapisz od razu UUID i token, które się pojawią. Bez nich runner nie będzie mógł się zarejestrować.

Codeberg podaje też gotowy fragment YAML, który możesz bezpośrednio wstawić do konfiguracji.

Ustawienia w runner-config.yml

W pliku runner-config.yml musisz przede wszystkim:

  • Wpisać dane uwierzytelniające (UUID i token)
  • Zdefiniować labels, czyli etykiety, które określają, jakie środowiska oferujesz

Przykładowo:

labels: 
  - 'ubuntu-latest:docker://node:20-bookworm'
  - 'ubuntu-22.04:docker://node:20-bookworm'
  - 'ubuntu-24.04:docker://node:22-bookworm'

Jeśli chcesz, żeby runner mógł obsługiwać więcej zadań naraz, zwiększ wartość capacity — np. do 4.

Uruchomienie

Po skonfigurowacji wystarczy uruchomić całą usługę:

docker-compose up -d

Sprawdzaj logi runnera:

docker-compose logs -f runner

Gdy zobaczysz, że runner się zarejestrował, możesz już korzystać z niego w swoich workflowach.

Co zyskujesz?

Własny runner daje przede wszystkim:

  • Szybsze wykonywanie zadań bez kolejek
  • Pełną kontrolę nad środowiskiem
  • Oszczędność kosztów i wsparcie dla Codeberga
  • Prywatność — logi zostają u Ciebie
  • Możliwość skalowania według potrzeb

Podsumowanie

Uruchomienie własnego runnera Forgejo to prosty, ale bardzo praktyczny krok. Nie wymaga wielkiego nakładu pracy, a daje natychmiastowe korzyści. Jeśli już używasz Codeberga, to naturalny rozwój Twojej infrastruktury.

Read in other languages:

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