Reverse proxy
Composia s’intègre avec Caddy pour la gestion du reverse proxy. Le service d’infrastructure Caddy s’exécute comme un service Docker Compose normal, et Composia synchronise les fichiers de configuration Caddy au déploiement et à l’arrêt.
Architecture
Controller repo
├── caddy/
│ ├── docker-compose.yaml (service Compose Caddy)
│ ├── Caddyfile (configuration Caddy principale, importe les fichiers générés)
│ └── composia-meta.yaml (déclare infra.caddy)
├── my-app/
│ ├── docker-compose.yaml
│ ├── Caddyfile (configuration Caddy spécifique au service)
│ └── composia-meta.yaml (déclare network.caddy)
└── ...Au moment du déploiement, Composia copie le Caddyfile de chaque service dans un répertoire généré, puis déclenche un rechargement Caddy.
Configuration de l’infrastructure
Déclarez exactement un service d’infrastructure Caddy dans le dépôt :
name: caddy
nodes:
- main
infra:
caddy:
compose_service: caddy
config_dir: /etc/caddyLe Caddyfile principal dans le répertoire du service Caddy doit importer les fichiers générés :
import /etc/caddy/generated/*.caddy| Clé | Type | Description |
|---|---|---|
compose_service | string | Nom du service Compose. Par défaut caddy. |
config_dir | string | Répertoire de configuration Caddy à l’intérieur du conteneur. Par défaut /etc/caddy. |
Un seul service dans le dépôt peut être déclaré comme infrastructure Caddy.
Configuration du service
Pour chaque service qui nécessite une entrée de reverse proxy, activez Caddy dans composia-meta.yaml et fournissez un Caddyfile :
name: my-app
nodes:
- main
network:
caddy:
enabled: true
source: CaddyfileLe chemin source est relatif au répertoire du service et doit rester à l’intérieur. Le fichier peut avoir n’importe quel nom, mais Caddyfile est la convention.
app.example.com {
reverse_proxy app:8080
}Fonctionnement de la synchronisation
Pendant une tâche de déploiement ou de mise à jour, l’agent exécute une étape de synchronisation Caddy après compose up :
- Lire
network.caddy.sourcedepuis le fichiercomposia-meta.yamldu service. - Copier le fichier source vers
<agent_state_dir>/caddy/generated/<service_dir>.caddy. - Exécuter
docker compose exec <caddy_service> caddy reload --config <Caddyfile> --adapter caddyfile.
Le nom du fichier généré est dérivé du nom du répertoire du service. Pour my-app, le fichier est my-app.caddy.
Pendant une tâche d’arrêt, le fichier Caddy généré est supprimé.
Tâche de synchronisation Caddy
Une tâche autonome caddy_sync reconstruit la configuration Caddy sans déployer de services. Elle peut fonctionner en deux modes :
Reconstruction complète (full_rebuild: true) : supprime tous les fichiers .caddy générés du répertoire généré, puis resynchronise tous les services gérés par Caddy.
Synchronisation ciblée : synchronise uniquement les répertoires de service spécifiés.
Déclenchez via l’interface web ou la CLI :
composia service caddy-sync my-appTâche de rechargement Caddy
Une tâche caddy_reload exécute caddy reload à l’intérieur du conteneur Caddy sans modifier aucun fichier. Utilisez-la après avoir modifié manuellement le Caddyfile principal :
composia node reload-caddy mainConfiguration de l’agent
La configuration de l’agent a une section Caddy optionnelle :
agent:
caddy:
generated_dir: "/data/state-agent/caddy/generated"| Clé | Type | Description |
|---|---|---|
generated_dir | string | Répertoire de configuration Caddy généré. Par défaut <state_dir>/caddy/generated. |
Le répertoire généré doit être à l’intérieur d’un chemin que le conteneur Caddy peut lire. Le service Compose Caddy doit avoir un volume montant ce répertoire vers le chemin importé dans le Caddyfile principal.