Vlastní Forgejo Runner na Codebergu: Jak si postavit CI/CD bez cizí infrastruktury
Proč si hostovat vlastní CI/CD runner?
Codeberg se stal oblíbenou alternativou k GitHubu. Stojí na Forgejo a spravuje ho nezisková organizace, která klade důraz na soukromí a komunitu. Přesto má jako každý provozovatel omezené zdroje. Sdílené běhové prostředí tam proto není vždy nejrychlejší.
Mnoho lidí proto přechází na vlastní Forgejo runner. Výhoda je v tom, že runner sám navazuje spojení směrem ven. Díky tomu ho můžete spustit na VPS, domácím serveru i na notebooku – bez nutnosti otevírat porty.
Jak to celé funguje
Runner je v podstatě pracovník, který přijímá úkoly z Codebergu a spouštějí je. Abychom ho ochránili, izolujeme ho pomocí Docker-in-Docker. Runner tak vytváří kontejnery, aniž by sahal na Docker vašeho hostitele.
Docker Compose nastavení
Základem je jednoduché dvoukontejnerové řešení:
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'
První kontejner poskytuje izolované Docker prostředí. Druhý pak komunikuje s tímto prostředí.
Příprava systému
Před spuštěním kontejnerů si připravte strukturu. Vytvořte na serveru novou adresář odkazující na /opt/forgejo-runner,navigujte k ní a pak větí:
cd /opt/forgejo-runner
mkdir -p data/.cache
chown -R 1001:1001 data
chmod 775 data/.cache
chmod g+s data/.cache
Potom generujte konfigurační soubor:
sudo sh -c 'docker run --rm data.forgejo.org/forgejo/runner:12 forgejo-runner generate-config > data/runner-config.yml'
Jak runner zaregistrovat na Codebergu
Go to your Codeberg account or organization settings → Actions → Runners. Vytvořte nový runner, která has a memorable name. Codeberg pak generuje UUID a token – ty si hned zapisujte. Tyto údaje umožňují runneru komunikovat s Codebergu.
Labels a capacity
V souboru runner-config.yml upravte dvě hlavní části.
1. Server konfigurace
Přidejte UUID a token, kteray Codeberg poskytl.
2. Labels
Labels jsou značky, ktery workflows ovladají. Příklad:
labels:
- 'ubuntu-latest:docker://node:20-bookworm'
- 'ubuntu-22.04:docker://node:20-bookworm'
- 'ubuntu-24.04:docker://node:22-bookworm'
When a workflow specifies runs-on: ubuntu-latest, Codeberg finds the runner with that label. This is your matchmaking system between jobs and runners.
Optional: Adjust Capacity
Default je 1 job per runner. Pokud má server dostatečné zdroje, můžete capacity zvýšit.
Jak spustit runner
Once your configuration is complete, start the runner:
docker-compose up -d
Monitorujte logy:
docker-compose logs -f runner
Co si všimnete na výkonu
By self-hosting your runner, you'll experience:
- Rychlejší spuštění – žádné čekání v queue
- Plná kontrola nad CI/CD prostředí
- Úspora a podpora neziskové organizace
- Soukromí – logy zůstávají u vás
- Flexibilita – můžete rozšířit podle potřeby
Závěr
Nastavení vlastního Forgejo runneru je jednoduchý projekt, který se vyplatí ihned. Pokud už Codeberg používáte, je to přirozený další krok.