Un long moment sans billet de ma part. Par manque de temps surtout mais ce n'est pas le sujet de ce billet.

Mon blog ici présent commence à prendre de l'âge et par manque de temps pour le maintenir je vais le migrer sur Wordpredd.

J'avais codé ce blog avec le framework Slim, le moteur de template Twig et une base de données SQLite que j'allais scruter avec PDO mais certaines librairies commencent à dater un peu.

J'ai donc pris un serveur VPS chez OVH pour migrer le blog et passer d'un hébergement mutualisé limité en fonctionnalités à un serveur dédié virtuel chez OVH.

Cela me permettra d'avoir plus de souplesses, migrer mes sites et pouvoir installer des moteurs de cache et gagner en temps de réponse.

Je me suis donc fait un petit memo de l'installation du serveur et de Wordpress via un moteur LAMP (Linux, Apache, MySQL et PHP).

Je regrette quelque peu qu'en 2024 Wordpress ne gère pas d'autre moteur de base de données que MySQL...

J'ai fait le choix de prendre un VPS avec Ubuntu en version 23.04 (la plus récente proposée par OVH sur leur gamme de VPS).

Voici les différentes étapes de l'installation effecutée sur ce dernier afin de créer un vhost avec Wordpress.


Pour débuter, on procède au changement du mot de passe attribué par OVH pour le compte ubuntu :
passwd

On passe ensuite en root afin de procéder aux installations/configurations nécessaires :
sudo su

On cherche et on installe les mises à jour disponibles :
apt-get update && apt-get dist-upgrade -y


On installe les paquets nécessaires/courants :
apt-get install wget zip unzip nano locate curl needrestart -y

On installe notre serveur Web Apache :
apt-get install apache2 -y

On installe quelques paquets permettant de renforcer la sécurité de notre serveur Apache (l'installation d'un pare-feu applicatif fera l'objet d'un autre billet plus tard) :
apt-get install libapache2-mod-security2 modsecurity-crs -y

On modifie la signature d'Apache (et masquer visuellement quel serveur est utilisé) :
echo "SecServerSignature BigIP" >> /etc/apache2/conf-enabled/security.conf

On modifie une fois de plus la configuration de notre serveur pour donner le moins d’informations possibles sur notre version d'Apache (entre autre) :
sed -i "s/^ServerTokens OS$/ServerTokens Prod/" /etc/apache2/conf-available/security.conf
sed -i "s/^ServerSignature On$/ServerSignature Off/" /etc/apache2/conf-available/security.conf
sed -i "s/^#AddDefaultCharset UTF-8$/AddDefaultCharset UTF-8/" /etc/apache2/conf-available/charset.conf


On modifie ensuite la configuration d'Apache de manière globale pour ajouter des en-têtes :
echo 'Header always set X-Content-Type-Options: "nosniff"' >> /etc/apache2/conf-available/security.conf
echo 'Header always set X-Frame-Options: "sameorigin"' >> /etc/apache2/conf-available/security.conf
echo 'Header always set X-Xss-Protection "1; mode=block"' >> /etc/apache2/conf-available/security.conf
echo 'Header always set Referrer-Policy "strict-origin-when-cross-origin"' >> /etc/apache2/conf-available/security.conf


On active différents modules disponibles pour Aapche (réécriture d'adresses, compression à la volée, etc) :
a2enmod rewrite
a2enmod negotiation
a2enmod headers
a2enmod expires
a2enmod deflate
a2enmod ssl


On vérifie ensuite la configuration de notre serveur Apache avant redémarrage :
apache2ctl -t

On redémarre Apache pour prendre en considération nos changements vu que la commande précédente a retourné un "OK" :
systemctl restart apache2

On installe ensuite PHP et les modules complémentaires à PHP :
apt-get install libapache2-mod-php8.0 php8.1-bz2 php8.1-cli php8.1-common php8.1-curl php8.1-gd php8.1-mbstring php8.1-mcrypt php8.1-mysql php8.1-xml php8.1-zip -y

Puis on installe le serveur de base de données MySQL :
apt-get install mysql-server -y

On effectue ensuite une sécurisation (minimale mais nécessaire) de MySQL :
mysql_secure_installation

On va ensuite procéder à la création d'un utilisateur MySQL dédié à notre site pour cloisonner nos sites/users (utilisateur accueil, base accueil_blog et mot de passe azdazdazdazdazdazd) :
mysql -uroot
CREATE DATABASE accueil_blog;
CREATE USER 'accueil'@'localhost' IDENTIFIED BY 'azdazdazdazdazdazd';
GRANT ALL PRIVILEGES ON accueil_blog.* TO 'accueil'@'localhost';
REVOKE FILE ON *.* FROM 'accueil'@'localhost';
FLUSH PRIVILEGES;


On fait de même mais cette fois avec un utilisateur système qui sera dédié à notre site pour cloisonner nos sites (en cas de piratage par exemple) :
useradd -m -d /var/www/accueil.fr accueil
usermod -s /bin/false accueil
passwd accueil


On modifie l'appartenance de cet utilisateur pour l'ajouter au groupe www-data :
usermod -a -G www-data accueil

On poursuit par la modification des droits du répertoire racine de notre vhost :
chmod 755 /var/www/accueil.fr/

On va ensuite créer le fichier de configuration de notre site :
touch /etc/apache2/sites-available/accueil.fr.conf


Et insérer dans ce fichier ceci :
<VirtualHost *:80>
ServerName accueil.fr
ServerAlias *.accueil.fr

DocumentRoot /var/www/accueil.fr

<Directory /var/www/accueil.fr>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>

ErrorLog /var/log/apache2/accueil.fr.error.log
CustomLog /var/log/apache2/accueil.fr.access.log combined
</VirtualHost>


On valide une nouvelle fois la syntaxe de notre configuration pour Apache avant redémarrage du service :

apache2ctl -t


Puis on active ce site nouvellement créé :
a2ensite accueil.fr

On redémarre Apache si le retour de la commande précédente est "OK" :
systemctl restart apache2.service


On vérifie ensuite la bonne présence de PHP et des modules installés :
echo "<?php phpinfo(); ?>" >> /var/www/accueil.fr/index.php


On vérifie ensuite que le site réponde avec un accès à notre site http://accueil.fr

Il reste encore pas mal de choses à faire :
_ ajouter un Waf
_ installer et filtrer les accès à PHP My Admin
_ restreindre les accès aux interfaces des gestion / page d'appel des API de Wordpress
_ mettre en place un certificat Let's Encrypt
_ installer et configurer Redis et le module Wordpress adéquat
23/03/2024 10:43:00

Partager cet article

Commentaires (Cliquer pour afficher)

comments powered by Disqus