Documentation

Large workspace de services

Gardez une grande liste de services lisible avec des conventions partagées et des défauts globaux.

Quand utiliser cet exemple

Utilisez ce pattern quand un monorepo contient beaucoup de services locaux mais qu’ils suivent tous la même convention de lancement. Le but est de rendre la liste de processus simple et prévisible.

Exemple

[global]
log_mode = "both"
log_format = "json"
env_file = ".env"
before = ["./tools/prebuild-services.sh"]

[global.readiness]
type = "log"

[global.readiness.ready]
pattern = "service_ready"

[global.log_template]
stdout_preset = "rust"
stderr_preset = "rust"

[[process]]
name = "billing-public"
command = "./tools/run_service.sh billing-public"

[[process]]
name = "billing-grpc"
command = "./tools/run_service.sh billing-grpc"

[[process]]
name = "billing-worker-rollup"
command = "./tools/run_service.sh billing-worker-rollup"

[[process]]
name = "iam-public"
command = "./tools/run_service.sh iam-public"

[[process]]
name = "iam-grpc"
command = "./tools/run_service.sh iam-grpc"

[[process]]
name = "iam-outbox-worker"
command = "./tools/run_service.sh iam-outbox-worker"

[[process]]
name = "notifications-email-send"
command = "./tools/run_service.sh notifications-email-send"

[process.log_template]
stdout_preset = "email"
stderr_preset = "email"

Pourquoi cela fonctionne

Le fichier reste lisible parce que la plupart du comportement est global:

  • une convention de launcher
  • un fichier env partage
  • un signal de readiness partage
  • un template de logs par défaut

Les entrées processus déclarent seulement le nom stable et la commande. Les exceptions restent locales, comme le template de logs spécifique aux emails.

Valeurs par défaut utiles ici

  • instances : défaut 1
  • process.readiness : hérite de global.readiness
  • process.log_template : hérite de global.log_template
  • process.log_mode : hérite de global.log_mode
  • process.log_format : hérite de global.log_format
  • show_timestamps : valeur effective par défaut true

Ce qu’il faut personnaliser

  • Choisissez une convention de launcher utilisable par tous les services.
  • Gardez des noms de processus stables ; ils deviennent des cibles de restart, des lignes de status et des identifiants de logs.
  • Utilisez les réglages globaux pour le comportement commun.
  • Gardez les exceptions explicites et proches du processus qui en a besoin.
  • Ajoutez des groupes pour l’organisation TUI et des labels pour les filtres de démarrage transverses.

Voir aussi