Comment: Installer WordPress Manuallement
Dans ce guide complet, je vais vous montrer comment installer WordPress manuellement et pourquoi c'est une bonne idée. Nous allons installer et sécuriser notre serveur Linux, installer la dernière version de MySQL et de PHP ainsi qu'installer et configurer Nginx. Vous apprendrez à sécuriser votre serveur avec un pare-feu et à crypter la communication entre les utilisateurs et le site Web avec un certificat TLS. Enfin, Cloudflare sera utilisé pour mettre en cache notre contenu dans le monde entier.
Besjan Sejrani
Qu'est-ce que WordPress
WordPress est un système de gestion de contenu, également appelé CMS, qui est principalement utilisé pour le blogging, le commerce électronique et la présentation de sites web. C'est un logiciel libre, vous pouvez l'utiliser à n'importe quel prix pour un usage personnel ou commercial. De nos jours, en 2022, WordPress représente environ 40% de l'ensemble du web. Comme il s'agit d'un projet d'une telle ampleur projet, vous pouvez facilement trouver de l'aide via la documentation ou les tutoriels sur le web.
Pourquoi il vaut mieux installer WordPress manuellement
L'installation manuelle de WordPress par rapport à d'autres solutions d'hébergement WordPress n'est pas nécessairement un meilleur choix. Cependant, cela vous apprendra de précieuses informations sur le web, que vous pourrez utiliser plus tard pour d'autres sites web. Vous ne serez jamais dépendant ou enfermé par certaines solutions d'hébergement WordPress, vous vous aurez un contrôle total.
Conditions préalables
Pour ce guide, vous n'avez pas besoin d'avoir des connaissances en informatique, vous allez apprendre les bases. Cependant, il est recommandé d'avoir une forte volonté d'apprendre de nouveaux sujets et de pratiquer à côté.
Si vous souhaitez héberger votre site Web, vous devez disposer d'un fournisseur d'hébergement, comme Vultr ou Digital Ocean, et un nom de domaine. Vous devrez payer $5-10 / par mois pour l'hébergement et 10 $ par an pour un domaine.
Fournisseur d'hébergement
Pour ce guide complet, Vultr sera utilisé pour l'hébergement. Le nom de domaine selfticode.com a été acheté et sera géré via le panneau de configuration DNS d'Infomaniak.
Vous pouvez utiliser la solution d'hébergement et de DNS de votre choix, à condition de pouvoir gérer votre serveur via SSH. Attention, souvent l'hébergement mutualisé ne permet pas la gestion SSH de la gestion.
Image: Créer une instance sur Vultr
Image: Choisissez votre serveur Vultr, sa localisation, son système d'exploitation et sa taille.
Image: Choisissez votre serveur Vultr, sa localisation, son système d'exploitation et sa taille.
Dans ce guide, Ubuntu a été choisi comme système d'exploitation principal, mais vous pouvez choisir n'importe quel système d'exploitation de type Unix que vous voulez, par conséquent, les commandes du gestionnaire de paquets peuvent être différentes.
Configuration SSH
Secure Shell, également connu sous le nom de SSH, est un protocole réseau qui permet de se connecter à un serveur en toute sécurité. L'algorithme de cryptage génère une clé privée, qui doit rester privée, et une clé publique, que vous pouvez partager avec le serveur.
Générer une clé SSH
Les utilisateurs de Windows doivent installer Git Bash avant d'exécuter la commande ssh-keygen.ssh-keygen. Les utilisateurs Mac et Linux peuvent utiliser le terminal. Saisissez la commande et fournissez une adresse électronique valide.
Par défaut, la commande ssh-keygen va créer deux fichiers, un fichier appelé id_ed25519 et un autre fichier nommé id_ed25519.pub. Si vous voulez changer le nom des fichiers et leur emplacement, vous pouvez le faire en éditant le fichier. Cependant, il est fortement recommandé de créer les fichiers sous le dossier caché .ssh.
# Crée une clé privée et une clé publiquessh-keygen -t ed25519 -C "[email protected]"# Copier le contenu de id_ed25519.pubcat ~/.ssh/id_ed25519.pub
Il est recommandé d'ajouter votre clé SSH publique à Vultr, ceci rendra la connexion au serveur beaucoup plus facile et plus sécruisé.
Pour afficher le contenu de la clé publique SSH, on utilise la commande cat, puis un simple copier-coller fait l'affaire. Assurez-vous de copier le fichier se terminant par .pub.
Image: Ajoutez votre clé SSH publique à Vultr
# Connection SSHssh [email protected]_address
Créer et sécuriser un nouveau compte super utilisateur
Par défaut, le compte root est le compte super utilisateur et cela pose un problème puisque tout le monde sait qu'un compte root existe.
Les meilleures pratiques consistent à créer un nouvel utilisateur et à l'ajouter au groupe sudo qui lui donnera les droits de super utilisateur, de désactiver la connexion SSH pour le compte root, et enfin de désactiver l'authentification par mot de passe.
# Crée un nouvel utilisateur et demande un nouveau mot de passeadduser username# Ajouter un utilisateur au groupe sudo pour obtenir les droits de super utilisateursudo usermod -aG sudo username# Vérifiez que l'utilisateur a été ajouté au groupe sudo.groups username# Passer au compte utilisateursu - username# Quitter le nouveau compte super utilisateurexit# Quitter le serveurexit
# Envoyer la clé publique par SSH sur le nouveau compte super utilisateurssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]_address# Connexion SSH avec le nouveau compte super utilisateurssh [email protected]_address
La commande ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]_address La commande enverra la clé publique SSH sur le nouveau compte super utilisateur. C'est le même processus que celui de Vultr lorsque nous lui passons la clé publique SSH.
# Modifier le fichier de configuration du serveur SSHsudo nano /etc/ssh/sshd_config# Modifiez les propriétés suivantes# Si un # précède la propriété, la ligne est commentée.PermitRootLogin: noPubkeyAuthentication: yesAuthorizedKeysFile .ssh/authorized_keysPasswordAuthentication: no# Redémarrer le serveur SSHsudo systemctl restart sshd
Vous pouvez maintenant essayer de vous connecter via SSH au compte root, cela ne fonctionnera pas. Il fonctionnera uniquement avec le nouveau super utilisateur créé.
Installation PHP
WordPress utilise PHP comme principal langage de programmation sur le serveur. Pour l'installer l'installer, nous devons d'abord mettre à jour tous les paquets sur notre serveur, puis installer PHP et quelques extensions qui ajouteront des capacités supplémentaires à PHP.
# Ajouter un dépôt de paquets, Ondrej PPA maintient un dépôt qui inclut plusieurs versions de PHPsudo add-apt-repository ppa:ondrej/php# Mise à jour des packetssudo apt update# Mise à niveau des paquetssudo apt upgrade
La commande sudo signifie super user do, elle vous permettra d'exécuter certaines commandes en mode privilège. d'exécuter certaines commandes en mode privilège.
# Installer PHP et ses extensionssudo apt install php8.0-fpm php8.0-common php8.0-mysql \php8.0-xml php8.0-xmlrpc php8.0-curl php8.0-gd \php8.0-imagick php8.0-cli php8.0-dev php8.0-imap \php8.0-mbstring php8.0-opcache php8.0-redis \php8.0-soap php8.0-zip -y
Les extensions suivantes améliorent les capacités de PHP à prendre en charge la base de données MySQL le format XML, le traitement des images, le support du courrier électronique, la compression zip et la base de données Redis. support de la base de données Redis.
# Vérifiez votre version de PHPphp --version# PHP 8.0.14 (cli) (built: Dec 20 2021 21:22:57) ( NTS )# Copyright (c) The PHP Group# Zend Engine v4.0.14, Copyright (c) Zend Technologies# with Zend OPcache v8.0.14, Copyright (c), by Zend Technologies
After the installation has been completed, verify the PHP version.
Installation MySQL
MySQL est une base de données relationnelle SQL qui est utilisée pour stocker des données. WordPress utilise MySQL pour son fonctionnement interne, notamment dans le cas des thèmes et des plugins.
Vous pouvez également utiliser MariaDB, qui est un clone de MySQL. A propos, il a été cloné de peur qu'Oracle, lorsqu'il a acquis le projet, ne le transforme en un produit payant.
# Mise à jour des packetssudo apt update# Installer MySQLsudo apt install mysql-server
After updating your packages, install MySQL.
# Configurer MySQLsudo mysql_secure_installation
Il est recommandé d'ajouter un mot de passe à l'utilisateur root de MySQL, de préférence, un mot de passe fort. Ensuite, supprimez les utilisateurs anonymes, interdisez la connexion de l'utilisateur root à distance et enfin de supprimer la base de données de test.
# Connexion à MySQL en tant que super utilisateursudo mysql# Créer une base de données WordPressCREATE DATABASE wordpress;# Créer un utilisateur MySQLCREATE USER 'username'@'localhost' IDENTIFIED BY 'password';# Accorder des permissions à l'utilisateurGRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'username'@'localhost' WITH GRANT OPTION;# Libère la mémoire que le serveur a mise en cache.FLUSH PRIVILEGES;# Quitter le shell MySQLEXIT;
Après la création de la base de données wordpress et la création d'un utilisateur identifié par un mot de passe, les autorisations de cet utilisateur sont renforcées afin qu'il puisse effectuer des opérations de base de la base de données. Enfin, la mémoire de la base de données est réinitialisée pour des raisons de sécurité avant de quitter la base. sécurité avant de quitter la base de données.
Télécharger WordPress
Le code source de WordPress peut être téléchargé sur le site wordpress.org via la commande wget.
# Allez dans le répertoire de l'utilisateur rootcd ~# Installer les fichiers tar de WordPress# wget télécharge WordPress via le dépôt wordpress.orgwget http://wordpress.org/latest.tar.gz# Extraire des fichiers# Cela créera un dossier nommé wordpress contenant tous les fichiers de WordPress par extraction.tar -xzvf latest.tar.gz
Après que WordPress ait été téléchargé depuis le dépôt de wordpress.org, le contenu doit encore être extrait dans un dossier nommé wordpress.
# Allez dans le répertoire wordpresscd wordpress# Copier le fichier wp-config-sample.phpcp wp-config-sample.php wp-config.php# Modification de wp-config.php avec l'éditeur nanonano wp-config.php
Nano est un éditeur de texte pour Linux, vous pouvez l'utiliser pour modifier vos fichiers. Pour les débutants, il est recommandé de commencer par utiliser nano avant d'utiliser d'autres éditeurs de texte tels que Vim ou Emacs.
#/** Le nom de la base de données pour WordPress */define( 'DB_NAME', 'database_name_here' );#/** Nom d'utilisateur de la base de données MySQL */define( 'DB_USER', 'username_here' );#/** Mot de passe de la base de données MySQL */define( 'DB_PASSWORD', 'password_here' );# Allez à l'URL suivante : https://api.wordpress.org/secret-key/1.1/salt/# Copiez et collez le contenu suivantdefine('AUTH_KEY', 'YOUR AUTH_KEY');define('SECURE_AUTH_KEY', 'YOUR SECURE_AUTH_KEY');define('LOGGED_IN_KEY', 'YOUR LOGGED_IN_KEY');define('NONCE_KEY', 'YOUR NONCE_KEY');define('AUTH_SALT', 'YOUR AUTH_SALT');define('SECURE_AUTH_SALT', 'YOUR SECURE_AUTH_SALT');define('LOGGED_IN_SALT', 'YOUR LOGGED_IN_SALT');define('NONCE_SALT', 'YOUR NONCE_SALT');
Après avoir ouvert le fichier wp-config.php avec votre éditeur de texte, vous devez devez modifier les variables database_name_here, username_here et password_here.
Pour des raisons de sécurité, vous devez également modifier les variables de sécurité. Via l'URL URL suivante, https://api.wordpress.org/secret-key/1.1/salt/, WordPress génère automatiquement des valeurs aléatoires pour les variables de sécurité. Il suffit de copier le contenu et de le coller dans le fichier.
Installation et configuration de Nginx
Nginx est un serveur web qui se trouve juste devant un serveur, il est capable d'être utilisé comme un reverse proxy ou d'équilibrage de charge, ce qui signifie qu'il redirige le trafic, en fonction de l'URL que l'utilisateur a saisi, vers un seul serveur ou vers plusieurs serveurs.
Image: Flux de requêtes et de réponses
Par rapport à d'autres serveurs web tels qu'Apache, Nginx traite les demandes de manière beaucoup plus efficace, ce qui lui permet de traiter davantage de demandes.
# Mise à jour des packetssudo apt update# Installer Nginxsudo apt install nginx -y# Modifier le fichier de configuration de nginxsudo nano /etc/nginx/sites-available/default
Après avoir mis à jour vos paquets, installez Nginx et mettez à jour le fichier de configuration par défaut sous /etc/nginx/sites-available/default avec le contenu suivant. Modifiez votre server_name avec votre nom de domaine. , utilisez l'éditeur nano pour modifier le fichier.
server {listen 80;server_name selfticode.com;root /var/www/html/wordpress;index index.php;# Pour des raisons de sécurité, le server_tokens est désactivé.# Le navigateur ne sera pas en mesure de savoir quel système d'exploitation est le serveur.server_tokens off;location / {# L'URI demandé est d'abord testé, puis le dossier, et enfin le fichier index.php avec n'importe quelle chaîne de requête.try_files $uri $uri/ /index.php?$args;}location ~* /wp-sitemap.*\.xml {# L'URI demandé est d'abord testé, puis le dossier, et enfin le fichier index.php avec n'importe quelle chaîne de requête.try_files $uri $uri/ /index.php$is_args$args;}client_max_body_size 100M;# Passe les scripts php au serveur FastCGI spécifié dans la déclaration amont.location ~ \.php(/|$) {include fastcgi.conf;fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;fastcgi_split_path_info ^(.+\.php)(/.*)$;fastcgi_param PATH_INFO $fastcgi_path_info;fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;fastcgi_param DOCUMENT_ROOT $realpath_root;try_files $uri $uri/ /app.php$is_args$args;fastcgi_intercept_errors on;}# GZIP est un algorithme de compression, il réduit la charge utile des fichiers.gzip on;# Plus le niveau de gzip_comp_level est élevé, plus la compression des fichiers est efficace.# L'inconvénient, c'est que le CPU est très sollicité.gzip_comp_level 4;gzip_min_length 1000;gzip_proxied any;# Types de fichiers autorisés pour la compression Gzipgzip_typesapplication/geo+jsonapplication/javascriptapplication/x-javascriptapplication/jsonapplication/ld+jsonapplication/manifest+jsonapplication/rdf+xmlapplication/rss+xmlapplication/xmlfont/eotfont/otffont/ttfimage/svg+xmltext/csstext/javascripttext/plaintext/xml;# Fichiers, médias# Un large choix de formats de fichiers a été sélectionné pour chaque cas d'utilisationlocation ~* \.(?:css?|js?|jpe?g|png|gif|ico|webp|tiff?|mp3|m4a|aac|ogg|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {expires 90d;access_log off;}# Fichiers Statiqueslocation ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {add_header Access-Control-Allow-Origin "*";expires 90d;access_log off;}}
# Vérifier le fichier de configuration de Nginxsudo nginx -t# Redémarrer Nginxsudo systemctl restart nginx
Vérifiez que le fichier de configuration de nginx est correct, et seulement ensuite redémarrez nginx.
# Déplace le dossier wordpress vers un nouvel emplacementsudo mv ~/wordpress /var/www/html/wordpress# Change le propriétaire du dossier et de son contenu de manière récursive.sudo chown -R www-data:www-data /var/www/html/wordpress/# Modifie les permissions du dossier et de son contenu de manière récursive.sudo chmod -R 755 /var/www/html/wordpress/
Par défaut, nginx fonctionne avec l'utilisateur www-data, pour cette raison, nous devons changer le propriétaire du dossier wordpress et changer les permissions du dossier.
La commande chown -R change le propriétaire de manière récursive, ce qui signifie que que le dossier et tout le contenu qu'il contient changera de propriétaire pour devenir www-data.
La commande chmod -R modifie les permissions du dossier. les permissions sont organisées au format utilisateur:groupe:autre. Chacun d'entre eux obtient certaines permissions. Le nombre d'autorisations de lecture est de 4, celui d'écriture de 2 et celui d'exécution de 1. Combiné, l'utilisateur peut lire, écrire et exécuter. Le groupe peut lire et exécuter et enfin les autres peuvent aussi lire et exécuter.
Lorsque vous entrez votre adresse IP sur la barre URL, vous devriez voir l'assistant d'installation de WordPress. mais ne le lancez pas encore, nous n'avons pas fini d'installer et de sécuriser votre site web.
Image: L'installation de WordPress n'est pas encore terminée
Problème de pare-feu
Si vous n'arrivez pas à voir la page d'installation de WordPress, c'est peut-être la faute du service ufw, ufw signifiant uncomplicated firewall. Nous allons arrêter et désactiver le service ufw en faveur du pare-feu nftables, qui est plus granulaire, nous l'installerons à la fin.
# Liste de tous les services fonctionnant sur le serveurservice --status-all# Redémarrer Nginxsudo systemctl disable ufwsudo systemctl stop ufw
Liaison DNS
Lorsque vous achetez un plan d'hébergement, vous obtenez votre serveur et une adresse IP publique que vous pouvez ensuite associer à un nom de domaine. Un nom de domaine aide les utilisateurs à se souvenir de votre site web via une URL lisible par l'homme. Sinon, ils devraient se souvenir des adresses IP à quatre octets, ce qui n'est ni pratique ni utile lors de la recherche d'informations.
Vous pouvez lier votre nom de domaine à votre serveur par l'intermédiaire de n'importe quel fournisseur de noms de domaine, pour autant que vous ayez un accès direct à votre panneau de contrôle DNS. Après avoir installé le serveur, vous devez modifier les paramètres de configuration DNS, il suffit d'ajouter ns1.vultr.com et ns2.vultr.com à vos paramètres de serveur DNS personnalisés, après un certain temps, cela devrait fonctionner.
Un DNS A record vous permet de lier un nom de domaine à une adresse IP. Un enregistrement DNS CNAME vous permet de créer un alias lorsque vous souhaitez rediriger votre trafic de www.selfticode.com versselfticode.com
Image: Panneau de contrôle DNS d'Infomaniak
Type | Hostname | Value |
A | selfticode.com | 134.122.90.217 |
CNAME | www.selfticode.com | selfticode.com |
Certificat TLS
Transport Layer Security, également connu sous le nom de TLS, est un protocole de sécurité utilisé pour crypter la connexion de l'utilisateur au site web qu'il visite. Avec TLS, il est impossible de réaliser une attaque de type "man in the middle", c'est-à-dire qu'un un utilisateur malveillant se fait passer pour le navigateur web du point de vue de l'utilisateur et l'utilisateur du point de vue du navigateur, dans le but ultime de voler des identifiants personnels.
La seule chose que l'utilisateur malveillant verra, ce sont les données cryptées.
Pourquoi les certificats TLS sont-ils importants
La sécurité joue un rôle majeur dans l'Internet moderne, notamment en ce qui concerne le classement des moteurs de recherche et la confiance des utilisateurs. Si vous traitez des informations sensibles via un formulaire ou vous vendez des produits sur votre site web, les utilisateurs s'attendent à une communication sécurisée entre le navigateur et le site web.
Ces dernières années, Google a amélioré ses facteurs de classement des recherches, et l'un d'entre eux est la sécurité. Google classera votre site Web plus haut dans les resultats de recherche si votre site Web utilise un certificat TLS.
Let's Encrypt
Let's Encrypt est une autorité de certification à but non lucratif qui fournit des certificats TLS . Avant Let's Encrypt, vous deviez payer pour mettre en place un certificat TLS auprès d'une autorité de certification, de nos jours, la sécurité est plus plus que jamais encouragée à être mise en œuvre.
Certbot
Certbot est un outil d'automatisation gratuit et open source qui vous permettra de d'implémenter gratuitement un certificat TLS sur votre serveur web. Il génère automatiquement un certificat à l'aide de Let's Encrzpt et modifiera votre fichier de configuration nginx.
# Installer snapd# Vérifier la dernière version de snapdsudo snap install core; sudo snap refresh core# Installer Certbotsudo snap install --classic certbot# Créer un lien symboliquesudo ln -s /snap/bin/certbot /usr/bin/certbot# Exécuter Certbot sur le serveur web Nginxsudo certbot --nginx
En exécutant Certbot, il ajoutera une nouvelle section serveur dans le fichier de configuration de nginx en écoutant sur le port 443 pour les requêtes HTTPS.
Renouvellement de certificat
Par défaut, les certificats TLS de Let's Encrypt ne sont valables que pour une période de 90 jours. Vous devez donc exécuter le processus encore et encore sans l'oublier. Heureusement, nous pouvons automatiser le processus sans faire aucune action manuelle, ceci peut être fait avec l'aide des tâches cron.
Les tâches Cron sont des actions répétitives qui peuvent être exécutées par un script pendant un intervalle de temps. Ces intervalles peuvent être configurés pour se déclencher plusieurs fois pendant cette période.
# Fichier de configuration Croncrontab -e# Certbot essaiera d'exécuter le processus de renouvellement quotidiennement.@daily certbot renew -n -q
Pare-feu
Un pare-feu est comme un gardien de sécurité, il contrôle le trafic qui veut entrer et sortir. Une mesure importante pour sécuriser un serveur serait de mettre en œuvre un pare-feu pour filtrer les demandes indésirables. Nftables sera utilisé comme une solution populaire de pare-feu.
# Mise à jour des packetssudo apt update# Instaler ntablessudo apt install nftables -y# Modifier le fichier de configuration de nftablessudo nano /etc/nftables.conf
Après l'installation de nftables, le fichier de configuration doit encore être modifié et le service doit être redémarré.
#!/usr/sbin/nft -fflush rulesettable inet filter {chain input {type filter hook input priority 0; policy drop;iif lo acceptct state invalid drop comment "Drop invalid connections"ct state established,related accept comment "Accept traffic originated from us"icmp type echo-request dropicmp type echo-request limit rate 10/second accepttcp dport {80, 443} accepttcp dport 22 accept}chain forward {type filter hook forward priority 0; policy drop;}chain output {type filter hook output priority 0;}}
# Redémarrer nftablessudo systemctl restart nftables
Après avoir configuré nftables correctement, redémarrez le service et ouvrez un nouveau terminal. Testez votre connectivité SSH ainsi que toutes les autres règles que vous avez autorisées dans le fichier de configuration. Dans le pire des cas, vous serez bloqué hors de votre serveur mais vous serez toujours en mesure de modifier le fichier de configuration dans l'onglet du terminal ouvert.
Image: Le pare-feu contrôle le trafic entrant et sortant.
Cache Cloudflare
Cloudflare est un CDN, également connu sous le nom de Content Delivery Network, il agit comme un proxy inverse et se place devant un serveur webb. L'avantage d'utiliser Cloudflare est qu'il dispose de serveurs dans le monde entier et qu'il peut donc mettre en cache le contenu statique de notre site Web et nous protéger contre les attaques DDOS.
La mise en cache est le processus de stockage du contenu temporaire d'une requête, de sorte que, lorsqu'une deuxième requête sollicite les mêmes ressources, un temps de réponse plus rapide puisse être fourni. C'est très utile si votre serveur principal est en Europe, mais que vous avez des utilisateurs dans le monde entier. Le CDN fait office d'intermédiaire, ce qui permet de réduira la distance que la requête devra parcourir.
Le déni de service distribué, également connu sous le nom de DDoS, est l'acte d'attaquer un serveur avec des centaines de milliers de requêtes afin qu'il ne soit pas en mesure de répondre à toutes ces demandes. Cette attaque a pour but de nuire au trafic du site web et de l'arrêter temporairement.
Image: Schéma de la mise en cache et de la protection DDoS de Cloudflare
Conclusion
J'espère que vous avez appris quelque chose dans cet article et qu'il vous a aidé à installer WordPress et à sécuriser votre serveur. Maintenant vous connaissez les avantages et inconvénients d'une installation manuelle de WordPress, si vous choisissez la méthode manuelle, vous vous aurez le contrôle total de votre site web.
Image: Félicitations, vous avez installé WordPress
Abonne toi à la Newsletter
Ne rate pas les dernières actualités, reçoit en avant première des mise à jour sur le développement