1) Prérequis
- Un VPS OVH (Debian 12/13) avec accès SSH.
- Nom de domaine nicolas-sapin.fr (registrar OVH).
- Site statique (HTML/CSS/JS) prêt à être servi depuis
/var/www/nico-cv/. - Nginx installé :
sudo apt update && sudo apt install -y nginx - Certbot + plugin Nginx :
sudo apt install -y certbot python3-certbot-nginx
2) Upload des fichiers
Depuis Windows (WinSCP)
Hôte : @IP
Utilisateur : debian
Mot de passe : <votre mdp>
Dossier distant : /var/www/nico-cv/
Depuis Linux / PowerShell (SCP)
scp -r /chemin/local/cvsite/public/* mrobot@IP:/var/www/nico-cv/
Permissions (si besoin) :
sudo chown -R www-data:www-data /var/www/nico-cv
sudo find /var/www/nico-cv -type d -exec chmod 755 {} \;
sudo find /var/www/nico-cv -type f -exec chmod 644 {} \;
3) DNS OVH
- Créer un enregistrement A pour
nicolas-sapin.fr→@IP du site - (Option) créer A pour
www→@IP du site
Vérifier :
nslookup nicolas-sapin.fr
dig +short A nicolas-sapin.fr
4) Nginx — vhost initial (HTTP)
Créer le vhost :
sudo nano /etc/nginx/sites-available/nicolas-sapin.fr
server {
listen 80;
listen [::]:80;
server_name nicolas-sapin.fr www.nicolas-sapin.fr;
root /var/www/nico-cv;
index index.html;
access_log /var/log/nginx/nicolas-sapin_access.log;
error_log /var/log/nginx/nicolas-sapin_error.log;
location / {
try_files $uri $uri/ =404;
}
}
sudo ln -s /etc/nginx/sites-available/nicolas-sapin.fr /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
5) Activer HTTPS (Let’s Encrypt)
Générer et configurer le certificat automatiquement :
sudo certbot --nginx -d nicolas-sapin.fr -d www.nicolas-sapin.fr
Tester la tâche de renouvellement :
sudo certbot renew --dry-run
Note : si erreur
options-ssl-nginx.conf introuvable, laisser certbot --nginx régénérer le bloc SSL. Éviter de référencer manuellement des chemins Let’s Encrypt tant que le package ne les a pas créés.
6) Vhost propre (redirect + headers + cache)
Pour un vhost « propre » (après Certbot), vous pouvez utiliser ce modèle :
server {
listen 80;
listen [::]:80;
server_name nicolas-sapin.fr www.nicolas-sapin.fr;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name nicolas-sapin.fr www.nicolas-sapin.fr;
root /var/www/nico-cv;
index index.html;
# Certbot gère ces chemins (ne pas modifier manuellement)
ssl_certificate /etc/letsencrypt/live/nicolas-sapin.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nicolas-sapin.fr/privkey.pem;
# Sécurité (basique)
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
# Static & cache
location ~* \.(?:css|js|png|jpg|jpeg|gif|ico|svg|webp|pdf|woff2?)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000, immutable";
try_files $uri =404;
}
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/nicolas-sapin_access.log;
error_log /var/log/nginx/nicolas-sapin_error.log;
}
sudo nginx -t && sudo systemctl reload nginx
7) Dépannage (issues rencontrées)
- Permission denied en SCP : créer le dossier distant, ajuster propriétaire/droits (
www-dataou votre user) ; ou uploader avec WinSCP en Sudo si possible. - 404 sur PDF / assets : vérifier la directive
rootet les chemins relatifs (./assets/...vs/assets/...). - options-ssl-nginx.conf manquant : relancer
certbot --nginxpour insérer le bon snippet SSL. - Nginx KO au reload :
sudo nginx -tpuissudo journalctl -xeu nginxetsudo tail -n 100 /var/log/nginx/*_error.log. - DNS pas propagé : vérifier OVH, attendre la propagation, tester avec
dig/nslookup. - Firewall : ouvrir ports 80/443 (UFW) :
sudo ufw allow 'Nginx Full'.
8) Vérifications rapides
curl -I http://nicolas-sapin.fr
curl -I https://nicolas-sapin.fr
Et contrôles navigateur : cadenas TLS, redirection HTTP→HTTPS, pas d’erreurs console, 200 sur /assets/*, pas de cookies non voulus.
← Retour aux réalisations
OVH
Debian
Nginx
Let’s Encrypt