Zum Inhalt springen

Konfiguration

Diese Seite behandelt die installationsbezogene Konfiguration: Controller-Konfiguration, Agent-Konfiguration, Web-Umgebungsvariablen und Age-Schlüssel-Einrichtung.

Dienstdefinitionen befinden sich in composia-meta.yaml. Siehe Dienst-Leitfaden für diese Datei.

Aufbau der Konfigurationsdatei

Controller und Agent verwenden dasselbe YAML-Dateiformat. Eine Datei kann einen oder beide Abschnitte enthalten:

controller:
  # Controller-Einstellungen

agent:
  # Agent-Einstellungen

Mindestens einer von controller oder agent muss vorhanden sein.

Wenn dieselbe Konfigurationsdatei beide Abschnitte enthält, wird der lokale Agent als eingebauter Node behandelt:

  • agent.node_id muss main sein.
  • controller.nodes muss einen Eintrag mit id: main enthalten.
  • controller.repo_dir und agent.repo_dir dürfen nicht derselbe Pfad sein.

Vollständige Konfigurationsvorlage

Diese Vorlage zeigt jeden unterstützten installationsbezogenen Schlüssel. Sie ist eine Formreferenz, kein kopierbarer Standard. Entferne Abschnitte, die du nicht verwendest, entferne leere Listeneinträge und verwende entweder Inline-Werte oder _file-Werte für jedes secret-artige Feld.

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

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

Behalte keine leeren Listeneinträge wie controller_headers mit einem leeren name. Sie werden nur zur Dokumentation der unterstützten Objektform gezeigt.

Das Web-Zugriffstoken und das Haupt-Agent-Token müssen unterschiedlich sein.

Age-Schlüssel-Einrichtung

controller.secrets ist optional. Konfiguriere es nur, wenn du Composia-verwaltete verschlüsselte Secrets verwendest.

Wenn controller.secrets konfiguriert ist, ist identity_file erforderlich. recipient_file ist optional. Wenn es weggelassen wird, leitet Composia den Empfänger vom privaten Schlüssel ab.

Generiere einen privaten Schlüssel:

age-keygen -o age-identity.key

Optionale Empfängerdatei:

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

Verwende den privaten Schlüssel in der Konfiguration:

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

Oder verwende beide Dateien:

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

armor ist optional und standardmäßig true.

Controller-Konfigurationsreferenz

Erforderliche Schlüssel

SchlüsselTypBeschreibung
listen_addrstringController-Listening-Adresse, zum Beispiel ":7001" oder "127.0.0.1:7001".
repo_dirstringPfad des Sollzustand-Git-Repositories.
state_dirstringController-Zustandspfad.
log_dirstringAufgabenprotokoll-Verzeichnis.
nodes[]objectKonfigurierte Agent-Nodes. Der Schlüssel muss vorhanden sein, auch wenn leer.

Optionale Schlüssel der obersten Ebene

SchlüsselTypBeschreibung
access_tokens[]objectAPI-Tokens für Web-UI, CLI und externe Clients.
backupobjectGlobale Backup-Standardwerte.
gitobjectRemote-Synchronisation des Sollzustand-Repositories.
notificationsobjectAlertmanager-, SMTP- und Telegram-Benachrichtigungen.
dnsobjectDNS-Provider-Anmeldeinformationen.
rusticobjectRustic-Wartungseinstellungen.
secretsobjectAge-Verschlüsselungseinstellungen.
updatesobjectImage-Update-Standardwerte und Forge-API-Auth.
auto_deployobjectGlobale Auto-Deploy-Umschalter.

nodes[]

SchlüsselTypErforderlichBeschreibung
idstringJaEindeutige Node-ID.
display_namestringNeinIn der UI angezeigter Name.
enabledboolNeinDeaktiviert einen Node, ohne ihn zu entfernen.
public_ipv4stringNeinÖffentliche IPv4, die von DNS-Workflows verwendet wird.
public_ipv6stringNeinÖffentliche IPv6, die von DNS-Workflows verwendet wird.
tokenstringJa*Agent-Auth-Token.
token_filestringNeinLiest das Token aus einer Datei.

