Как запустить свой Forgejo Runner на Codeberg: самообслуживаемый CI/CD для разработчиков
Зачем запускать свой CI/CD runner?
Codeberg — это отличная альтернатива GitHub. Платформа построена на Forgejo и развивается некоммерческой организацией, которая заботится о приватности и сообществе. Однако у Codeberg, как и у любой некоммерческой платформы, есть ограничения по ресурсам. Общие runner'ы работают, но иногда приходится ждать очереди.
Решение — поднять свой Forgejo runner. При этом runner сам инициирует исходящее соединение к Codeberg, поэтому его можно запустить где угодно: на VPS, домашнем сервере или даже на ноутбуке. Пробрасывать порты не нужно.
Как это работает
Forgejo runner — это процесс, который получает задачи от Codeberg и выполняет их. Чтобы не давать runner'у полный доступ к хосту, мы используем Docker-in-Docker (DinD). Runner создаёт изолированные контейнеры для выполнения задач, не касаясь Docker-демона хоста.
Docker Compose конфигурация
Для запуска понадобится два контейнера:
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'
Первый контейнер предоставляет изолированную среду Docker, а второй запускает сам runner.
Подготовка системы
Создайте директорию для runner'а. Рекомендуем /opt/forgejo-runner. Затем выполните:
cd /opt/forgejo-runner
mkdir -p data/.cache
chown -R 1001:1001 data
chmod 775 data/.cache
chmod g+s data/.cache
Далее нужно сгенерировать конфигурацию:
sudo sh -c 'docker run --rm data.forgejo.org/forgejo/runner:12 forgejo-runner generate-config > data/runner-config.yml'
Как зарегистрировать runner на Codeberg
Перейдите в настройки аккаунта или организации на Codeberg, затем в раздел Actions → Runners. Нажмите «Create new runner», укажите название и описание.
После этого система выдаст UUID и токен — сохраните их сразу. Без них runner не сможет подключиться. Codeberg также покажет готовый кусок YAML для вставки в конфигурацию.
Настройка labels и capacity
Откройте runner-config.yml и добавьте полученные credentials в раздел server.
Для labels используйте формат: [Workflow Label]:[Execution Method]://[Environment]
Пример:
labels:
- 'ubuntu-latest:docker://node:20-bookworm'
- 'ubuntu-22.04:docker://node:20-bookworm'
- 'ubuntu-24.04:docker://node:22-bookworm'
Когда workflow использует runs-on: ubuntu-latest, Codeberg найет runner с этим label.
Вы можете увеличить capacity в конфигурации — тогда runner одновременно сможет обрабатывать несколько задач. Начните с 4.
Запуск
После настройки запустите контейнеры:
docker-compose up -d
Проверьте логи:
docker-compose logs -f runner
Если всё прошло успешно, вы увидите, что runner зарегистрирован на Codeberg.