Nginx¶
Vue d'ensemble¶
Nginx fonctionne comme conteneur Docker sur le VPS. Il sert de reverse proxy et de terminaison TLS pour tous les projets.
Configuration¶
Emplacement des fichiers¶
/root/projects/nginx-config/devops-epiapp/
├── nginx.conf # Configuration principale
├── sites-enabled/ # Configurations des sites
│ ├── alert-parent-backend.conf
│ ├── alert-parent-frontend.conf
│ ├── grafana.conf
│ ├── uptime-kuma.conf
│ └── ...
└── ssl/
├── wildcard-chained.epitools.pem # Certificat wildcard (fullchain)
└── wildcardkey.epitools.pem # Clé privée
Certificat SSL wildcard¶
Un certificat wildcard *.epitools.bj est utilisé pour tous les sous-domaines. Il couvre automatiquement tout nouveau service sans avoir à générer un certificat supplémentaire.
Template de configuration¶
Pour ajouter un nouveau service, créer un fichier dans sites-enabled/ :
server {
listen 443 ssl;
server_name mon-projet.epitools.bj;
ssl_certificate /etc/nginx/ssl/wildcard-chained.epitools.pem;
ssl_certificate_key /etc/nginx/ssl/wildcardkey.epitools.pem;
location / {
proxy_pass http://host.docker.internal:PORT_HOTE;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# Redirection HTTP → HTTPS
server {
listen 80;
server_name mon-projet.epitools.bj;
return 301 https://$host$request_uri;
}
Avec support WebSocket¶
Pour les services utilisant WebSocket (Uptime Kuma, applications temps réel) :
server {
listen 443 ssl;
server_name mon-projet.epitools.bj;
ssl_certificate /etc/nginx/ssl/wildcard-chained.epitools.pem;
ssl_certificate_key /etc/nginx/ssl/wildcardkey.epitools.pem;
location / {
proxy_pass http://host.docker.internal:PORT_HOTE;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Support WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
listen 80;
server_name mon-projet.epitools.bj;
return 301 https://$host$request_uri;
}
Configurations actuelles¶
| Service | Domaine | Upstream |
|---|---|---|
| Alert-Parent Backend | api.epitools.bj |
127.0.0.1:5011 |
| Alert-Parent Frontend | alert.epitools.bj |
127.0.0.1:3004 |
| Grafana | grafana.epitools.bj |
127.0.0.1:6050 |
| Uptime Kuma | uptime.epitools.bj |
127.0.0.1:6001 |
Tester et recharger¶
# Tester la configuration (vérifier la syntaxe)
docker exec nginx nginx -t
# Recharger sans interruption de service
docker exec nginx nginx -s reload
# Si le conteneur Nginx ne tourne pas
docker start nginx
Dépannage¶
Vérifier les logs Nginx¶
Le site renvoie 502 Bad Gateway¶
Le service en amont ne répond pas :
- Vérifier que le conteneur du service tourne :
docker ps - Vérifier que le port est correct :
curl http://127.0.0.1:PORT/health - Vérifier que
host.docker.internalrésout correctement
Le site renvoie 403 Forbidden¶
Problème de permissions ou de configuration server_name.
Renouveler le certificat SSL¶
Le certificat wildcard doit être renouvelé manuellement. Remplacer les fichiers dans /root/projects/nginx-config/devops-epiapp/ssl/ puis recharger Nginx.