はじめに
前回、Forgejoインストールしてみたを投稿したが、runnerの設定まで投稿できていなかっため、こちらで投稿
設定
Dockerディレクトリ構成
Forgejo
|
|---- Foregejo
| |
| |---- compose.yml
| |
| └---- config
| |
| |-------- forgejo.env
| └-------- db.env
|
└---- runner
|
|------ compose.yml
|
|------ entrypoint.sh
|
|------ config
| |
| └-------- runnner.env
|
└------ data
事前設定
$ mkdir -p data
$ mkdir -p data/.cache
$ chown -R 1001:1001 data
$ chmod 775 data/.cache
$ chmod g+s data/.cache
ランナーの「REGISTRATION TOKEN」取得
インストール
ソース
compose.ymlファイル
compose.yaml
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'
networks:
- forgejo_shared_net
runner:
image: code.forgejo.org/forgejo/runner:12.5.3
container_name: 'forgejo_runner'
restart: 'unless-stopped'
user: 1001:1001
depends_on:
docker-in-docker:
condition: service_started
networks:
- forgejo_shared_net
env_file:
- ./config/runner.env
volumes:
- ./data:/data
entrypoint: ["/bin/sh", "/entrypoint.sh"]
networks:
forgejo_shared_net:
external: true
name: forgejo_forgejo_net # 本体側で作成したネットワークを指定
entrypoint.sh
entrypoint.sh
#!/bin/sh
# 設定ファイルのパス
CONFIG_FILE="/data/.runner"
# Docker Daemonが立ち上がるのを待機 (最大30秒)
echo "--- Waiting for Docker Daemon at $DOCKER_HOST... ---"
i=0
while ! nc -z ${DOCKER_HOST#*//} 2>/dev/null; do
i=$((i+1))
if [ $i -ge 30 ]; then
echo "--- Docker Daemon timeout. ---"
exit 1
fi
sleep 1
done
echo "--- Docker Daemon is ready! ---"
# 未登録(ファイルが存在しない)場合のみ register を実行
if [ ! -f "$CONFIG_FILE" ]; then
echo "--- No configuration found. Starting registration... ---"
# ラベルが未指定の場合はデフォルト(docker)をセット
RUNNER_LABELS=${FORGEJO_RUNNER_LABELS:-"docker:docker://node:20-bookworm,ubuntu:docker://node:20-bookworm"}
forgejo-runner register \
--no-interactive \
--token "${FORGEJO_RUNNER_REGISTRATION_TOKEN}" \
--instance "${FORGEJO_INSTANCE_URL}" \
--name "${FORGEJO_RUNNER_NAME:-forgejo-runner}" \
--labels "${RUNNER_LABELS}"
echo "--- Registration complete. ---"
else
echo "--- Runner already registered. Skipping registration. ---"
fi
exec forgejo-runner daemon
runner.env
下記について自分の環境に合わせて修正
※事前設定で取得した「REGISTRATION TOKEN」を「FORGEJO_RUNNER_REGISTRATION_TOKEN」へ記載
runner.env
DOCKER_HOST=tcp://docker-in-docker:2375
# ForgejoインスタンスのURL(ネットワーク内のサービス名で指定)URLサンプル
FORGEJO_INSTANCE_URL=http://192.168.012:3000
# 登録トークン(本来は環境変数やファイルで管理)
FORGEJO_RUNNER_REGISTRATION_TOKEN=xxxxxxxxxxxxxx
FORGEJO_RUNNER_LABELS=xxxxxx
実行コマンド
$ docker compose up -d
動作確認
コンテナログ
--- Waiting for Docker Daemon at tcp://docker-in-docker:2375... ---
--- Docker Daemon is ready! ---
--- No configuration found. Starting registration... ---
level=info msg="Registering runner, arch=amd64, os=linux, version=v12.5.3."
level=warning msg="Runner in user-mode."
level=debug msg="Successfully pinged the Forgejo instance server"
level=info msg="Runner registered successfully."
--- Registration complete. ---
time="2026-01-26T16:24:15Z" level=info msg="Starting runner daemon"
time="2026-01-26T16:24:15Z" level=info msg="runner: forgejo-runner, with version: v12.5.3, with labels: [docker ubuntu], declared successfully"
time="2026-01-26T16:24:15Z" level=info msg="[poller] launched"
.runnerファイルの作成結果
xxxx@xxxxx:/opt/Forgejo/runner/data# cat .runner
/opt/Forgejo/runner/data/.runner
{
"WARNING": "This file is automatically generated by forgejo-runner. Do not edit it manually unless you know what you are doing. Removing this file will cause act runner to re-register as a new runner.",
"id": 37,
"uuid": "xxxxxxxxxxxx",
"name": "forgejo-runner",
"token": "XXXXXXXXXXXXXXXXXXX",
"address": "http://xxx.xxx.xxx.xxx:3000",
"labels": [
"docker:docker://node:20-bookworm",
"ubuntu:docker://node:20-bookworm"
]
}
動作確認画面
まとめ・参考資料
手動でコンテナに入って「forgejo-runner register」のコマンドを実行したり、ymlファイルを修正するのが、面倒になったため、コンテナ実行時にregisterのコマンドも実行する形でコンテナ作成してみた
ディレクトリ権限によって、registerkコマンドを実行しても「.runner」ファイルができず実行できないところで一苦労してしまったが、なんとかコンテナ実行するだけで設定できる状態を構築できた


