Une seule commande — et un VPS ou un serveur dédié vierge devient en quelques minutes un hébergement web prêt à l’emploi : sans panneau de contrôle, sans paquets superflus et avec une configuration qui prend automatiquement en charge les nouveaux domaines.
Le script est entièrement fonctionnel : les configurations ont été affinées au fil des années et éprouvées sur des centaines de VPS et de serveurs dédiés, et nous les utilisons nous-mêmes au quotidien. Néanmoins, beaucoup dépend de l’hébergeur, de ses réglages et d’autres facteurs externes — veuillez vérifier le bon fonctionnement avant toute mise en production.
Informations#
Ce qu’il fait#
Configure de manière entièrement automatique, à partir de zéro, un VPS ou un serveur dédié pour faire fonctionner un serveur web.
Il installe :
- Nginx
- PHP-FPM versions 7.4 et 8.2 (basculement dans la configuration)
- MariaDB
En quoi c’est utile#
- Automatisation — la configuration universelle vous évite de configurer chaque domaine à la main (détails ci-dessous)
- Sécurité — pas de panneau de contrôle, donc aucun piratage possible du serveur via ses failles
- Système propre — aucun paquet inutile ni logiciel superflu
- Flexibilité — tout peut être configuré finement, y compris des redirections et des transferts complexes au sein du serveur
Qu’est-ce que la configuration universelle#
C’est une configuration de serveur web qui détermine automatiquement à quel domaine la requête est adressée et la dirige vers le bon répertoire. Il suffit de créer dans /var/www/ un dossier portant le nom du domaine (par exemple, /var/www/google.com) et d’y déposer les fichiers — le site fonctionne aussitôt, sans configuration supplémentaire.
Utilisation de base#
Important ! Le script fonctionne à 100 % correctement sur Rocky 9 et, avec une probabilité de 99,99 %, sur CentOS 9. L’utilisation de Rocky 8 ou de CentOS 8 est possible, mais déconseillée.
Serveur propre uniquement ! Aucun LAMP ni autre assemblage préinstallé — uniquement un OS propre. Demandez-le à votre hébergeur.
curl -s https://repo.privateflare.com/webhostscript/webhostscript.bash | bashEn quelques minutes, le serveur sera prêt. Connectez-vous par SFTP (FileZilla, WinSCP, Transmit) et déposez vos pages d’atterrissage et vos sites.
Pour vérifier le bon fonctionnement, dirigez n’importe quel domaine vers l’IP du serveur et ouvrez-le dans un navigateur. Créez au préalable un fichier d’information :
echo "<? phpinfo();" > /var/www/noroot/index.phpAprès la vérification, supprimez-le impérativement :
rm -f /var/www/noroot/index.phpUtilisation avancée#
Toutes les opérations s’effectuent par SFTP : FileZilla (Windows), WinSCP (Windows, recommandé) ou Transmit (macOS).
Utilisation de configurations individuelles pour les domaines#
Utile lorsque, sur un serveur hébergeant des sites vitrines, des pages d’atterrissage et d’autres sites simples, vous devez placer, par exemple, un blog WordPress.
Commencez par modifier la configuration principale de Nginx — elle se trouve dans le répertoire /etc/nginx :
Avant :

Ajoutez la ligne include conf.d/*.conf;. Après :

Rechargez la configuration via la console :
nginx -t && nginx -s reloadCopiez ensuite le modèle nécessaire : host_nossl.conf_ (cet exemple utilise la configuration sans certificats SSL ni HTTPS) vers google.com.conf.
Ouvrez le nouveau fichier google.com.conf et, par un remplacement en masse, remplacez VHOST par votre domaine (google.com). Adaptez le reste à vos besoins. Par exemple, pour WordPress, la configuration ressemblera à ceci :
server {
listen 80;
server_name google.com; # <-- modifié
#access_log off;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log main;
root /var/www/google.com; # <-- modifié
index index.php index.html;
location ~ /.well-known {
root /var/www/noroot;
}
location / {
try_files $uri $uri/ /index.php?$args; # <-- modifié
}
location ~ \.php$ {
index index.php;
include php82.conf; # <-- modifié
}
}Enregistrez le fichier et rechargez les configurations :
nginx -t && nginx -s reloadAprès cela, le blog devrait déjà fonctionner.
Utilisation de certificats SSL (TLS)#
Utile si vous utilisez l’hébergement directement, sans PrivateFlare ni Cloudflare.
Générez le certificat.
Important ! Il arrive que Let’s Encrypt n’émette pas les certificats du premier coup — en raison de travaux de maintenance, d’une propagation incomplète des enregistrements DNS ou pour d’autres raisons. Nous ne sommes pas liés à cette organisation et ne pouvons pas influer sur son fonctionnement. En cas de problème, vérifiez les enregistrements A et réessayez plus tard.
# dans cet exemple google.com est votre domaine, remplacez-le par le vôtre
# user@gmail.com est votre e-mail, remplacez-le également
certbot certonly -d google.com -n --email user@gmail.com --agree-tos --webroot -w /var/www/norootSi le certificat a été généré avec succès, vous verrez un message de ce type :
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/api.param.me/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/api.param.me/privkey.pem
Your cert will expire on 2019-06-27. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"Procédez ensuite de la même manière, mais avec le modèle host_ssl.conf_. La configuration finale ressemblera à ceci :
server {
listen 80;
server_name google.com; # <-- modifié
#access_log off;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log main;
location ~ /.well-known {
root /var/www/noroot;
}
location / {
# try_files $uri $uri/ /index.php?$args;
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
http2 on;
server_name google.com; # <-- modifié
client_max_body_size 32m;
root /var/www/google.com;
index index.php index.html;
ssl_certificate /etc/letsencrypt/live/google.com/fullchain.pem; # <-- modifié
ssl_certificate_key /etc/letsencrypt/live/google.com/privkey.pem; # <-- modifié
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_stapling on;
ssl_stapling_verify on;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log main;
location / {
try_files $uri $uri/ /index.php?$args; # <-- modifié
}
location ~ \.php$ {
index index.php;
include php82.conf;
}
}Créez une tâche cron pour le renouvellement des certificats. Exécutez dans la console la commande :
export EDITOR=nano && crontab -eet ajoutez la ligne :
0 0 1 * * /usr/bin/certbot renew --post-hook "systemctl reload nginx" > /var/log/renewals.logAppuyez sur Control+X et confirmez l’enregistrement avec la touche Y — la tâche est créée.
La configuration est terminée : le serveur fonctionne et les certificats se renouvellent automatiquement.