Le script a rencontré un accueil étonnamment positif de la part de la communauté ; apparemment, un guide de configuration avancée s’impose.

Avertissement : 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 serveurs dédiés. L’auteur les utilise personnellement au quotidien. Cependant, beaucoup dépend de votre hébergeur, de ses configurations et d’autres facteurs externes indépendants. Veuillez vérifier le bon fonctionnement avant toute mise en production !

Informations#

Ce qu’il fait#

Configure entièrement et automatiquement un VPS ou un serveur dédié à partir de zéro 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#

  • Déploie une configuration universelle qui offre d’excellentes possibilités d’automatisation (détails ci-dessous)
  • Votre serveur ne peut pas être piraté via des failles de panneau de contrôle si vous n’avez pas de panneau de contrôle
  • N’encombre pas le système, ne tire pas de paquets inutiles ni d’autres éléments superflus
  • Permet une configuration fine de tous les éléments, y compris des redirections et proxy très astucieux au sein du serveur

Qu’est-ce que la configuration universelle ?#

C’est une configuration de serveur web qui détermine AUTOMATIQUEMENT vers quel domaine la requête est adressée et la redirige vers le bon répertoire. Il vous suffit de créer un dossier dans /var/www/ portant le nom du domaine (par exemple /var/www/google.com), d’y déposer les fichiers, et cela fonctionnera automatiquement ! Sans aucune manipulation ni clic supplémentaire.

Utilisation de base#

IMPORTANT ! Le script fonctionne à 100 % correctement sur Rocky 9, avec une probabilité de 99,99 % sur CentOS 9. L’utilisation de Rocky 8 ou CentOS 8 est déconseillée mais tolérée.

SERVEUR PROPRE UNIQUEMENT ! Aucun LAMP ni autre bundle. UNIQUEMENT L’OS NU ! Exigez un OS propre auprès de votre hébergeur !

curl -s https://repo.privateflare.com/webhostscript/webhostscript.bash | bash

…et en quelques minutes, votre serveur sera prêt. Vous pouvez vous connecter par SFTP avec FileZilla, WinSCP, Transmit et déployer vos pages d’atterrissage, sites et autres.

Pour vérifier le bon fonctionnement, vous pouvez associer n’importe quel domaine à l’IP du serveur et l’ouvrir. Créez au préalable un fichier d’information :

echo "<? phpinfo();" > /var/www/noroot/index.php

N’oubliez pas de le supprimer après vérification !

rm -f /var/www/noroot/index.php

Utilisation avancée#

Toutes les manipulations s’effectuent par SFTP à l’aide de FileZilla (Windows), WinSCP (Windows, recommandé), Transmit (macOS).

Utilisation de configurations individuelles pour les domaines#

Cela peut s’avérer utile lorsque vous souhaitez héberger sur votre serveur, en plus des sites vitrines, pages d’atterrissage ou autres sites simples, par exemple un blog WordPress.

Dans ce cas, commencez par modifier la configuration principale de Nginx. Elle se trouve dans le répertoire /etc/nginx. Modifiez-la :

Avant :

image

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

image

Et rechargez la configuration via la console :

nginx -t && nginx -s reload

Ensuite, copiez la configuration nécessaire à partir du modèle. Copiez host_nossl.conf_ (dans cet exemple, nous utilisons la configuration sans certificats SSL ni https) vers google.com.conf.

Ouvrez le nouveau fichier google.com.conf et commencez par remplacer en masse VHOST par votre domaine (google.com). Ensuite, modifiez selon vos besoins. Par exemple, pour WordPress, cela 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 et rechargez les configurations :

nginx -t && nginx -s reload

Votre blog devrait maintenant fonctionner.

Utilisation de certificats SSL (TLS)#

Cela peut être utile si vous souhaitez utiliser l’hébergement directement, sans PrivateFlare ni Cloudflare.

Générez le certificat.

IMPORTANT ! Let’s Encrypt ne réussit pas toujours du premier coup en raison de travaux de maintenance, de la propagation incomplète des enregistrements NS ou d’autres raisons. Nous ne sommes pas affiliés à cette organisation et ne pouvons pas influencer 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/noroot

Si le certificat a été généré avec succès, vous verrez un message similaire à :

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"

Ensuite, faites la même chose, mais en utilisant 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.

Tapez dans la console la commande :

export EDITOR=nano && crontab -e

et ajoutez-y la ligne :

0 0 1 * * /usr/bin/certbot renew --post-hook "systemctl reload nginx" > /var/log/renewals.log

Appuyez sur Ctrl+X, confirmez l’enregistrement en appuyant sur la touche y, et la tâche est créée.

Voilà, c’est tout. Ce n’est pas compliqué et chacun peut le faire pour dormir tranquille !