2 min de lecture

Déploiement & HTTPS

PgArachne est conçu pour faire une seule tâche bien : API Gateway. Pour le SSL/TLS (HTTPS), la sécurité des en-têtes et le routage public, vous devriez placer un Reverse Proxy devant.

Option A : Serveur Caddy

Idéal pour : Déploiements de production modernes, facilité d’utilisation.

Caddy est le seul serveur web qui obtient et renouvelle les certificats SSL (Let’s Encrypt) automatiquement par défaut. Il ne nécessite presque aucune configuration.

# Caddyfile
example.com {
    reverse_proxy localhost:8080
}

Option B : Nginx

Idéal pour : Environnements d’entreprise, routage complexe.

Nginx est la norme industrielle pour l’équilibrage de charge (load balancing) haute performance. Utilisez-le si vous avez déjà une infrastructure Nginx. Vous devrez gérer Certbot manuellement.

server {
    server_name example.com;
    location / {
        proxy_pass http://localhost:8080;
    }
}

Option C : Ngrok

Idéal pour : Développement local, Démos, tests de Webhook.

Ngrok crée un tunnel sécurisé depuis l’internet public directement vers votre ordinateur portable sans configurer de pare-feu. Idéal pour montrer votre travail à des collègues instantanément.

./ngrok http 8080

Checklist de production

  • Terminez TLS sur le reverse proxy et transférez X-Forwarded-Proto et X-Forwarded-For.
  • Définissez TRUSTED_PROXIES dans PgArachne avec les plages IP/CIDR de vos proxies.
  • Désactivez le buffering sur les routes SSE et utilisez des read timeouts assez longs pour le streaming.
  • Exposez les métriques uniquement en interne (défaut 127.0.0.1:9090) et scrapez depuis le réseau de monitoring.

Exemple de hardening Nginx (SSE + headers forwarded)

location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

location /sse/ {
    proxy_pass http://127.0.0.1:8080;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffering off;
    proxy_read_timeout 1h;
}