Codeberg用のActions Runnerを自分のサーバーでホストする

公開日: 2026年6月10日 14時18分 713文字 4分間

Codebergの標準Runnerによる待ち時間やメモリ不足を解消するため、自宅サーバーにForgejo Runnerを自前で構築・運用する方法を解説しています。Docker Composeを用いてRunnerをインストールし、Codebergの設定画面から取得したトークンを用いて登録・起動する手順がまとめられています。

はじめに

過去に書いた記事の方法でこのブログのデプロイをForgejo Runnerを用いて自動化していたのですが、記事が増えた結果処理に必要なメモリ量が増えてしまいました。

素直にcodeberg-mediumラベルのRunnerを使う形に変えて運用していたのですが、急がないとは言え待ち時間30分超えなどなかなか厳しい感じに…

良い機会なので自宅のサーバーでホストして自由に使えるようにすることにしました。

ステップ1. DockerとDocker Composeをインストールする

ステップ2. Forgejo Runnerをインストールする

任意のインストール先のディレクトリにまずRunnerの作業用の非rootからアクセス可能なディレクトリを作成します。

以下のスクリプトをbash setup.shで実行してください。

この例ではUID/GIDとして1001:1001を使用しています

#!/usr/bin/env bash

set -e

mkdir -p data/.cache

chown -R 1001:1001 data
chmod 775 data/.cache
chmod g+s data/.cache

次にdocker-compose.ymlを作成します。

公式ドキュメントで指定されているversionはCompose V2から廃止されているので必要ありません。

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 without root privileges, but with access to `./data`.
    user: 1001:1001
    volumes:
      - ./data:/data
    restart: 'unless-stopped'
    command: 'forgejo-runner daemon --config runner-config.yml'

ステップ3. Runnerを登録する

configを生成する

Runnerを登録するにあたって、まず下記のコマンドでデフォルトのconfigを先程作成したdataディレクトリに生成します。

docker run --rm data.forgejo.org/forgejo/runner:12 \
  forgejo-runner generate-config > data/runner-config.yml

Codeberg側でRunnerを追加する

Codebergのサイト上で右上の自分のアイコンから設定→Actions→ランナーと飛んで、新しいランナーを作成をクリックします。

名前を求められますが、自分が識別可能なものであればなんでも大丈夫です。

追加できるとこんな感じの画面が表示されます。

Using the runner configuration fileの下にあるコードブロックの内容をコピーして、先ほど生成したconfigの一番下にあるserver:を置き換えてください。

ラベルを追加する

これだけだと呼び出せないので、実行環境を指定するラベルを追加します。

ラベルは以下のような構文で記述します。

<label-name>:<label-type>://<default-image>

例えばCodeberg標準のRunnerで使用されているghcr.io/catthehacker/ubuntu:act-latestで実行したい場合、以下のような感じになります。

server:
  connections:
    codeberg:
      url: https://codeberg.org/
      uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
      token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      labels:
        - ubuntu-latest:docker://ghcr.io/catthehacker/ubuntu:act-latest

ステップ4. Runnerを起動する

以下のコマンドで起動します。

docker compose up -d

サイト側からも起動している事が確認できます。

参考にしたサイト