Forgejo na Codeberg: jak samodzielnie uruchomić własny runner
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.