Aller au contenu

Configuration

Cette page couvre la configuration au niveau de l’installation : configuration du contrôleur, configuration de l’agent, variables d’environnement web et configuration des clés age.

Les définitions de service résident dans composia-meta.yaml. Voir le Guide des services pour ce fichier.

Structure du fichier de configuration

Le contrôleur et l’agent utilisent le même format de fichier YAML. Un fichier peut contenir l’une ou l’autre section, ou les deux :

controller:
  # paramètres du contrôleur

agent:
  # paramètres de l'agent

Au moins l’un de controller ou agent doit être présent.

Lorsque le même fichier de configuration contient les deux sections, l’agent local est traité comme le nœud intégré :

  • agent.node_id doit être main.
  • controller.nodes doit inclure une entrée avec id: main.
  • controller.repo_dir et agent.repo_dir ne doivent pas être le même chemin.

Modèle de configuration complet

Ce modèle montre chaque clé prise en charge au niveau de l’installation. C’est une référence de structure, pas un défaut à copier-coller. Supprimez les sections que vous n’utilisez pas, supprimez les éléments de liste vides et utilisez soit des valeurs en ligne, soit des valeurs _file pour chaque champ de type secret.

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

Ne conservez pas les éléments de liste vides comme controller_headers avec un name vide. Ils sont affichés uniquement pour documenter la structure d’objet prise en charge.

Le jeton d’accès web et le jeton d’agent principal doivent être différents.

Configuration des clés age

controller.secrets est optionnel. Configurez-le uniquement si vous utilisez les secrets chiffrés gérés par Composia.

Lorsque controller.secrets est configuré, identity_file est requis. recipient_file est optionnel. S’il est omis, Composia dérive le destinataire de la clé privée.

Générez une clé privée :

age-keygen -o age-identity.key

Fichier de destinataires optionnel :

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

Utilisez la clé privée dans la configuration :

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

Ou utilisez les deux fichiers :

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

armor est optionnel et vaut true par défaut.

Référence de configuration du contrôleur

Clés requises

CléTypeDescription
listen_addrstringAdresse d’écoute du contrôleur, par exemple ":7001" ou "127.0.0.1:7001".
repo_dirstringChemin du dépôt Git d’état désiré.
state_dirstringChemin d’état du contrôleur.
log_dirstringRépertoire des journaux de tâches.
nodes[]objectNœuds d’agent configurés. La clé doit être présente, même si vide.

Clés optionnelles de niveau supérieur

CléTypeDescription
access_tokens[]objectJetons API pour l’interface web, la CLI et les clients externes.
backupobjectValeurs par défaut globales de sauvegarde.
gitobjectSynchronisation distante du dépôt d’état désiré.
notificationsobjectNotifications Alertmanager, SMTP et Telegram.
dnsobjectIdentifiants des fournisseurs DNS.
rusticobjectParamètres de maintenance Rustic.
secretsobjectParamètres de chiffrement age.
updatesobjectValeurs par défaut de mise à jour d’images et authentification des API forges.
auto_deployobjectBascule globales de déploiement automatique.

nodes[]

CléTypeRequisDescription
idstringOuiID unique du nœud.
display_namestringNonNom affiché dans l’interface.
enabledboolNonDésactiver un nœud sans le supprimer.
public_ipv4stringNonIPv4 publique utilisée par les workflows DNS.
public_ipv6stringNonIPv6 publique utilisée par les workflows DNS.
tokenstringOui*Jeton d’authentification de l’agent.
token_filestringNonLire le jeton depuis un fichier.

*Utilisez soit token, soit token_file, pas les deux.

access_tokens[]

CléTypeRequisDescription
namestringOuiNom du jeton.
tokenstringOui*Valeur du jeton.
token_filestringNonLire le jeton depuis un fichier.
enabledboolNonDésactiver un jeton sans le supprimer.
commentstringNonNote administrative.

Les jetons d’accès ne doivent pas dupliquer les jetons de nœud ou d’autres jetons d’accès.

git

CléTypeRequisDescription
remote_urlstringNonURL du dépôt Git distant.
branchstringNonBranche à synchroniser.
pull_intervalstringCond.Requis lorsque remote_url est défini.
author_namestringNonNom de l’auteur des commits pour les écritures du contrôleur.
author_emailstringNonE-mail de l’auteur des commits.
auth.usernamestringNonNom d’utilisateur Git.
auth.tokenstringNonJeton Git.
auth.token_filestringNonLire le jeton Git depuis un fichier.

secrets

Cette section entière est optionnelle. Si la section est présente, ces règles s’appliquent :

CléTypeRequisDescription
providerstringOuiDoit être age.
identity_filestringOuiChemin de la clé privée age.
recipient_filestringNonChemin du fichier de destinataires age. Si omis, le destinataire est dérivé de identity_file.
armorboolNonSortie chiffrée en armure ASCII. Par défaut true.

backup

CléTypeDescription
default_schedulestringPlanification cron par défaut pour les sauvegardes de service.

updates

