跳至内容

配置

本页涵盖安装级别的配置:控制器配置、agent 配置、Web 环境变量和 age 密钥设置。

服务定义位于 composia-meta.yaml 中。请参阅服务指南了解该文件。

配置文件结构

控制器和 agent 使用相同的 YAML 文件格式。一个文件可以包含其中一部分或两部分:

controller:
  # 控制器设置

agent:
  # agent 设置

controlleragent 中至少必须存在一个。

当同一个配置文件包含两部分时,本地 agent 被视为内置节点:

  • agent.node_id 必须为 main
  • 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 access token"

  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: ""

不要保留空的列表项,例如包含空 namecontroller_headers。它们仅用于展示支持的对象结构。

Web 访问令牌和主 agent 令牌必须不同。

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已配置的 agent 节点。该键必须存在,即使为空。

可选顶级键

类型描述
access_tokens[]object用于 Web UI、CLI 和外部客户端的 API 令牌。
backupobject全局备份默认值。
gitobject期望状态仓库的远程同步。
notificationsobjectAlertmanager、SMTP 和 Telegram 通知。
dnsobjectDNS 提供商凭据。
rusticobjectRustic 维护设置。
secretsobjectAge 加密设置。
updatesobject镜像更新默认值和 forge API 认证。
auto_deployobject全局自动部署开关。

nodes[]

类型必填描述
idstring唯一的节点 ID。
display_namestringUI 中显示的名称。
enabledbool禁用节点而不删除配置。
public_ipv4stringDNS 工作流使用的公网 IPv4。
public_ipv6stringDNS 工作流使用的公网 IPv6。
tokenstring是*Agent 认证令牌。
token_filestring从文件读取令牌。

*使用 tokentoken_file,不能同时使用。

access_tokens[]

类型必填描述
namestring令牌名称。
tokenstring是*令牌值。
token_filestring从文件读取令牌。
enabledbool禁用令牌而不删除配置。
commentstring管理备注。

访问令牌不能与节点令牌或其他访问令牌重复。

git

类型必填描述
remote_urlstringGit 远程 URL。
branchstring要同步的分支。
pull_intervalstring条件remote_url 设置时必填。
author_namestring控制器写入的提交作者名。
author_emailstring提交作者邮箱。
auth.usernamestringGit 用户名。
auth.tokenstringGit 令牌。
auth.token_filestring从文件读取 Git 令牌。

secrets

整个部分是可选的。如果该部分存在,以下规则适用:

类型必填描述
providerstring必须为 age
identity_filestringAge 私钥路径。
recipient_filestringAge 接收者文件路径。如果省略,接收者从 identity_file 派生。
armorboolASCII 封装加密输出。默认为 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_tokenapi_token_filezones
alidnsaccess_key_idaccess_key_id_fileaccess_key_secretaccess_key_secret_filesecurity_tokensecurity_token_fileregion_idzones
dnspodsecret_idsecret_id_filesecret_keysecret_key_filesession_tokensession_token_fileregionzones
route53access_key_idaccess_key_id_filesecret_access_keysecret_access_key_filesession_tokensession_token_fileregionprofilehosted_zone_idzones
huaweicloudaccess_key_idaccess_key_id_filesecret_access_keysecret_access_key_fileregion_idzones

rustic

类型描述
main_nodes[]string运行 Rustic 操作的节点 ID 列表。每个都必须引用 controller.nodes
maintenance.forget_schedulestringrustic forget 的 cron 计划。
maintenance.prune_schedulestringrustic prune 的 cron 计划。

notifications.alertmanager

类型描述
enabledbool当该部分存在时默认启用。
listen_pathstringWebhook 路径。默认为 /api/v1/alerts。必须以 / 开头。

notifications.smtp

类型启用时必填描述
enabledbool当该部分存在时默认启用。
hoststringSMTP 主机。
portintSMTP 端口,1 到 65535。
encryptionstringnonestarttlsssl_tls。默认为 starttls
usernamestringSMTP 用户名。
passwordstringSMTP 密码。
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任务来源过滤器。

Agent 配置参考

类型必填描述
controller_addrstringAgent 可访问的控制器 URL。
controller_grpcbool使用 gRPC 而非基于 HTTP 的 Connect。
controller_headers[]object发送给控制器的额外 HTTP 头。
node_idstring此 agent 的节点 ID。必须与 controller.nodes[].id 匹配。
tokenstring是*与控制器配置匹配的节点令牌。
token_filestring从文件读取节点令牌。
repo_dirstringAgent 服务仓库路径。
state_dirstringAgent 状态目录。
caddyobjectAgent 端 Caddy 设置。

*使用 tokentoken_file,不能同时使用。

controller_headers[]

类型必填描述
namestringHTTP 头名称。头名称按不区分大小写去重。
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_HEADERSWeb 服务器调用控制器时发送的额外 HTTP 头的 JSON 对象。
WEB_LOGIN_USERNAMEWeb 登录用户名。
WEB_LOGIN_PASSWORD_HASHArgon2 密码哈希。
WEB_SESSION_SECRET随机会话签名密钥。
ORIGIN视部署而定Web 服务器的公开来源。
HOST主机绑定地址。
PORTWeb 服务器端口。

内联值与 _file

许多类似密钥的字段同时支持内联值和文件引用。例如:

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

只能使用一种形式。如果两者都设置,启动将失败。

最后更新于 • Renovate Bot