Dans cette article je vais rapidement couvrir les bases de la mise en place d’un serveur dédié à des fins d’hébergement web. Voici les composantes de bases que nous allons utilisers:

  • Nginx: serveur web. Extrêmement rapide et capable de gérer un grand nombre de visiteurs. Nous allons aussi configurer Nginx comme Cache afin de réduire le nombre de requêtes faites au serveur. À titre de démonstration, WordPress.com utilise Nginx comme serveur.
  • PHP 7.3: PHP est une installation nécéssaire pour ceux qui désires opérer un site web fonctionnant sous WordPress ainsi que de nombreux scripts très populaires.
  • MySQL: Normalement, je préfère opérer la base de donnée de mes sites web sur un serveur uniquement dédié aux bases de données mais pour les sites web non critiques, il est beaucoup plus simple et abordable d’installer MySQL sur le même serveur.
  • Sécurité: Mise en place d’un pare-feu permettant uniquement des connections aux serveur web que nous approuvons afin de diminuer les chances de piratages.

Introduction

Un serveur peut servir pour de nombreux usages et vous devez prendre un certain temps afin de planifier ce que vous désirez installer sur votre machine puisque chaque logiciels installés consomme des ressources. Dans notre exemple, j’utilise un serveur dédié de chez Kimsufi.com situé au Québec, Canada. J’ai décidé d’aller avec Kimsufi puisque leurs prix sont très compétitifs et je n’avais pas besoin d’une machine avec des composantes de dernières générations. Je suggère aussi de prendre une machine située à une distance relativement prêt d’où vos visiteurs sont situés. Dans mon cas, la majorité des visiteurs de mon site web sont situés au Québec. Voici les spécifications du serveur afin que vous puissiez modifier les paramètres en fonctions des composantes de votre propre serveur.

Spécifications du serveur

Intel Xeon W3520, 4c/8t, 2.66GHz, 32GB DDR3 ECC 1333 MHz, SoftRaid 2x2TB, Centos 6

Comme vous pouvez le voir, les composantes du serveurs ne sont pas récents mais il suffissent amplement pour faire fonctionner un site web comme celui-ci, sans problèmes. Si vous désirez un serveur de production, je suggère des disques durs de type SSD ainsi que de la mémoire vive DDR4. Pour ce qui est de l’architecture, je n’ai pas mis en place de redondance tel un load balancer, etc… Mais j’ai ajouté un « failover » sur Amazon Web Services qui permet au site web d’afficher une page HTML de base après 60 secondes de « downtime ».

Spécification du PC client

AMD Ryzen 5 2400G, 4c/8t, 3.6GHz, 16GB DDR4 3000 MHz, 250GB M.2 SSD, Windows 10

Voici les spécifications de mon ordinateur de bureau pour vous permettre de vous situer. J’utilise présentement Windows 10 comme système d’opération mais la majorité du contenu de l’article fait référence au serveur et non au PC client. Exemple: J’utilise présentement PuTTY comme logiciel pour me connecter au serveur par SSH mais sous Mac, vous pourriez tout simplement utiliser le Terminal. Les commandes restents les mêmes.

Se connecter au serveur une fois le système d’opération installé – CentOS 6

PuTTY Configuration
PuTTY Configuration Windows 10: connexion SSH