*Verwende entweder token oder token_file, nicht beides.

access_tokens[]

SchlüsselTypErforderlichBeschreibung
namestringJaToken-Name.
tokenstringJa*Token-Wert.
token_filestringNeinLiest das Token aus einer Datei.
enabledboolNeinDeaktiviert ein Token, ohne es zu entfernen.
commentstringNeinAdministrativer Hinweis.

Zugriffstokens dürfen Node-Tokens oder andere Zugriffstokens nicht duplizieren.

git

SchlüsselTypErforderlichBeschreibung
remote_urlstringNeinGit-Remote-URL.
branchstringNeinZu synchronisierender Branch.
pull_intervalstringBed.Erforderlich, wenn remote_url gesetzt ist.
author_namestringNeinCommit-Autor-Name für Controller-Schreibvorgänge.
author_emailstringNeinCommit-Autor-E-Mail.
auth.usernamestringNeinGit-Benutzername.
auth.tokenstringNeinGit-Token.
auth.token_filestringNeinLiest Git-Token aus einer Datei.

secrets

Dieser gesamte Abschnitt ist optional. Wenn der Abschnitt vorhanden ist, gelten diese Regeln:

SchlüsselTypErforderlichBeschreibung
providerstringJaMuss age sein.
identity_filestringJaPfad zum privaten Age-Schlüssel.
recipient_filestringNeinPfad zur Age-Empfängerdatei. Wenn weggelassen, wird der Empfänger von identity_file abgeleitet.
armorboolNeinASCII-Armor-verschlüsselte Ausgabe. Standardmäßig true.

backup

SchlüsselTypBeschreibung
default_schedulestringStandard-Cron-Zeitplan für Dienst-Backups.

updates

SchlüsselTypBeschreibung
default_check_schedulestringStandard-Cron-Zeitplan für Image-Update-Prüfungen.
auto_applyboolWendet Updates standardmäßig automatisch an.
backup_before_updateboolSichert Daten vor dem Anwenden von Updates.
digest_pinboolFixiert Images per Digest.
semver.default_allow[]stringErlaubte Semver-Sprungstufen: patch, minor, major.
forge_auth.githubobject oder []objectGitHub-API-Auth.
forge_auth.gitlabobject oder []objectGitLab-API-Auth.
forge_auth.forgejoobject oder []objectForgejo-API-Auth.

Jeder Forge-Auth-Eintrag unterstützt:

SchlüsselTypBeschreibung
urlstringForge-Basis-URL.
tokenstringAPI-Token.
token_filestringLiest API-Token aus einer Datei.
api_urlstringAPI-URL-Override.

auto_deploy

SchlüsselTypBeschreibung
infraboolInfrastrukturdienste nach Git-Änderungen automatisch deployen.
servicesboolReguläre Dienste nach Git-Änderungen automatisch deployen.

dns

Provider-SchlüsselAnmeldeschlüsselGemeinsame Schlüssel
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

SchlüsselTypBeschreibung
main_nodes[]stringNode-IDs, die Rustic-Operationen ausführen. Jede muss auf controller.nodes verweisen.
maintenance.forget_schedulestringCron-Zeitplan für rustic forget.
maintenance.prune_schedulestringCron-Zeitplan für rustic prune.

notifications.alertmanager

SchlüsselTypBeschreibung
enabledboolStandardmäßig aktiviert, wenn der Abschnitt existiert.
listen_pathstringWebhook-Pfad. Standardmäßig /api/v1/alerts. Muss mit / beginnen.

notifications.smtp

