0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Forgejo Runnerインストールしてみた

0
Last updated at Posted at 2026-01-26

はじめに

前回、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」取得

  1. 設定>Actions>ランナー
    スクリーンショット 2026-01-27 1.31.25.png

  2. 新しいランナーを作成を押下すると下記画面が表示される
    スクリーンショット 2026-01-27 1.29.56.png

  3. 表示された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"
  ]
}

動作確認画面

スクリーンショット 2026-01-27 1.26.15.png

まとめ・参考資料

手動でコンテナに入って「forgejo-runner register」のコマンドを実行したり、ymlファイルを修正するのが、面倒になったため、コンテナ実行時にregisterのコマンドも実行する形でコンテナ作成してみた
ディレクトリ権限によって、registerkコマンドを実行しても「.runner」ファイルができず実行できないところで一苦労してしまったが、なんとかコンテナ実行するだけで設定できる状態を構築できた

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?