Objectif du tutoriel

Cette documentation explique comment déployer un site web HTML statique sur un serveur Linux (Debian 13) avec :

  • Serveur web Nginx
  • Certificat SSL gratuit Let’s Encrypt (Certbot)
  • Accès sécurisé en HTTPS
  • Structure propre adaptée production CroustyCloud

Architecture cible

bash
Internet ↓ DNS (domaine client) ↓ Nginx (VPS CroustyCloud) ↓ /var/www/mon-site ↓ Site HTML statique

Configuration DNS

Afin de pouvoir annoncer que le nom de domaine pointe vers l'adresse IP de votre VPS, il sera nécessaire de vous connecter sur votre gestion de DNS (OVH, Ionos, LWS). Après vous être connecté, vous devrez aller dans la gestion des Zone DNS et y ajouter l'entrée ci-dessous :

Type Nom Valeur
A @ IP_VPS
CNAME www mondomaine.com

La propagation de cette modification peut prendre de 5 minutes à 24h


Connexion au serveur

Afin de pouvoir effectuer la configuration de Nginx, il nous est nécessaire de se connecter via la connexion SSH sécurisée :

bash
ssh root@IP_DU_SERVEUR

Mise à jour système

Il est ensuite recommandé après la connexion de vérifier les mises à jours des packages de Linux via la commande ci-dessous qui les met à jours automatiquement :

bash
apt update && apt upgrade -y

Installation de Nginx

Nous allons une fois les mises à jour effectuées, installer Nginx :

bash
apt install nginx -y

Comme pour tout site internet, nous aimerions qu'il soit de nouveau en ligne après le redémarrage du VPS, c'est donc pour cela que nous effectuons une activation du service Nginx au démarrage (souvent déjà effectuée lors de l'installation) :

bash
systemctl enable nginx systemctl start nginx systemctl status nginx

Structure du site

Afin de pouvoir importer les fichiers de notre site internet, nous devons créer le dossier à cet effet :
Le chemin avec "mon-site" peut être modifié en fonction du nom de votre site internet (ex: /var/www/portfolio)

bash
mkdir -p /var/www/mon-site

Nous devons par la suite accorder les permissions à Nginx sur notre fichier pour qu'il puisse lire les fichiers html :

bash
chown -R www-data:www-data /var/www/mon-site chmod -R 755 /var/www/mon-site

Déploiement du site HTML

Maintenant nous passons à l'étape où nous déposons les fichiers de notre site internet. Pour ce faire, nous allons devoir utiliser un logiciel SFTP (ex: FileZilla, WinSCP)

Vous pouvez également utiliser le logiciel Termius qui permets de se connecter en SSH ainsi que en SFTP

Une fois sur le logiciel, vous devrez renseigner les informations de connexion :

  • Identifiant : root (ou l'identifiant de votre VPS)
  • Mot de passe : password123
  • Port : 22

Une fois connecté, nous allons ensuite pouvoir accéder au dossier concerné. En général, lors de la connexion, vous serez sur le dossier /root. Pour pouvoir accéder au dossier en question, vous devrez cliquer sur "..." se trouvant en haut de la liste des dossiers.

Une fois dans le dossier /var/www/mon-site, vous pourrez glisser et déposer les fichiers/dossiers de votre site internet HTML.


Configuration Nginx (Virtual Host)

Nous passons ensuite à la configuration de Nginx qui est donc notre serveur Web. Pour ce faire, nous allons nous rendre dans le fichier de configuration dédié à notre site internet grâce à la commande ci-dessous.

Pour débuter, nous allons supprimer la configuration par défaut de nginx.

bash
rm /etc/nginx/sites-enabled/default

Une fois cela effectuée, nous pouvons passer à notre configuration

le nom "mon-site" doit correspondre au nom de votre site internet et vous permettra de mieux vous y retrouver

bash
nano /etc/nginx/sites-available/mon-site

Une fois dans l'edition du fichier, vous pourrez y coller la configuration ci-dessous en adaptant les éléments suivant :

  • mondomaine.com => Effectuer le remplacement avec votre domaine à vous
  • /var/www/mon-site => Effectuer le changement avec le lien de votre dossier précédement créé
  • /var/log/nginx/mon-site => Ce chemin est celui qui vous permettra de lire les logs en cas de problème sur votre site internet
nginx
server { listen 80; server_name mondomaine.com wwww.mondomaine.com; root /var/www/mon-site; index index.html; location / { try_files $uri $uri/ =404; } access_log /var/log/nginx/mon-site.access.log; error_log /var/log/nginx/mon-site.error.log; }

Une fois la configuration terminée, vous pouvez fermer l'edition nano en faisant la commande CRTL+X et taper Y puis la touche "entrée".


Activation du site

Il est ensuite nécessaire d'activer la configuration afin de mettre le site en ligne.

Pensez à nouveau de changer le chemin de votre configuration

bash
ln -s /etc/nginx/sites-available/mon-site /etc/nginx/sites-enabled/

Nous allons ensuite tester la configuration afin de vérifier qu'aucune erreur n'est présente :

bash
nginx -t

Nous rechargeons ensuite la configuration afin de prendre en compte nos modifications :

bash
systemctl reload nginx

Certificat SSL (HTTPS)

Tout le monde aime avoir un site en https, c'est possible grâce LetsEncrypt ! Pour pouvoir le faire, nous allons installer certbot qui est une solution très simple à utiliser pour la génération et le renouvellement des certificats :

bash
apt install certbot python3-certbot-nginx -y

Une fois l'installation effectuée, nous devons lancer la génération du certificat. Et comme vous pouvez le voir dans la commande ci-dessous, il y a l'argument "--nginx" qui lui permet d'aller récupéré la configuration que nous avons précédement effectuée et l'adapter automatique avec le certificat.

bash
certbot --nginx -d mondomaine.com -d www.mondomaine.com

Renouvellement automatique

Nous pouvons ensuite tester le renouvellement automatique :

bash
certbot renew --dry-run

Logs & supervision

Si vous souhaitez lire les fichiers de log de votre site internet en cas de problème, vous pouvez le faire via les commandes suivantes :

La commande ci-dessous lit les logs de toutes les requêtes effectuées sur le site internet

bash
tail -f /var/log/nginx/mon-site.access.log

La commande ci-dessous est la

bash
tail -f /var/log/nginx/mon-site.error.log

Commandes utiles

Redémarrer Nginx :

bash
systemctl restart nginx

Recharger la configuration :

bash
systemctl reload nginx

Tester la configuration :

bash
nginx -t

Bonnes pratiques CroustyCloud

  • Toujours activer HTTPS
  • Isoler chaque site internet dans /var/www/
  • Logs séparés par domaine
  • Sauvegarde /etc/nginx/

Des problèmes sont présents ?

En cas de problème :

  • vérifier DNS
  • vérifier nginx -t
  • vérifier ports 80/443 ouverts
  • vérifier firewall