コンテンツにスキップ

設定

このページではインストールレベルの設定(コントローラー設定、エージェント設定、Web 環境変数、age 鍵のセットアップ)を説明します。

サービス定義は composia-meta.yaml に記述します。このファイルについては サービスガイド を参照してください。

設定ファイルの形式

コントローラーとエージェントは同じ YAML ファイル形式を使用します。ファイルにはどちらかのセクション、または両方を含めることができます:

controller:
  # コントローラー設定

agent:
  # エージェント設定

controller または agent の少なくとも 1 つが存在する必要があります。

同じ設定ファイルに両方のセクションが含まれる場合、ローカルエージェントは組み込みノードとして扱われます:

  • agent.node_idmain である必要があります。
  • controller.nodes には id: main のエントリが含まれている必要があります。
  • controller.repo_diragent.repo_dir は同じパスであってはいけません。

完全な設定テンプレート

このテンプレートはサポートされているすべてのインストールレベルのキーを示しています。形のリファレンスであり、コピー&ペースト用のデフォルトではありません。使用しないセクションは削除し、空のリスト項目は削除し、各シークレット系フィールドにはインライン値または _file 値のいずれかを使用してください。

config.yaml
controller:
  listen_addr: ":7001"
  repo_dir: "/data/repo-controller"
  state_dir: "/data/state-controller"
  log_dir: "/data/logs"

  access_tokens:
    - name: "web"
      token: "REPLACE_WITH_WEB_ACCESS_TOKEN"
      token_file: ""
      enabled: true
      comment: "Web UI アクセストークン"

  nodes:
    - id: "main"
      display_name: "Main"
      enabled: true
      public_ipv4: ""
      public_ipv6: ""
      token: "REPLACE_WITH_MAIN_AGENT_TOKEN"
      token_file: ""

  git:
    remote_url: ""
    branch: "main"
    pull_interval: ""
    author_name: "Composia"
    author_email: "composia@example.com"
    auth:
      username: ""
      token: ""
      token_file: ""

  backup:
    default_schedule: ""

  updates:
    default_check_schedule: ""
    auto_apply: false
    backup_before_update: true
    digest_pin: false
    semver:
      default_allow:
        - patch
        - minor
    forge_auth:
      github:
        url: "https://github.com"
        token: ""
        token_file: ""
        api_url: "https://api.github.com"
      gitlab:
        url: "https://gitlab.com"
        token: ""
        token_file: ""
        api_url: "https://gitlab.com/api/v4"
      forgejo:
        url: "https://forgejo.example.com"
        token: ""
        token_file: ""
        api_url: ""

  auto_deploy:
    infra: false
    services: false

  dns:
    cloudflare:
      api_token: ""
      api_token_file: ""
      zones: []
    alidns:
      access_key_id: ""
      access_key_id_file: ""
      access_key_secret: ""
      access_key_secret_file: ""
      security_token: ""
      security_token_file: ""
      region_id: ""
      zones: []
    dnspod:
      secret_id: ""
      secret_id_file: ""
      secret_key: ""
      secret_key_file: ""
      session_token: ""
      session_token_file: ""
      region: ""
      zones: []
    route53:
      access_key_id: ""
      access_key_id_file: ""
      secret_access_key: ""
      secret_access_key_file: ""
      session_token: ""
      session_token_file: ""
      region: ""
      profile: ""
      hosted_zone_id: ""
      zones: []
    huaweicloud:
      access_key_id: ""
      access_key_id_file: ""
      secret_access_key: ""
      secret_access_key_file: ""
      region_id: ""
      zones: []

  rustic:
    main_nodes:
      - "main"
    maintenance:
      forget_schedule: ""
      prune_schedule: ""

  secrets:
    provider: age
    identity_file: "/app/configs/age-identity.key"
    recipient_file: ""
    armor: true

  notifications:
    alertmanager:
      enabled: true
      listen_path: "/api/v1/alerts"
    smtp:
      enabled: false
      host: ""
      port: 587
      encryption: starttls
      username: ""
      password: ""
      password_file: ""
      from: ""
      to: []
      on: []
      task_sources: []
    telegram:
      enabled: false
      bot_token: ""
      bot_token_file: ""
      chat_id: ""
      on: []
      task_sources: []

agent:
  controller_addr: "http://controller:7001"
  controller_grpc: false
  controller_headers:
    - name: ""
      value: ""
      value_file: ""
  node_id: "main"
  token: "REPLACE_WITH_MAIN_AGENT_TOKEN"
  token_file: ""
  repo_dir: "/data/repo-agent"
  state_dir: "/data/state-agent"
  caddy:
    generated_dir: ""