CléTypeDescription
default_check_schedulestringPlanification cron par défaut pour les vérifications de mise à jour d’images.
auto_applyboolAppliquer les mises à jour automatiquement par défaut.
backup_before_updateboolSauvegarder les données avant d’appliquer les mises à jour.
digest_pinboolÉpingler les images par empreinte.
semver.default_allow[]stringNiveaux d’incrément semver autorisés : patch, minor, major.
forge_auth.githubobject ou []objectAuthentification API GitHub.
forge_auth.gitlabobject ou []objectAuthentification API GitLab.
forge_auth.forgejoobject ou []objectAuthentification API Forgejo.

Chaque entrée d’authentification forge prend en charge :

CléTypeDescription
urlstringURL de base de la forge.
tokenstringJeton API.
token_filestringLire le jeton API depuis un fichier.
api_urlstringRemplacement de l’URL de l’API.

auto_deploy

CléTypeDescription
infraboolDéployer automatiquement les services d’infrastructure après des modifications Git.
servicesboolDéployer automatiquement les services ordinaires après des modifications Git.

dns

Clé fournisseurClés d’identifiantsClés communes
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

CléTypeDescription
main_nodes[]stringIDs des nœuds qui exécutent les opérations Rustic. Chacun doit référencer controller.nodes.
maintenance.forget_schedulestringPlanification cron pour rustic forget.
maintenance.prune_schedulestringPlanification cron pour rustic prune.

notifications.alertmanager

CléTypeDescription
enabledboolActivé par défaut lorsque la section existe.
listen_pathstringChemin du webhook. Par défaut /api/v1/alerts. Doit commencer par /.

notifications.smtp

CléTypeRequis si activéDescription
enabledboolNonActivé par défaut lorsque la section existe.
hoststringOuiHôte SMTP.
portintOuiPort SMTP, de 1 à 65535.
encryptionstringNonnone, starttls ou ssl_tls. Par défaut starttls.
usernamestringNonNom d’utilisateur SMTP.
passwordstringNonMot de passe SMTP.
password_filestringNonLire le mot de passe depuis un fichier.
fromstringOuiAdresse de l’expéditeur.
to[]stringOuiListe des destinataires.
on[]stringNonFiltres d’événements de notification.
task_sources[]stringNonFiltres de source de tâche : web, cli, others, schedule, system.

notifications.telegram

CléTypeRequis si activéDescription
enabledboolNonActivé par défaut lorsque la section existe.
bot_tokenstringOui*Jeton du bot Telegram.
bot_token_filestringNonLire le jeton du bot depuis un fichier.
chat_idstringOuiID de la discussion cible.
on[]stringNonFiltres d’événements de notification.
task_sources[]stringNonFiltres de source de tâche.

Référence de configuration de l’agent

CléTypeRequisDescription
controller_addrstringOuiURL du contrôleur accessible depuis l’agent.
controller_grpcboolNonUtiliser gRPC au lieu de Connect sur HTTP.
controller_headers[]objectNonEn-têtes HTTP supplémentaires envoyés au contrôleur.
node_idstringOuiID de nœud de cet agent. Doit correspondre à controller.nodes[].id.
tokenstringOui*Jeton de nœud correspondant à la configuration du contrôleur.
token_filestringNonLire le jeton de nœud depuis un fichier.
repo_dirstringOuiChemin du dépôt de services de l’agent.
state_dirstringOuiRépertoire d’état de l’agent.
caddyobjectNonParamètres Caddy côté agent.

*Utilisez soit token, soit token_file, pas les deux.

controller_headers[]

CléTypeRequisDescription
namestringOuiNom de l’en-tête HTTP. Les noms d’en-tête sont dédupliqués sans tenir compte de la casse.
valuestringOui*Valeur de l’en-tête.
value_filestringNonLire la valeur de l’en-tête depuis un fichier.

caddy

CléTypeDescription
generated_dirstringRépertoire de configuration Caddy généré. Par défaut <state_dir>/caddy/generated.

Variables d’environnement web

Le serveur web lit les variables d’environnement. Dans Docker Compose, celles-ci sont définies via .env.

VariableRequiseDescription
WEB_CONTROLLER_ADDROuiAdresse du contrôleur depuis le processus du serveur web. Dans Docker Compose : http://controller:7001.
WEB_BROWSER_CONTROLLER_ADDROuiAdresse du contrôleur depuis le navigateur.
WEB_CONTROLLER_ACCESS_TOKENOuiJeton d’accès au contrôleur. Doit correspondre à controller.access_tokens[].token.
WEB_CONTROLLER_HEADERSNonObjet JSON d’en-têtes supplémentaires envoyés par le serveur web lors des appels au contrôleur.
WEB_LOGIN_USERNAMEOuiNom d’utilisateur de connexion web.
WEB_LOGIN_PASSWORD_HASHOuiHachage de mot de passe Argon2.
WEB_SESSION_SECRETOuiSecret aléatoire de signature de session.
ORIGINDépend du déploiementOrigine publique du serveur web.
HOSTNonAdresse de liaison de l’hôte.
PORTNonPort du serveur web.

Valeurs en ligne et valeurs _file

De nombreux champs de type secret prennent en charge à la fois les valeurs en ligne et les références de fichiers. Exemples :

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

Utilisez une seule forme. Si les deux sont définies, le démarrage échoue.

Dernière modification • Renovate Bot