SchlüsselTypErforderlich wenn aktiviertBeschreibung
enabledboolNeinStandardmäßig aktiviert, wenn der Abschnitt existiert.
hoststringJaSMTP-Host.
portintJaSMTP-Port, 1 bis 65535.
encryptionstringNeinnone, starttls oder ssl_tls. Standardmäßig starttls.
usernamestringNeinSMTP-Benutzername.
passwordstringNeinSMTP-Passwort.
password_filestringNeinLiest Passwort aus einer Datei.
fromstringJaAbsenderadresse.
to[]stringJaEmpfängerliste.
on[]stringNeinBenachrichtigungsereignisfilter.
task_sources[]stringNeinAufgabenquellenfilter: web, cli, others, schedule, system.

notifications.telegram

SchlüsselTypErforderlich wenn aktiviertBeschreibung
enabledboolNeinStandardmäßig aktiviert, wenn der Abschnitt existiert.
bot_tokenstringJa*Telegram-Bot-Token.
bot_token_filestringNeinLiest Bot-Token aus einer Datei.
chat_idstringJaZiel-Chat-ID.
on[]stringNeinBenachrichtigungsereignisfilter.
task_sources[]stringNeinAufgabenquellenfilter.

Agent-Konfigurationsreferenz

SchlüsselTypErforderlichBeschreibung
controller_addrstringJaVom Agenten aus erreichbare Controller-URL.
controller_grpcboolNeinVerwendet gRPC anstelle von Connect über HTTP.
controller_headers[]objectNeinZusätzliche HTTP-Header, die an den Controller gesendet werden.
node_idstringJaNode-ID dieses Agenten. Muss mit controller.nodes[].id übereinstimmen.
tokenstringJa*Node-Token, das mit der Controller-Konfiguration übereinstimmt.
token_filestringNeinLiest Node-Token aus einer Datei.
repo_dirstringJaAgent-Dienst-Repository-Pfad.
state_dirstringJaAgent-Zustandsverzeichnis.
caddyobjectNeinAgent-seitige Caddy-Einstellungen.

*Verwende entweder token oder token_file, nicht beides.

controller_headers[]

SchlüsselTypErforderlichBeschreibung
namestringJaHTTP-Header-Name. Header-Namen werden case-insensitiv dedupliziert.
valuestringJa*Header-Wert.
value_filestringNeinLiest Header-Wert aus einer Datei.

caddy

SchlüsselTypBeschreibung
generated_dirstringGeneriertes Caddy-Konfigurationsverzeichnis. Standardmäßig <state_dir>/caddy/generated.

Web-Umgebungsvariablen

Der Webserver liest Umgebungsvariablen. In Docker Compose werden diese über .env gesetzt.

VariableErforderlichBeschreibung
WEB_CONTROLLER_ADDRJaController-Adresse aus Sicht des Webserver-Prozesses. In Docker Compose: http://controller:7001.
WEB_BROWSER_CONTROLLER_ADDRJaController-Adresse aus Sicht des Browsers.
WEB_CONTROLLER_ACCESS_TOKENJaController-Zugriffstoken. Muss mit controller.access_tokens[].token übereinstimmen.
WEB_CONTROLLER_HEADERSNeinJSON-Objekt mit zusätzlichen Headern, die der Webserver beim Aufruf des Controllers sendet.
WEB_LOGIN_USERNAMEJaWeb-Login-Benutzername.
WEB_LOGIN_PASSWORD_HASHJaArgon2-Passwort-Hash.
WEB_SESSION_SECRETJaZufälliges Sitzungs-Signierungsgeheimnis.
ORIGINDeployment-abhängigÖffentlicher Ursprung des Webservers.
HOSTNeinHost-Bind-Adresse.
PORTNeinWebserver-Port.

Inline-Werte und _file-Werte

Viele secret-artige Felder unterstützen sowohl Inline-Werte als auch Dateireferenzen. Beispiele:

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

Verwende nur eine Form. Wenn beide gesetzt sind, schlägt der Start fehl.

Zuletzt aktualisiert am • Renovate Bot