空の name を持つ controller_headers のような空のリスト項目は保持しないでください。これらはサポートされているオブジェクトの形を文書化するためにのみ表示されています。

Web アクセストークンとメインエージェントトークンは異なるものである必要があります。

age 鍵のセットアップ

controller.secrets はオプションです。Composia 管理の暗号化シークレットを使用する場合にのみ設定してください。

controller.secrets が設定されている場合、identity_file は必須です。recipient_file はオプションです。省略した場合、Composia は秘密鍵から受信者を導出します。

秘密鍵の生成:

age-keygen -o age-identity.key

オプションの受信者ファイル:

age-keygen -y age-identity.key > age-recipients.txt

設定で秘密鍵を使用:

secrets:
  provider: age
  identity_file: "/app/configs/age-identity.key"

または両方のファイルを使用:

secrets:
  provider: age
  identity_file: "/app/configs/age-identity.key"
  recipient_file: "/app/configs/age-recipients.txt"

armor はオプションで、デフォルトは true です。

コントローラー設定リファレンス

必須キー

キー説明
listen_addrstringコントローラーのリッスンアドレス。例: ":7001" または "127.0.0.1:7001"
repo_dirstring期待状態 Git リポジトリのパス。
state_dirstringコントローラー状態のパス。
log_dirstringタスクログディレクトリ。
nodes[]object設定されたエージェントノード。空でもキーが存在する必要があります。

オプションのトップレベルキー

キー説明
access_tokens[]objectWeb UI、CLI、外部クライアント用の API トークン。
backupobjectグローバルバックアップデフォルト。
gitobject期待状態リポジトリのリモート同期。
notificationsobjectAlertmanager、SMTP、Telegram 通知。
dnsobjectDNS プロバイダー認証情報。
rusticobjectRustic メンテナンス設定。
secretsobjectAge 暗号化設定。
updatesobjectイメージ更新デフォルトと forge API 認証。
auto_deployobjectグローバル自動デプロイトグル。

nodes[]

キー必須説明
idstringはい一意のノード ID。
display_namestringいいえUI に表示される名前。
enabledboolいいえ削除せずにノードを無効化します。
public_ipv4stringいいえDNS ワークフローで使用されるパブリック IPv4。
public_ipv6stringいいえDNS ワークフローで使用されるパブリック IPv6。
tokenstringはい*エージェント認証トークン。
token_filestringいいえファイルからトークンを読み取ります。

*token または token_file のいずれかを使用し、両方は使用しないでください。

access_tokens[]

キー必須説明
namestringはいトークン名。
tokenstringはい*トークン値。
token_filestringいいえファイルからトークンを読み取ります。
enabledboolいいえ削除せずにトークンを無効化します。
commentstringいいえ管理用メモ。

アクセストークンはノードトークンや他のアクセストークンと重複してはいけません。

git

キー必須説明
remote_urlstringいいえGit リモート URL。
branchstringいいえ同期するブランチ。
pull_intervalstring条件付きremote_url が設定されている場合に必須。
author_namestringいいえコントローラー書き込みのコミット作成者名。
author_emailstringいいえコミット作成者メール。
auth.usernamestringいいえGit ユーザー名。
auth.tokenstringいいえGit トークン。
auth.token_filestringいいえファイルから Git トークンを読み取ります。

secrets

このセクション全体はオプションです。セクションが存在する場合、以下のルールが適用されます:

キー必須説明
providerstringはいage である必要があります。
identity_filestringはいAge 秘密鍵のパス。
recipient_filestringいいえAge 受信者ファイルのパス。省略した場合、受信者は identity_file から導出されます。
armorboolいいえASCII アーマー暗号化出力。デフォルトは true

backup

キー説明
default_schedulestringサービスバックアップのデフォルト cron スケジュール。

updates

キー説明
default_check_schedulestringイメージ更新チェックのデフォルト cron スケジュール。
auto_applyboolデフォルトで更新を自動適用します。
backup_before_updatebool更新を適用する前にデータをバックアップします。
digest_pinboolイメージをダイジェストで固定します。
semver.default_allow[]string許可される semver バンプレベル: patchminormajor
forge_auth.githubobject または []objectGitHub API 認証。
forge_auth.gitlabobject または []objectGitLab API 認証。
forge_auth.forgejoobject または []objectForgejo API 認証。

各 forge 認証エントリは以下をサポートします:

キー説明
urlstringForge のベース URL。
tokenstringAPI トークン。
token_filestringファイルから API トークンを読み取ります。
api_urlstringAPI URL の上書き。

auto_deploy

キー説明
infraboolGit 変更後にインフラストラクチャサービスを自動デプロイします。
servicesboolGit 変更後に通常のサービスを自動デプロイします。

dns

