Je vous propose cette procédure d'installation sur un serveur linux sous Debian, vous disposerez d'un serveur web propulsé par Apache, prêt à l'emploi avec PHP et HTTPS, dans des conditions de production. Les certificats vous seront fournis pas Let's Encrypt et ils se renouvelleront tous les ans.

J'utilise l'éditeur de texte Nano pour éditer les fichiers de configuration mais libre à vous d'utiliser l'éditeur que vous souhaitez. Vous veillerez à remplacer "www.mon-site.fr" par votre propre nom de domaine dans les différentes configurations qui vous sont proposées.

Installation d'Apache

Pour installer Apache, rien de plus simple, il suffit de taper la commande suivante :

apt  install  apache2  -y

Pour un serveur de production, je vous conseille d'éditer le fichier de configuration de sécurité d'Apache en modifiant la valeur de ServerTokens OS en ServerTokens Prod et ServerSignature On en ServerSignature Off. L'intérêt étant de disposer d'Apache en mode production et de cacher sa "signature" aux utilisateurs pour éviter une attaque ciblée sur une version précise du logiciel.

nano /etc/apache2/conf-available/security.conf

Nous allons ensuite configurer un virtualhost allégé dans un premier temps en attendant de récupérer les certificats SSL par la suite. Éditez le fichier suivant :

nano /etc/apache2/sites-available/www.mon-site.fr.conf

Je vous propose cette configuration  :

ServerTokens Prod
<VirtualHost *:80>
    ServerName www.mon-site.fr
    DocumentRoot "/var/www/html/"
    <Directory "/var/www/html/">
        AllowOverride None
        Require all granted
    </Directory>
    ErrorLog "/var/log/apache2/www.mon-site.fr.error.log"
    CustomLog "/var/log/apache2/www.mon-site.fr.access.log" combined
    ServerSignature Off
</VirtualHost>

Rien de particulier ici, nous initialisons notre serveur web sur le répertoire /var/www/html/ et nous spécifions des fichiers logs pour ce virtualhost. Vous pouvez maintenant appliquer les changements et redémarrer Apache :

rm /etc/apache2/sites-enabled/000-default.conf
ln -s /etc/apache2/sites-available/www.mon-site.fr.conf /etc/apache2/sites-enabled/www.mon-site.fr.conf
a2enmod ssl && a2enmod rewrite && a2enmod headers && a2enmod proxy
systemctl restart apache2

Nous allons maintenant installer les certificats SSL avec Let's Encrypt de façon assez simple via un certbot avec cette suite de commandes :

apt install snapd
snap install core
snap refresh core
apt-get remove certbot
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
certbot certonly --apache
ls /etc/letsencrypt/live/

Avec ces commandes, nous avons installé le service snapd qui nous permet à son tour d'installer certbot (nous nous assurons dans un premier temps que certbot n'est pas déjà installé avec la commande "remove"). Une fois installé, certbot va lire la configuration apache est vous proposer la création de certificats SSL pour le ou les domaines qu'il trouve, ici "www.mon-site.fr". Une fois la procédure terminée, vous pouvez vérifier la présence de ces certificats avec la commande "ls".

Maintenant que nous avons nos certificats, il convient de donner à Apache une configuration plus appropriée qui lui permettra de servir des contenus sous HTTPS. Éditez à nouveau le fichier suivant :

nano /etc/apache2/sites-enabled/www.mon-site.fr.conf

Je vous propose cette nouvelle configuration qui écrasera l'ancienne :

ServerTokens Prod
<VirtualHost *:80>
    ServerName www.mon-site.fr
    DocumentRoot "/var/www/html/"
    <Directory "/var/www/html/">
        AllowOverride None
        Require all granted
    </Directory>
    ErrorLog "/var/log/apache2/www.mon-site.fr.error.log"
    CustomLog "/var/log/apache2/www.mon-site.fr.access.log" combined
    ServerSignature Off
    Redirect permanent / //www.mon-site.fr/
</VirtualHost>
<VirtualHost *:443>
    ServerName www.mon-site.fr
    DocumentRoot "/var/www/html/"
    <Directory "/var/www/html/">
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog "/var/log/apache2/www.mon-site.fr.error.log"
    CustomLog "/var/log/apache2/www.mon-site.fr.access.log" combined
    SSLEngine on
    SSLCertificateFile      /etc/letsencrypt/live/www.mon-site.fr/cert.pem
    SSLCertificateKeyFile   /etc/letsencrypt/live/www.mon-site.fr/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/www.mon-site.fr/fullchain.pem
    ServerSignature Off
    FileETag None
    <IfModule mod_headers.c>
        <Directory />
            Header set X-XSS-Protection "1; mode=block"
            Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
            Header always append X-Frame-Options SAMEORIGIN
        </Directory>
    </IfModule>
</VirtualHost>

Ainsi nous avons un virtualhost sous le port 80 (HTTP) qui redirigera systématiquement vers HTTPS. Nous initialisons toujours notre serveur web sur le répertoire /var/www/html/ et nous spécifions toujours des fichiers logs pour le virtualhost 443 (HTTPS). La configuration est agrémentée de diverses directives destinées à rendre votre site internet plus sécurisé, libre à vous de les conserver ou non. Vous pouvez maintenant appliquer les changements et redémarrer Apache :

systemctl restart apache2

Pour être certain que nos certificats SSL seront renouvellés automatique, il suffit de faire un test avec la commande suivante, si tout est bon vous en serez informé (le contraire également) :

certbot renew --dry-run

Installation de PHP

Si vous disposez d'un site internet dynamique sous PHP, voici une suite de commande qui vous permettra d'installer PHP dans sa version 8.3 (à adapter en cas de montée de version). Libre à vous d'éditer les différentes librairies qui accompagne PHP dans la dernière ligne, vous avez les principales, vous n'aurez peut-être pas besoin de toutes celles-ci et vous aurez peut-être besoin d'une ou plusieurs autres en particulier.

dpkg -l | grep php | tee packages.txt
apt install apt-transport-https
curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg //packages.sury.org/php/apt.gpg
sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] //packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
apt update
apt install php8.3 php8.3-{bz2,cli,curl,gd,iconv,intl,json,ldap,mbstring,mysql,xml,zip}

Vous pouvez éditer les limitations de PHP dans la configuration suivante :

nano /etc/php/8.3/apache2/php.ini

Voici les différentes variables que vous pourriez souhaiter modifier :

  • max_execution_time
  • max_input_time
  • memory_limit
  • post_max_size
  • upload_max_filesize

Conclusion

Vous disposez maintenant d'un serveur web accessible via votre nom de domaine.

Pour information, j'ai utilisé cette documentation pour installer plusieurs serveurs web et notamment un serveur personnel sur un Raspberry Pi hébergé chez moi qui me permet de servir du contenu via plusieurs domaines et sous domaines.

Pour aller plus loin, il serait sans doute utile d'installer un service de base de données comme par exemple Mariadb histoire d'avoir le LAMP (Linux Apache Mysql PHP) complet.

Si vous avez des questions ou des remarques, je vous invite à utiliser les commentaires plus bas !

Partager cette publication :

Cette publication peut aussi vous intéresser

Laisser un commentaire

Votre courriel ne sera pas publié, les champs obligatoires sont indiqués par un astérisque *.

*
*
*