J’assume maintenant que vous avez acheté votre serveur et que vous avez demandé que le système d’opération Centos 6 soit installé. Si vous désirez Centos 7 ou Ubuntu comme système d’opération, je recommande que vous trouviez un autre tutoriel. Okay! Vous avez dorénavant le mot de passe pour l’utilisateur root de votre serveur ainsi que l’IP de la machine. Connectez-vous avec le logiciel PuTTY au serveur. Dès que cela est fait, veuillez exécuter les commandes suivantes (les lignes avec le symbole « # » sont des commentaires pour expliquer leurs fonctions):

Mettre à jour votre serveur afin d’éliminer la chance de logiciels désuets et vulnérables. Assurez-vous d’exécuter cette commande de temps en temps, autrement, vous risquez de vous retrouver avec des failles de sécurités dans votre serveur web.

yum -y update

# "-y" est optionnel. Sert uniquement à spécifier de ne pas nous demander si nous approuvons l'installation.
# Utilisez la commande "yum update" si vous désirez voir les dépendances avant de l'approuver.

Yum: Cheat Sheet

Changer le mot de passe fournis par la compagnie de serveur dédié. Fortement suggèré.

passwd root

# Si vous désirez changer le mot de passe d'un autre utilisateur: "passwd nom_utilisateur"

Par défaut, la liste de logiciels disponibles dans CentOS6 est très réduits. Pour nous permettre d’installer des logiciels tels que PHP7 et Nginx, nous allons ajouter: REMI et EPEL.

yum install epel-release
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Modifier le hostname afin de personnaliser le serveur. Vous pouvez laisser les valeurs par défaut mais dans mon cas, je préfère nommer le serveur moi-même. Pour ce faire, je suis aller dans mon registraire de nom de domaine et attribué le « record: A » de « dev.lab97.ca » à l’IP du serveur. Une fois que c’est fais, vous pouvez l’ajouter à la machine.

nano /etc/sysconfig/network

# Nano est l'éditeur que j'utilise afin d'ouvrir les fichiers. Vim et vi sont d'autres options
# Modifier la valeur de HOSTNAME=... pour celle de votre nom de domaine
# Dans mon cas: HOSTNAME=dev.lab97.ca
# Laissez les autres valeurs inchangées

nano /etc/hosts

# Remplacez le hostname par celui que vous désirez
# Voici un exemple de fichier /etc/hosts
# Remplacez "dev" et "dev.lab97.ca" par votre nom de domaine
# Le IP 192.99.7.123 devrait correspondre à l'IP de votre propre machine

127.0.0.1 localhost.localdomain localhost
192.99.7.123            dev.lab97.ca    dev
2607:5300:0060:387b::1  dev.lab97.ca    dev

# Afin de terminer le tout, entrez la commande suivante:

hostname dev.lab97.ca

# Pour que les changements prennent effets, il faut redémarrer le service "network"

service network restart

# Si vous désirez vérifiez que tous à bien fonctionné:
# Cette commande devrait vous retourner le nouveau hostname de votre machine

hostname

Installer et sécuriser MySQL localement

La première chose à faire est d’installer MySQL.

yum install mysql-server

Démarrer le service MySQL

service mysqld start

# le d à la fin de mysql n'est pas un typo ;-)

En cas de redémarrage de la machine, nous devons nous assurer que le service MySQL sera redémarré aussi sinon aucune de nos bases de données ne seront opérationnel.

chkconfig mysqld on

# Si vous désirez une liste complète des services qui démarre en même temps que la machine:
# entrez la commande "chkconfig"

Mettre en place la sécurité de base pour MySQL.

mysql_secure_installation

# Cette commande vous feras passer à travers les configurations de bases pour sécuriser MySQL
# Vous devrez choisir les limitations que vous désirez mettre en place sur votre propre serveur

Installer Nginx avec PHP7-FPM

Dans cette section, nous allons installer le serveur web Nginx avec PHP 7. Je vais aussi vous expliquer les changements que nous devrons apporter si vous désirez optimiser le tout.

Installer Nginx

yum install nginx

# Assurez-vous d'avoir installer REMI et EPEL avant d'éssayer d'installer Nginx et PHP7

service nginx start

# Démarrage de Nginx après installation
# À ce stade, quand vous avez démarrez le service Nginx,
# vous devrirez pouvoir ouvrir "http://votre_IP" dans votre navigateur et voir la page par défaut de Nginx

chkconfig nginx on

# On s'assure que Nginx démarre quand on redémarre le serveur

Installer PHP 7.3

Si vous désirez exécutez des scripts tels que WordPress, vous devrez installer PHP. Assurez-vous d’installer la dernière version stable. Je recommande fortement d’aller avec PHP7 vs. PHP5 due au gain de vitesse avec la nouvelle version. En date d’aujourd’hui, la dernière version stable disponible sur REMI est PHP 7.3. Voici comment l’installer:

yum install php73-php-common php73-php-fpm php73-php-opcache php73-php-gd php73-php-mysqlnd php73-php-mbstring php73-php-xml php73-php-xmlrpc

# Avec la commande précédente, nous installons PHP 7.3 ainsi que tous les modules supplémentaires
# qui est recommandé pour fonctionner avec WordPress et Nginx.

service php73-php-fpm start

# Si vous désirez que les pages PHP soient exécutées, vous devez vous assurer que le service PHP-FPM
# est en fonction.

chkconfig php73-php-fpm on

# Avec "chkconfig" on s'assure que PHP-FPM démarre lorsque le serveur "boot".

Configurer PHP-FPM pour son bon fonctionnement

Pour garantir le bon fonctionnement de PHP avec NGINX, nous allons apporter quelques changement à la configuration de PHP-FPM.

nano /etc/opt/remi/php73/php-fpm.d/www.conf

# Puisque j'ai utilisé REMI pour installer PHP et PHP-FPM, le dossier contenant les fichiers sont:
# /etc/opt/remi/php73/ et /etc/opt/remi/php73/php-fpm.d/
# Normalement, ils sont dans le dossier /etc/

user = nginx
group = nginx

# Si vous utilisez le serveur web apache, vous n'avez pas à éditer le fichier suivant,
# mais si vous utilisez Nginx, vous devez éditer le fichier www.conf
# Remplacez les valeurs "user=" et "group=" comme ci-dessus pour refléter le
# nom d'utilisateurs sur lequel Nginx fonctionne. Dans la majorité des cas: "nginx"
# Si vous ne faites pas cette modification, PHP n'aura pas la permission de téléverser du contenu.

service php73-php-fpm restart

# Si vous avez apporté des changements aux fichiers de configuration www.conf,
# vous devez redémarrer le service php-fpm afin qu'ils prennent les changements en compte.

Sécurité

Mise en place et configuration du pare-feu

Par défaut, CentOS 6 vient avec un pare-feu déjà installé. Pour en faciliter la configuration, nous allons utiliser l’interface graphique « system-config-firewall-tui ».

system-config-firewall-tui

# Si vous n'avez pas "system-config-firewall-tui" d'installé, il suffit de faire:
# yum -y install system-config-firewall-tui
  1. Assurez-vous que le pare-feu est activé. « Firewall: * Enable« 
  2. Appuyez sur « Customize » pour modifier les règles du pare-feu.
  3. Dans mon cas, les seuls ports qui ont besoins d’être ouvert sont HTTPS (pour que vos visiteurs puisse accèder à la version sécurisé par SSL de votre site web), HTTP (accès non-sécurisé de votre site web) et SSH (permettre à l’administrateur/moi d’accéder au serveur et faire des modifications).
  4. Appuyez sur « Close » si vous avez terminé.
  5. « OK » pour confirmer que vous avez terminer les modifications.
  6. « YES » si vous désirez éffectuez les changements à votre pare-feu.

Conclusion

Dans les prochains articles, je vais expliquer comment installer WordPress sur le serveur et comment optimizer NGINX pour un rendement nettement suppérieur à la version par défaut. Si vous avez des suggestions ou commentaires, n’hésitez pas.

Notes supplémentaires

Ci-dessous, vous trouverez des commandes additionnels qui pourrait fortement vous aider lors de l’administration de serveur linux.

Commandes NGINX

nginx -t

# Vérifie si les fichiers de configurations passe le test
# À faire avant de démarrer/redémarrer le NGINX
# Ça vous permet de savoir si les changements que vous avez fais sont OK.

service nginx start
service nginx stop
service nginx restart

service nginx status

# Vous permet de savoir si le service NGINX est en arrêt ou si il fonctionne

service nginx reload

# Recharge les fichiers de configuration de NGINX sans avoir à redémarrer le service
# Parfait pour quand vous faites des changements aux fichiers de configurations de NGINX

Dossiers par défaut de NGINX

  • Dossier par défaut de NGINX: /etc/nginx/
  • Dossier par défaut de configuration NGINX(vhost): /etc/nginx/conf.d/
  • Dossier par défaut des logs NGINX: /var/log/nginx/
  • Dossier par défaut des fichiers HTML de NGINX: /usr/share/nginx/html
  • Fichier par défaut de configuration NGINX: /etc/nginx/nginx.conf
  • Fichier par défaut des accès NGINX: /var/log/nginx/access.log
  • Fichier par défaut des erreurs NGINX: /var/log/nginx/error.log

Vérifier si la date et l’heure du serveur correspond à ce que vous désirez. Particulièrement important si vous avez des scripts qui utilise la date du serveur comme resource.

date

Cette commande vous permet de visualiser tous les services qui démarre en même temps que le serveur. Interface graphique.

ntsysv

Si vous désirez utliser un interface graphique afin de modifier les services, pare-feu, etc, « setup » est fait pour vous.

setup

NGINX Pitfalls and Common Mistakes

https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/

WordPress Config for NGINX

https://codex.wordpress.org/Nginx

Basic security error in NGINX

https://nealpoole.com/blog/2011/04/setting-up-php-fastcgi-and-nginx-dont-trust-the-tutorials-check-your-configuration/

Rejoindre la conversation

2 commentaires

  1. Pour ceux qui veulent installer PHP 5, ils n’ont qu’à faire « yum install php-fpm ». Excellent article. Merci Simon.

Laisser un commentaire

Répondre à Simon Annuler la réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *