Nous avons introduit dans l’épisode 1 ce que nous allons faire (apprendre à construire des sites web dont le backend est en langage C).
Dans cet épisode 2 nous allons installer le serveur web NginX et le configurer de sorte qu’il soit en mesure de faire tourner des unités de traitement écrites en C.

Sur le serveur, dans un shell bash, nous allons taper :
1) Installer les paquets nécessaires :
sudo apt-get update
sudo apt-get install nginx fcgiwrap
2) Paramétrer le serveur web Nginx :
sudo cp /usr/share/doc/fcgiwrap/examples/nginx.conf /etc/nginx/fcgiwrap.conf
sudo mkdir /usr/lib/cgi-bin
sudo nano /etc/nginx/sites-available/default
Dans la rubrique “server” du fichier, il faut ajouter la ligne ci-dessous juste après l’accolade fermante de location
include fcgiwrap.conf;
Relancer Nginx :
sudo service nginx restart
3) Vérifier maintenant que NginX est capable d'exécuter un script CGI :
sudo nano /usr/lib/cgi-bin/test
Mettre dans ce fichier /usr/lib/cgi-bin/test.cgi le contenu suivant :
#!/bin/bash
echo "Content-Type: text/html"
echo
echo "<html><body>Succes</body></html>"
Puis changer les paramétrages de droits et de propriétaires de ce fichier :
sudo chown www-data.www-data /usr/lib/cgi-bin/test
sudo chmod 755 /usr/lib/cgi-bin/test
Si la page d'URL http://serveur/cgi-bin/test affiche bien à l'écran le mot "Succes", tout est Ok, NginX est installé et sait gérer des unités de traitements scripts CGI.
Activer le https sur NginX
C’est facultatif mais préférable, car sans https vos futures applications web écrites en C pourront voir vos login et mots de passe se faire voler pendant leur transit entre les clients et le serveur. Autant dire que sans https, la sécurité en prendrait un sacré coup. Nous verrons d’ailleurs ultérieurement comment vérifier depuis vos futurs scripts en C que le https est bien actif.
Le premier problème à résoudre est d’avoir un nom de domaine. En effet, les certificats https émis par les autorités de certification certifient un nom de domaine donné.
Si vous disposez déjà d’un nom de domaine, passez à la section suivante.
Vous n’avez pas de nom de domaine. Deux choix s’offrent à vous : en acheter un auprès d’un registrar qui a pignon sur rue (OVH, LWS, …) ou prendre un fournisseur de noms de domaines gratuits. Si vos futures applications web ont pour but d’être utilisées par des clients ou si l’URL doit paraître pro pour toute autre raison, il faut acheter un nom de domaine qui claque à un registrar.
Si par contre votre serveur ne va servir qu’à vous ou si son URL n’est pas prévu d’apparaître dans vos futures applications, vous pouvez prendre un nom de domaine gratuit (mais son nom claque beaucoup moins comme nous allons le voir).
Deux registrars gratuits sont sollicités par les personnes qui ont des VPS qui ont besoin de https sans nom de domaine au look pro, qui ont besoin d’un nom de domaine officiel mais gratuit.
Le premier est noip (https://noip.com) : avec ce fournisseur de noms de domaine gratuits, on peut obtenir des noms dans des domaines comme ddns.net (toto.ddns.net par exemple, enfin si personne n’a pris ce nom de domaine avant vous), no-ip.biz, hopto.org ou zapto.org. Noip fonctionne très bien sur un VPS Linux : une fois le nom de domaine créé sur le site, on télécharge un client Linux appelé noip-duc qui se charge de contacter à échéances régulières les serveurs de noip.com de sorte que l’association nom/adresse_ip reste à jour.
Noip n’est pas un service philanthropique, et son offre gratuite n’est qu’un produit d’appel pour l’offre payante, qui elle permet de disposer de noms de domaine pro, qui claquent bien. En conséquence, les noms de domaine gratuits sont limités à 3, et il faut cliquer sur un lien tous les mois pour prolonger la validité d’un mois. Son utilisation est donc pénible.
Heureusement, il y a maintenant la possibilité d’utiliser duckdns (https://duckdns.org) à la place de noip. Duckdns fait la même chose que noip, mais il n’y a pas besoin de venir revalider le nom de domaine après sa création, et chaque compte (on peut se connecter via l’authentification Google) dispose de 5 noms de domaines gratuits.

Pour créer un nom de domaine, il faut se connecter au site www.duckdns.org, puis se connecter avec Google.

On choisit alors un nom de domaine dans le domaine duckdns.org, et on clique sur le bouton « Add domain ». Le nom de domaine nous est alors attribué (s’il est libre).
Duckdns fournit un agent à installer sur notre VPS. Cet agent aura besoin de 2 informations pour fonctionner : le nom de domaine qu’on a choisi, et le token qui est associé à notre compte Duckdns. Le token apparait en haut à droite de la page web. Il faut noter ce token, on en aura besoin.
Voilà, à ce stade nous avons un nom de domaine gratuit (ou payant si vous vous êtes adressé à un registrar pour un nom de domaine pro) pour notre VPS.
Pour activer notre site web sur notre VPS avec ce nom de domaine, il nous reste à :
- Installer l’agent Duckdns sur le VPS
- Enregistrer notre serveur web couplé à son nom de domaine chez un prestataire de certificats https, qui sera Letsencrypt.
L’étape 1 peut être faite en installant directement l’agent, mais aussi en installant l’agent dans un conteneur docker, qui est une meilleure solution.
Dans un répertoire dédié, on crée donc un fichier docker-compose.yml, dans lequel on met (remplacer votre_domaine.duckdns.org par le vôtre et votre_token par le vôtre) :
services:
duckdns:
image: lscr.io/linuxserver/duckdns:latest
container_name: duckdns
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Paris
- SUBDOMAINS=votre_domaine.duckdns.org
- TOKEN=votre_token
- UPDATE_IP=ipv4
volumes:
- ./config:/config
restart: unless-stopped
Lancer le service duckdns par la commande :
docker compose up -d
Activation du https
Maintenant que notre serveur répond sur son nom de domaine, il faut reprendre le paramétrage de NginX pour y activer le https pour ce nom de domaine. Comme mentionné ci-dessus nous allons utiliser les certificats fournis par Letsencrypt, qui est gratuit (marche sur n’importe quel nom de domaine, qu’il soit pro acheté ou amateur gratuit).
Pour cela, dans un shell bash sur le serveur, nous allons taper :
sudo apt install snapd
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx
Une fois ceci fait, on peut tester à blanc que le renouvellement automatique de certificat Let’s encrypt est fonctionnel par la commande :
sudo certbot renew --dry-run
La page https://nom_de_domaine_du_serveur doit être maintenant fonctionnelle, et les certificats https se renouvelleront tous seuls, sans intervention.
Voilà, mission accomplie, notre serveur comporte maintenant un serveur web NginX opérationnel en https et apte à exécuter des scripts CGI.
Dans l’épisode 3 nous verrons comment écrire nos premiers scripts en C.
Stay tuned 😎
