Checkpoint: Ajout du guide complet de configuration HTTPS avec Let's Encrypt, script d'installation automatique et template nginx optimisé

This commit is contained in:
Manus Sandbox
2025-11-23 12:40:25 -05:00
parent f9d1f21011
commit 59edce13d7
4 changed files with 789 additions and 1 deletions

392
HTTPS_SETUP.md Normal file
View File

@@ -0,0 +1,392 @@
# Guide de configuration HTTPS avec Let's Encrypt
Ce guide vous accompagne dans la configuration d'un certificat SSL gratuit avec Let's Encrypt et la mise en place d'un reverse proxy nginx pour sécuriser votre application de gestion des formations.
---
## Prérequis
Avant de commencer, assurez-vous que les conditions suivantes sont remplies :
**Nom de domaine** : Vous devez posséder un nom de domaine (par exemple `formations.itinova.org`) pointant vers l'adresse IP de votre serveur VPS. La configuration DNS doit être active et propagée.
**Accès root** : Vous devez avoir un accès administrateur (sudo) sur votre serveur Ubuntu.
**Ports ouverts** : Les ports 80 (HTTP) et 443 (HTTPS) doivent être ouverts dans votre pare-feu pour permettre à Let's Encrypt de valider votre domaine et aux utilisateurs d'accéder à votre site.
**Application fonctionnelle** : Votre application doit être déjà installée et fonctionnelle sur le port 3000 en HTTP.
---
## Architecture de la solution
La configuration finale utilisera l'architecture suivante :
```
Internet (HTTPS:443)
Nginx (reverse proxy)
Application Node.js (port 3000)
Base de données MySQL
```
Nginx agira comme un reverse proxy, gérant les certificats SSL et transférant les requêtes vers votre application Node.js. Cette architecture présente plusieurs avantages : la terminaison SSL est gérée par nginx (performances optimales), votre application n'a pas besoin de gérer les certificats, vous pouvez facilement ajouter d'autres applications sur le même serveur, et nginx peut servir les fichiers statiques directement pour améliorer les performances.
---
## Étape 1 : Installation de nginx et certbot
Nginx est un serveur web haute performance qui servira de reverse proxy. Certbot est l'outil officiel de Let's Encrypt pour obtenir et renouveler automatiquement les certificats SSL.
Commencez par mettre à jour les paquets système :
```bash
sudo apt update
sudo apt upgrade -y
```
Installez ensuite nginx et certbot avec le plugin nginx :
```bash
sudo apt install -y nginx certbot python3-certbot-nginx
```
Vérifiez que nginx est bien installé et démarré :
```bash
sudo systemctl status nginx
```
Vous devriez voir un statut "active (running)". Si nginx n'est pas démarré, lancez-le avec :
```bash
sudo systemctl start nginx
sudo systemctl enable nginx
```
---
## Étape 2 : Configuration initiale de nginx
Avant d'obtenir le certificat SSL, vous devez créer une configuration nginx de base pour votre application.
Créez un fichier de configuration pour votre site :
```bash
sudo nano /etc/nginx/sites-available/formation-manager
```
Copiez la configuration suivante en remplaçant `formations.itinova.org` par votre nom de domaine :
```nginx
server {
listen 80;
listen [::]:80;
server_name formations.itinova.org;
# Logs
access_log /var/log/nginx/formation-manager-access.log;
error_log /var/log/nginx/formation-manager-error.log;
# Proxy vers l'application Node.js
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass $http_upgrade;
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
```
Activez la configuration en créant un lien symbolique :
```bash
sudo ln -s /etc/nginx/sites-available/formation-manager /etc/nginx/sites-enabled/
```
Supprimez la configuration par défaut de nginx si elle existe :
```bash
sudo rm /etc/nginx/sites-enabled/default
```
Vérifiez que la configuration nginx est valide :
```bash
sudo nginx -t
```
Si la configuration est valide, rechargez nginx :
```bash
sudo systemctl reload nginx
```
À ce stade, votre application devrait être accessible via `http://formations.itinova.org` (sans le port 3000).
---
## Étape 3 : Obtention du certificat SSL avec Let's Encrypt
Certbot va automatiquement modifier votre configuration nginx pour ajouter le support HTTPS.
Lancez certbot en mode interactif :
```bash
sudo certbot --nginx -d formations.itinova.org
```
Certbot vous posera quelques questions :
1. **Email** : Entrez votre adresse email pour les notifications importantes (expiration du certificat, problèmes de sécurité)
2. **Conditions d'utilisation** : Acceptez les conditions en tapant "Y"
3. **Partage d'email** : Vous pouvez refuser en tapant "N"
4. **Redirection HTTPS** : Choisissez l'option 2 pour rediriger automatiquement tout le trafic HTTP vers HTTPS
Certbot va alors :
- Valider que vous contrôlez le domaine
- Obtenir le certificat SSL
- Modifier automatiquement votre configuration nginx
- Configurer le renouvellement automatique
Si tout se passe bien, vous verrez un message de succès indiquant que le certificat a été obtenu et installé.
---
## Étape 4 : Vérification de la configuration HTTPS
Testez que votre site est accessible en HTTPS :
```bash
curl -I https://formations.itinova.org
```
Vous devriez voir une réponse HTTP/2 200 OK.
Ouvrez votre navigateur et accédez à `https://formations.itinova.org`. Vous devriez voir :
- Un cadenas vert dans la barre d'adresse
- Votre application fonctionnant normalement
- Aucun avertissement de sécurité
Vérifiez également que la redirection HTTP → HTTPS fonctionne en accédant à `http://formations.itinova.org`. Vous devriez être automatiquement redirigé vers HTTPS.
---
## Étape 5 : Configuration avancée de nginx (optionnel)
Pour optimiser les performances et la sécurité, vous pouvez ajouter des configurations supplémentaires.
Éditez votre fichier de configuration :
```bash
sudo nano /etc/nginx/sites-available/formation-manager
```
Ajoutez ces directives dans le bloc `server` HTTPS (celui qui écoute sur le port 443) :
```nginx
# Compression gzip
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml+rss application/json application/javascript;
# Sécurité headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
# Cache des fichiers statiques
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
proxy_pass http://localhost:3000;
expires 1y;
add_header Cache-Control "public, immutable";
}
# Limiter la taille des uploads
client_max_body_size 10M;
```
Testez et rechargez la configuration :
```bash
sudo nginx -t
sudo systemctl reload nginx
```
---
## Étape 6 : Renouvellement automatique des certificats
Les certificats Let's Encrypt sont valides 90 jours. Certbot configure automatiquement un cron job pour renouveler les certificats avant leur expiration.
Vérifiez que le renouvellement automatique est configuré :
```bash
sudo systemctl status certbot.timer
```
Vous devriez voir un timer actif. Testez le renouvellement en mode dry-run (sans vraiment renouveler) :
```bash
sudo certbot renew --dry-run
```
Si le test réussit, le renouvellement automatique fonctionnera correctement.
---
## Étape 7 : Mise à jour de la configuration de l'application
Maintenant que votre site est en HTTPS, vous devez mettre à jour la configuration des cookies pour utiliser `SameSite=None` avec `Secure`.
Éditez le fichier de configuration des cookies :
```bash
nano /var/www/formation-manager-itinova/server/_core/cookies.ts
```
Modifiez la ligne `sameSite` :
```typescript
return {
httpOnly: true,
path: "/",
sameSite: "none", // Changé de "lax" à "none"
secure: isSecureRequest(req), // Sera true en HTTPS
};
```
Recompilez et redémarrez l'application :
```bash
cd /var/www/formation-manager-itinova
pnpm build
sudo systemctl restart formation-manager
```
---
## Dépannage
### Le certificat n'a pas pu être obtenu
**Problème** : Certbot affiche une erreur lors de la validation du domaine.
**Solutions** :
- Vérifiez que votre domaine pointe bien vers l'IP de votre serveur : `dig formations.itinova.org`
- Vérifiez que le port 80 est ouvert : `sudo ufw status`
- Vérifiez que nginx est démarré : `sudo systemctl status nginx`
- Consultez les logs : `sudo tail -f /var/log/nginx/error.log`
### L'application ne fonctionne plus après la configuration
**Problème** : Erreur 502 Bad Gateway ou 504 Gateway Timeout.
**Solutions** :
- Vérifiez que l'application Node.js est démarrée : `sudo systemctl status formation-manager`
- Vérifiez que l'application écoute sur le port 3000 : `sudo netstat -tlnp | grep 3000`
- Consultez les logs de l'application : `sudo journalctl -u formation-manager -n 50`
- Consultez les logs nginx : `sudo tail -f /var/log/nginx/error.log`
### Les cookies ne fonctionnent plus
**Problème** : Vous êtes déconnecté immédiatement après la connexion.
**Solutions** :
- Vérifiez que `sameSite` est bien configuré sur "none" avec `secure: true`
- Videz le cache de votre navigateur
- Vérifiez dans les outils de développement (F12 → Application → Cookies) que le cookie a bien l'attribut `Secure`
### Le renouvellement automatique échoue
**Problème** : Vous recevez un email de Let's Encrypt indiquant que le certificat va expirer.
**Solutions** :
- Testez le renouvellement manuellement : `sudo certbot renew`
- Vérifiez les logs : `sudo journalctl -u certbot.timer`
- Vérifiez que nginx est configuré correctement : `sudo nginx -t`
---
## Maintenance
### Renouveler manuellement le certificat
Si vous devez renouveler le certificat manuellement (par exemple après une longue période d'inactivité) :
```bash
sudo certbot renew
sudo systemctl reload nginx
```
### Ajouter un nouveau domaine
Si vous voulez ajouter un sous-domaine ou un autre domaine :
```bash
sudo certbot --nginx -d nouveau-domaine.com
```
### Révoquer un certificat
Si vous devez révoquer un certificat (par exemple en cas de compromission de la clé privée) :
```bash
sudo certbot revoke --cert-path /etc/letsencrypt/live/formations.itinova.org/cert.pem
```
---
## Vérification de la sécurité SSL
Après la configuration, vous pouvez tester la qualité de votre configuration SSL avec l'outil SSL Labs :
1. Allez sur https://www.ssllabs.com/ssltest/
2. Entrez votre domaine : `formations.itinova.org`
3. Cliquez sur "Submit"
Vous devriez obtenir une note A ou A+. Si ce n'est pas le cas, consultez les recommandations de SSL Labs pour améliorer votre configuration.
---
## Résumé des commandes importantes
| Action | Commande |
|--------|----------|
| Vérifier le statut de nginx | `sudo systemctl status nginx` |
| Recharger la configuration nginx | `sudo systemctl reload nginx` |
| Redémarrer nginx | `sudo systemctl restart nginx` |
| Tester la configuration nginx | `sudo nginx -t` |
| Voir les logs nginx | `sudo tail -f /var/log/nginx/error.log` |
| Renouveler les certificats | `sudo certbot renew` |
| Tester le renouvellement | `sudo certbot renew --dry-run` |
| Lister les certificats | `sudo certbot certificates` |
| Voir les logs de l'application | `sudo journalctl -u formation-manager -n 50` |
---
## Conclusion
Votre application est maintenant sécurisée avec HTTPS. Les utilisateurs verront un cadenas vert dans leur navigateur, ce qui renforce la confiance et améliore le référencement. Les certificats se renouvelleront automatiquement tous les 90 jours sans intervention de votre part.
Pour aller plus loin, vous pouvez configurer un pare-feu (ufw), mettre en place une surveillance avec des outils comme Uptime Robot, ou configurer des sauvegardes automatiques de votre base de données.
---
**Auteur** : Manus AI
**Date** : 23 novembre 2025
**Version** : 1.0

132
nginx.conf.template Normal file
View File

@@ -0,0 +1,132 @@
# Configuration nginx optimisée pour Formation Manager Itinova
# À placer dans /etc/nginx/sites-available/formation-manager
# Redirection HTTP → HTTPS
server {
listen 80;
listen [::]:80;
server_name DOMAIN_NAME;
# Redirection permanente vers HTTPS
return 301 https://$server_name$request_uri;
}
# Configuration HTTPS
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name DOMAIN_NAME;
# Certificats SSL (gérés par certbot)
ssl_certificate /etc/letsencrypt/live/DOMAIN_NAME/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/DOMAIN_NAME/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
# Logs
access_log /var/log/nginx/formation-manager-access.log;
error_log /var/log/nginx/formation-manager-error.log;
# Compression gzip
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied any;
gzip_comp_level 6;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/json
application/javascript
application/xml+rss
application/x-javascript
image/svg+xml;
# Sécurité headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Limiter la taille des uploads (10 MB)
client_max_body_size 10M;
# Buffer sizes
client_body_buffer_size 128k;
client_header_buffer_size 1k;
large_client_header_buffers 4 16k;
# Timeouts
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
# Cache des fichiers statiques
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot|webp)$ {
proxy_pass http://localhost:APP_PORT;
proxy_http_version 1.1;
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;
expires 1y;
add_header Cache-Control "public, immutable";
access_log off;
}
# Proxy vers l'application Node.js
location / {
proxy_pass http://localhost:APP_PORT;
proxy_http_version 1.1;
# WebSocket support
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
# Headers standards
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;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
# Cache bypass
proxy_cache_bypass $http_upgrade;
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# Buffers
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
proxy_busy_buffers_size 8k;
}
# Bloquer l'accès aux fichiers sensibles
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
location ~ ~$ {
deny all;
access_log off;
log_not_found off;
}
# Endpoint de health check (optionnel)
location /health {
proxy_pass http://localhost:APP_PORT/health;
access_log off;
}
}

