Phase 2 : tripoli-edge, service Rust interne derrière Caddy
- tripoli-edge (hyper/tokio bas niveau, pas de framework type axum) : /healthz, /metrics (Prometheus, compteurs à la main), reverse-proxy vers tripoli-api avec vrais 502 tant que ce service n'existe pas (Phase 3), logs JSON structurés par requête. - Écoute sur 127.0.0.1 + 172.17.0.1 (passerelle docker0), jamais sur l'interface publique - même pattern que le Nginx de VoltVision déjà sur ce serveur. - Déployé en prod : systemd (utilisateur système dédié, sans privilège), bloc Caddy ajouté pour tripoli.cloud/www.tripoli.cloud, règle ufw ajoutée (Ansible) pour que Caddy puisse joindre le port 9000 - sans quoi le chemin INPUT de l'hôte bloque le trafic inter-bridges même vers 172.17.0.1. - Vérifié bout-en-bout via https://tripoli.cloud, sans régression sur les 6 autres domaines déjà servis par ce Caddy. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
2fa16083c3
commit
8f70c2aae7
12 changed files with 1219 additions and 1 deletions
25
tripoli-edge/deploy/Caddyfile.snippet
Normal file
25
tripoli-edge/deploy/Caddyfile.snippet
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# Bloc ajouté à /opt/edge/Caddyfile sur le serveur (fichier partagé avec
|
||||
# les 6 autres projets hébergés, donc pas dans ce dépôt en entier — voir
|
||||
# le README de ce dossier).
|
||||
#
|
||||
# Pourquoi Caddy et pas tripoli-edge lui-même sur 80/443 : les ports 80 et
|
||||
# 443 appartiennent déjà à ce Caddy. tripoli-edge est un service interne
|
||||
# (172.17.0.1:9000, passerelle docker0, jamais exposé publiquement) :
|
||||
# Caddy fait TLS/ACME et le routage par Host, tripoli-edge fait le reste.
|
||||
|
||||
tripoli.cloud, www.tripoli.cloud {
|
||||
reverse_proxy 172.17.0.1:9000
|
||||
|
||||
header {
|
||||
Strict-Transport-Security "max-age=31536000; includeSubDomains"
|
||||
X-Content-Type-Options "nosniff"
|
||||
X-Frame-Options "SAMEORIGIN"
|
||||
Referrer-Policy "strict-origin-when-cross-origin"
|
||||
-Server
|
||||
}
|
||||
|
||||
log {
|
||||
output file /var/log/caddy/tripoli-cloud.log
|
||||
format json
|
||||
}
|
||||
}
|
||||
25
tripoli-edge/deploy/tripoli-edge.service
Normal file
25
tripoli-edge/deploy/tripoli-edge.service
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
[Unit]
|
||||
Description=tripoli-edge - service interne derrière Caddy pour tripoli.cloud
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=tripoli
|
||||
Group=tripoli
|
||||
ExecStart=/usr/local/bin/tripoli-edge
|
||||
Restart=on-failure
|
||||
RestartSec=2
|
||||
Environment=RUST_LOG=info
|
||||
Environment=TRIPOLI_EDGE_LISTEN=127.0.0.1:9000,172.17.0.1:9000
|
||||
Environment=TRIPOLI_API_UPSTREAM=127.0.0.1:8081
|
||||
|
||||
# Un utilisateur système dédié, sans shell, plutôt que root : ce service
|
||||
# n'a besoin d'aucun privilège (pas de port <1024, pas d'accès disque
|
||||
# hors ses propres logs via journald).
|
||||
NoNewPrivileges=true
|
||||
ProtectSystem=strict
|
||||
ProtectHome=true
|
||||
PrivateTmp=true
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Loading…
Add table
Add a link
Reference in a new issue