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?

docker-composeでTROCCOのSelf-Hosted Runnerを動かす構成例

Last updated at Posted at 2025-10-09

はじめに

TROCCOのSelf-Hosted Runnerは、TROCCOのデータ転送をユーザー管理の処理環境で実行できる機能です。SaaSとしてのTROCCOの使いやすさを保ちつつ、実データを閉域内に留めることでセキュアなデータ転送を実現することができます。

Docker(Linux環境)があれば利用できるので、クラウドのContainer as a Serviceを使うことも多くあるでしょうが、要件によってはサーバ、VMでの利用も想定されます。今回は、シンプルな構成としてdocker-composeの構成例をご紹介します。

こんな方におすすめ

  • docker-composeを利用したTROCCO Self-Hosted Runnerの運用を検討したい方
  • Windows PCのDocker Desktop(WSL2)が利用可能な環境で検証していますが、Linux環境のDockerが使える環境であれば同じように利用できると思われます
  • Docker Engineおよびdocker-composeが利用可能であることが前提です

docker-composeとは

docker-composeとは、複数のコンテナで構成されるアプリケーションを YAML ファイル(docker-compose.yaml) に定義し、まとめて起動・停止・管理できるツールです。

Self-Hosted Runnerはdocker runで個別のコンテナを立てることでも利用できますが、docker-composeを利用することでコンテナの停止時に自動で再起動したり、リソースの違うRunnerをまとめて立てたり、Runnerのログをファイルに書き出ししたりなどすることができます。

docker-compose.yamlファイルが存在するディレクトリをカレントディレクトリとして、

  • docker-compose up -dでコンテナを起動
  • docker-compose down -vでコンテナを停止

できます。

image.png

docker-composeの構成例

それほど量は多くないので、まずコードをまとめて掲載します。ディレクトリ構成は以下の通りです。

.
├── .env
├── docker-compose.yaml
└── fluent.conf

.env

docker-compose.yamlファイルで利用する変数を記載します。

.env
TROCCO_IMAGE_URL=<TROCCO_SELF_HOSTED_RUNNER_IMAGE_URL>
TROCCO_REGISTRATION_TOKEN_NORMAL=<YOUR_REGISTRAION_TOKEN>
TROCCO_REGISTRATION_TOKEN_ENHANCED=<YOUR_REGISTRAION_TOKEN>

docker-compose.yaml

インバウンド通信を受け付けない、メモリが異なるRunnerを複数と、Runnerのログをファイルに書き出しするためのfluentdのコンテナを設定します。

./docker-compose.yaml
services:
  fluentd:
    image: fluent/fluentd:latest
    volumes:
      - ./fluent.conf:/fluentd/etc/fluent.conf
      - ./log:/fluentd/log
    ports:
      - "24224:24224"
    logging:
      driver: "local"
      options:
        max-size: "50m"
        max-file: "10"
    networks:
      - outbound_only

  trocco-self-hosted-runner-normal:
    image: ${TROCCO_IMAGE_URL}:latest
    mem_limit: 2G
    cpus: 2
    restart: always
    environment:
      - TROCCO_REGISTRATION_TOKEN=${TROCCO_REGISTRATION_TOKEN_NORMAL}
      - TROCCO_PREVIEW_SEND=true
    logging:
      driver: "fluentd"
      options:
        fluentd-address: "localhost:24224"
        tag: "trocco-self-hosted-runner-normal.log"
        fluentd-async: "true"
    networks:
      - outbound_only
    depends_on:
      - fluentd

  trocco-self-hosted-runner-enhanced:
    image: ${TROCCO_IMAGE_URL}:latest
    mem_limit: 4G
    cpus: 2
    restart: always
    environment:
      - TROCCO_REGISTRATION_TOKEN=${TROCCO_REGISTRATION_TOKEN_ENHANCED}
      - TROCCO_PREVIEW_SEND=true
    logging:
      driver: "fluentd"
      options:
        fluentd-address: "localhost:24224"
        tag: "trocco-self-hosted-runner-enhanced.log"
        fluentd-async: "true"
    networks:
      - outbound_only
    depends_on:
      - fluentd

networks:
  outbound_only:
    driver: bridge

fluent.conf

fluentdの設定を記載します。