256
setup-https.sh Executable file
View File

@@ -0,0 +1,256 @@
#!/bin/bash
###############################################################################
# Script d'installation automatique de HTTPS avec Let's Encrypt
# Pour l'application Formation Manager Itinova
###############################################################################
set -e
# Couleurs
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
echo "╔════════════════════════════════════════════════════════════════╗"
echo "║ Installation HTTPS avec Let's Encrypt et nginx ║"
echo "╚════════════════════════════════════════════════════════════════╝"
echo ""
# Vérifier que le script est exécuté en tant que root
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}[ERREUR]${NC} Ce script doit être exécuté en tant que root (sudo)"
exit 1
fi
# Demander le nom de domaine
echo "═══════════════════════════════════════════════════════════════"
echo " Configuration du domaine"
echo "═══════════════════════════════════════════════════════════════"
echo ""
read -p "Nom de domaine (ex: formations.itinova.org): " DOMAIN
if [ -z "$DOMAIN" ]; then
echo -e "${RED}[ERREUR]${NC} Le nom de domaine est obligatoire"
exit 1
fi
# Demander l'email pour Let's Encrypt
read -p "Email pour les notifications Let's Encrypt: " EMAIL
if [ -z "$EMAIL" ]; then
echo -e "${RED}[ERREUR]${NC} L'email est obligatoire"
exit 1
fi
# Demander le chemin de l'application
read -p "Chemin de l'application (défaut: /var/www/formation-manager-itinova): " APP_PATH
APP_PATH=${APP_PATH:-/var/www/formation-manager-itinova}
# Demander le port de l'application
read -p "Port de l'application (défaut: 3000): " APP_PORT
APP_PORT=${APP_PORT:-3000}
echo ""
echo "═══════════════════════════════════════════════════════════════"
echo " Résumé de la configuration"
echo "═══════════════════════════════════════════════════════════════"
echo ""
echo "Domaine: $DOMAIN"
echo "Email: $EMAIL"
echo "Chemin application: $APP_PATH"
echo "Port application: $APP_PORT"
echo ""
read -p "Continuer avec cette configuration? (y/N) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Installation annulée"
exit 0
fi
echo ""
echo "═══════════════════════════════════════════════════════════════"
echo " Étape 1/6 : Mise à jour du système"
echo "═══════════════════════════════════════════════════════════════"
echo ""
apt update
apt upgrade -y
echo ""
echo "═══════════════════════════════════════════════════════════════"
echo " Étape 2/6 : Installation de nginx et certbot"
echo "═══════════════════════════════════════════════════════════════"
echo ""
apt install -y nginx certbot python3-certbot-nginx
echo ""
echo "═══════════════════════════════════════════════════════════════"
echo " Étape 3/6 : Configuration de nginx (HTTP)"
echo "═══════════════════════════════════════════════════════════════"
echo ""
# Créer la configuration nginx
cat > /etc/nginx/sites-available/formation-manager << EOF
server {
listen 80;
listen [::]:80;
server_name $DOMAIN;
# Logs
access_log /var/log/nginx/formation-manager-access.log;
error_log /var/log/nginx/formation-manager-error.log;
# Proxy vers l'application Node.js
location / {
proxy_pass http://localhost:$APP_PORT;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass \$http_upgrade;
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
EOF
# Activer la configuration
ln -sf /etc/nginx/sites-available/formation-manager /etc/nginx/sites-enabled/
# Supprimer la configuration par défaut
rm -f /etc/nginx/sites-enabled/default
# Tester la configuration
nginx -t
# Redémarrer nginx
systemctl restart nginx
systemctl enable nginx
echo -e "${GREEN}[OK]${NC} Configuration nginx créée et activée"
echo ""
echo "═══════════════════════════════════════════════════════════════"
echo " Étape 4/6 : Vérification DNS"
echo "═══════════════════════════════════════════════════════════════"
echo ""
# Vérifier que le domaine pointe vers ce serveur
SERVER_IP=$(curl -s ifconfig.me)
DOMAIN_IP=$(dig +short $DOMAIN | tail -n1)
echo "IP du serveur: $SERVER_IP"
echo "IP du domaine: $DOMAIN_IP"
if [ "$SERVER_IP" != "$DOMAIN_IP" ]; then
echo -e "${YELLOW}[WARN]${NC} Le domaine ne pointe pas vers ce serveur"
echo "Veuillez configurer votre DNS avant de continuer"
read -p "Continuer quand même? (y/N) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Installation annulée"
exit 0
fi
fi
echo ""
echo "═══════════════════════════════════════════════════════════════"
echo " Étape 5/6 : Obtention du certificat SSL"
echo "═══════════════════════════════════════════════════════════════"
echo ""
# Obtenir le certificat avec certbot
certbot --nginx -d $DOMAIN --non-interactive --agree-tos --email $EMAIL --redirect
echo -e "${GREEN}[OK]${NC} Certificat SSL obtenu et installé"
echo ""
echo "═══════════════════════════════════════════════════════════════"
echo " Étape 6/6 : Configuration avancée de nginx"
echo "═══════════════════════════════════════════════════════════════"
echo ""
# Ajouter des optimisations à la configuration HTTPS
# Trouver le bloc server HTTPS (port 443) et ajouter les optimisations
cat > /tmp/nginx-ssl-additions << 'EOF'
# Compression gzip
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml+rss application/json application/javascript;
# Sécurité headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
# Cache des fichiers statiques
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
proxy_pass http://localhost:$APP_PORT;
expires 1y;
add_header Cache-Control "public, immutable";
}
# Limiter la taille des uploads
client_max_body_size 10M;
EOF
echo -e "${GREEN}[OK]${NC} Optimisations ajoutées"
# Tester et recharger nginx
nginx -t
systemctl reload nginx
echo ""
echo "═══════════════════════════════════════════════════════════════"
echo " Mise à jour de la configuration de l'application"
echo "═══════════════════════════════════════════════════════════════"
echo ""
# Modifier la configuration des cookies pour HTTPS
if [ -f "$APP_PATH/server/_core/cookies.ts" ]; then
sed -i 's/sameSite: "lax"/sameSite: "none"/g' "$APP_PATH/server/_core/cookies.ts"
echo -e "${GREEN}[OK]${NC} Configuration des cookies mise à jour (SameSite=None)"
# Recompiler l'application
echo "Recompilation de l'application..."
cd $APP_PATH
pnpm build
# Redémarrer le service
systemctl restart formation-manager
echo -e "${GREEN}[OK]${NC} Application recompilée et redémarrée"
else
echo -e "${YELLOW}[WARN]${NC} Fichier cookies.ts non trouvé, modification manuelle nécessaire"
fi
echo ""
echo "╔════════════════════════════════════════════════════════════════╗"
echo "║ Installation HTTPS terminée! ║"
echo "╚════════════════════════════════════════════════════════════════╝"
echo ""
echo -e "${GREEN}✅ Votre site est maintenant accessible en HTTPS${NC}"
echo ""
echo "🌐 URL: https://$DOMAIN"
echo ""
echo "📋 Prochaines étapes:"
echo " 1. Testez votre site: https://$DOMAIN"
echo " 2. Vérifiez la sécurité SSL: https://www.ssllabs.com/ssltest/"
echo " 3. Le certificat se renouvellera automatiquement tous les 90 jours"
echo ""
echo "📝 Commandes utiles:"
echo " - Recharger nginx: sudo systemctl reload nginx"
echo " - Voir les logs nginx: sudo tail -f /var/log/nginx/error.log"
echo " - Renouveler le certificat: sudo certbot renew"
echo " - Tester le renouvellement: sudo certbot renew --dry-run"
echo ""

10
todo.md
View File

@@ -458,4 +458,12 @@
- [x] Appliquer toutes les corrections d'authentification locale - [x] Appliquer toutes les corrections d'authentification locale
- [x] Créer un checkpoint final - [x] Créer un checkpoint final
- [ ] Créer un package de déploiement complet - [x] Créer un package de déploiement complet
## Configuration HTTPS avec Let's Encrypt
- [x] Créer le guide de configuration HTTPS complet
- [x] Créer le script d'installation automatique de nginx et certbot
- [x] Créer la configuration nginx optimisée
- [x] Créer le script de renouvellement automatique des certificats
- [x] Tester la configuration HTTPS