プロバイダーキー認証情報キー共通キー
cloudflareapi_token, api_token_filezones
alidnsaccess_key_id, access_key_id_file, access_key_secret, access_key_secret_file, security_token, security_token_file, region_idzones
dnspodsecret_id, secret_id_file, secret_key, secret_key_file, session_token, session_token_file, regionzones
route53access_key_id, access_key_id_file, secret_access_key, secret_access_key_file, session_token, session_token_file, region, profile, hosted_zone_idzones
huaweicloudaccess_key_id, access_key_id_file, secret_access_key, secret_access_key_file, region_idzones

rustic

キー説明
main_nodes[]stringRustic 操作を実行するノード ID。それぞれ controller.nodes を参照する必要があります。
maintenance.forget_schedulestringrustic forget の cron スケジュール。
maintenance.prune_schedulestringrustic prune の cron スケジュール。

notifications.alertmanager

キー説明
enabledboolセクションが存在する場合、デフォルトで有効。
listen_pathstringWebhook パス。デフォルトは /api/v1/alerts/ で始まる必要があります。

notifications.smtp

キー有効時に必須説明
enabledboolいいえセクションが存在する場合、デフォルトで有効。
hoststringはいSMTP ホスト。
portintはいSMTP ポート(1 から 65535)。
encryptionstringいいえnonestarttlsssl_tls。デフォルトは starttls
usernamestringいいえSMTP ユーザー名。
passwordstringいいえSMTP パスワード。
password_filestringいいえファイルからパスワードを読み取ります。
fromstringはい送信者アドレス。
to[]stringはい受信者リスト。
on[]stringいいえ通知イベントフィルター。
task_sources[]stringいいえタスクソースフィルター: webcliothersschedulesystem

notifications.telegram

キー有効時に必須説明
enabledboolいいえセクションが存在する場合、デフォルトで有効。
bot_tokenstringはい*Telegram ボットトークン。
bot_token_filestringいいえファイルからボットトークンを読み取ります。
chat_idstringはいターゲットチャット ID。
on[]stringいいえ通知イベントフィルター。
task_sources[]stringいいえタスクソースフィルター。

エージェント設定リファレンス

キー必須説明
controller_addrstringはいエージェントから到達可能なコントローラー URL。
controller_grpcboolいいえHTTP 上の Connect の代わりに gRPC を使用します。
controller_headers[]objectいいえコントローラーに送信される追加の HTTP ヘッダー。
node_idstringはいこのエージェントのノード ID。controller.nodes[].id と一致する必要があります。
tokenstringはい*コントローラー設定と一致するノードトークン。
token_filestringいいえファイルからノードトークンを読み取ります。
repo_dirstringはいエージェントサービスリポジトリのパス。
state_dirstringはいエージェント状態ディレクトリ。
caddyobjectいいえエージェント側の Caddy 設定。

*token または token_file のいずれかを使用し、両方は使用しないでください。

controller_headers[]

キー必須説明
namestringはいHTTP ヘッダー名。ヘッダー名は大文字小文字を区別せずに重複排除されます。
valuestringはい*ヘッダー値。
value_filestringいいえファイルからヘッダー値を読み取ります。

caddy

キー説明
generated_dirstring生成された Caddy 設定ディレクトリ。デフォルトは <state_dir>/caddy/generated

Web 環境変数

Web サーバーは環境変数を読み取ります。Docker Compose ではこれらは .env を通じて設定されます。

変数必須説明
WEB_CONTROLLER_ADDRはいWeb サーバープロセスからのコントローラーアドレス。Docker Compose では http://controller:7001
WEB_BROWSER_CONTROLLER_ADDRはいブラウザからのコントローラーアドレス。
WEB_CONTROLLER_ACCESS_TOKENはいコントローラーアクセストークン。controller.access_tokens[].token と一致する必要があります。
WEB_CONTROLLER_HEADERSいいえWeb サーバーがコントローラーを呼び出す際に送信する追加ヘッダーの JSON オブジェクト。
WEB_LOGIN_USERNAMEはいWeb ログインユーザー名。
WEB_LOGIN_PASSWORD_HASHはいArgon2 パスワードハッシュ。
WEB_SESSION_SECRETはいランダムなセッション署名シークレット。
ORIGINデプロイ依存Web サーバーの公開オリジン。
HOSTいいえホストバインドアドレス。
PORTいいえWeb サーバーポート。

インライン値と _file

多くのシークレット系フィールドはインライン値とファイル参照の両方をサポートしています。例:

  • token / token_file
  • password / password_file
  • api_token / api_token_file
  • value / value_file

いずれか 1 つの形式のみを使用してください。両方が設定されている場合、起動に失敗します。

最終更新日 • Renovate Bot