fluent.conf
<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<match trocco-self-hosted-runner-normal.**>
  @type file
  path /fluentd/log/self-hosted-runner-normal/
  time_slice_format %Y%m%d
  append true
  
  <buffer time>
    @type file
    path /fluentd/log_buffer/self-hosted-runner-normal
    timekey_use_utc true # UTCを使用
    timekey 1d           # 1日単位でファイルを分割
    flush_mode interval  # インターバルモードを明示的に指定
    flush_interval 1s    # 1秒ごとにバッファからログを書き込み
  </buffer>
</match>

<match trocco-self-hosted-runner-enhanced.**>
  @type file
  path /fluentd/log/self-hosted-runner-enhanced/
  time_slice_format %Y%m%d
  append true
  
  <buffer time>
    @type file
    path /fluentd/log_buffer/self-hosted-runner-enhanced
    timekey_use_utc true # UTCを使用
    timekey 1d           # 1日単位でファイルを分割
    flush_mode interval  # インターバルモードを明示的に指定
    flush_interval 1s    # 1秒ごとにバッファからログを書き込み
  </buffer>
</match>

ポイントの解説

上記のコードに関して、ポイントは以下の通りです。

Runnerの設定

以下のシンプルなコードでRunnerの設定を定義できます。メモリやCPUは実行するワークロードに応じて調整してください。

また、転送の内容によっては強めのリソースが必要になるかもしれませんが、その場合はSelf-Hosted Runner Clusterを分けて、それに対応したRegistration TokenをRunnerに登録することで、転送設定ごとのRunnerの使い分けができます。

  trocco-self-hosted-runner-normal:
    image: ${TROCCO_IMAGE_URL}
    mem_limit: 2G
    cpus: 2
    restart: always
    environment:
      - TROCCO_REGISTRATION_TOKEN=${TROCCO_REGISTRATION_TOKEN_NORMAL}
      - TROCCO_PREVIEW_SEND=true
    logging:
      driver: "fluentd"
      options:
        fluentd-address: "localhost:24224"
        tag: "trocco-self-hosted-runner-normal.log"
        fluentd-async: "true"
    networks:
      - outbound_only
    depends_on:
      - fluentd

ログの連携

コンテナの稼働の確認や、何かエラーが起きたときのデバッグをするために、ログを適切に取り扱うことは重要です。今回は、簡単に設定できるものとしてコンテナでfluentdを動かして、Runnerのログをそちらに向けて、fluentdからファイルとしてログをエクスポートするようにしています。

  fluentd:
    image: fluent/fluentd:latest
    volumes:
      - ./fluent.conf:/fluentd/etc/fluent.conf
      - ./log:/fluentd/log
    ports:
      - "24224:24224"
    logging:
      driver: "local"
      options:
        max-size: "50m"
        max-file: "10"
    networks:
      - outbound_only

今の設定のままで、以下のような形でログがローカルで取扱えるようになります。

.
├── log
│   ├── self-hosted-runner-enhanced
│   │   └── .20251008.log
│   └── self-hosted-runner-normal
│       └── .20251008.log
├── .env
├── .gitignore
├── docker-compose.yaml
└── fluent.conf

なお、この形はあくまでサンプルになるので、実運用の際には要件に合わせてログの設計をしてください。

ローカルで保持する場合は、

  • 保持したファイルをどのように保管/利用するのか
  • ファイルの保存期間をどうするか(今の設定だと無限に膨らんでいきます)

などといったことが検討観点になります。また、さっと作れたのでfluentdを利用していますが、fluent-bitの方が軽量で望ましいとのことです。

また、そもそもローカルで保持するのかというのも論点です。クラウドへの連携もできるので、運用を考えるとそちらの方を取ることも有力な選択肢になるでしょう。

ちなみに、TROCCOのジョブという意味ではSaaSのTROCCOにもログは連携されていきますので、最低限そちらで確認する形でも大丈夫です。ただし、その場合はコンテナ側に問題があるときのログが確認できないことにはご留意ください。

今回やっていないこと

上記とは別の観点として、

  • docker-composeのプロセス自体の死活監視
  • 稼働環境としてのサーバ/VMの監視
  • サーバ/VMでのネットワークの監視

といったことも、場合によっては必要になってきます。コンテナ自体の管理と、コンテナの外部環境の管理の両側面から、要件に合わせて必要な対応をしてください。

おわりに

構成自体はシンプルなものですが、Runnerの仕組み自体がインバウンド通信を受けずにRunner主導で動くもののため、十分に稼働するものになります。コンテナ自体の起動/稼働数の変更/停止などを柔軟にやろうとするとクラウドサービスが望ましいかもしれませんが、構成の一つとしてご活用ください。

0
0
0

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?