WordOps - Déployer WordPress avec Nginx simplement

Pour automatiser le déploiement de mes serveurs avec Nginx, PHP, MariaDB et pour créer les vhosts Nginx, j'utilisais précédemment EasyEngine v3 - qui avait d'ailleurs fait l'objet d'un article. Le problème, c'est qu'EasyEngine n'était plus vraiment à jour. Et pour cause, ses développeurs (rtCamp) travaillaient sur une nouvelle mouture qui a été publiée fin novembre 2018, EasyEngine v4.  

Malheureusement, cette nouvelle version développée en PHP qui utilise WP-CLI et Docker ne réponds pas vraiment à mes besoins, et ne laisse (à l'heure actuelle) que très peu de place à la customisation, aussi bien au niveau des configurations Nginx, que des paquets/containers utilisés.

N'y voyez pas un reproche à l'encontre de ses créateurs, puisque je comprends tout à fait le choix fait par l'équipe de rtCamp, et il me semble tout à fait normal que l'outil qu'ils développent soit avant tout adapté à leurs besoins. Il me paraît d'ailleurs important de souligner qu'ils mettent à disposition, gratuitement, avec une simple licence MIT, une application très complète et documentée, et ceux depuis déjà plusieurs années (la première version d'EasyEngine a été publiée en 2014).

Finalement, c'est en parcourant les articles du blog d'EasyEngine fin Décembre, que j'ai découvert qu'un fork de la version 3 d'EasyEngine baptisé WordOps était actuellement en développement et qu'une première pre-release était disponible sur Github.

Ayant contribué de mon mieux au projet EasyEngine v3 en publiant un certain nombre de scripts ainsi que la majorité de mes configurations Nginx, j'ai été contacté par l'équipe de WordOps que j'ai finalement intégré début Février.

Nous avons publié la première version "stable" de l'application début Mai et il était donc temps de rédiger un article pour vous présenter WordOps.

WordOps qu'est ce que c'est ?

C'est un outil en ligne de commande qui facilite l'administration d'un serveur et le déploiement de sites avec Nginx (notamment WordPress) en utilisant des commandes simples -  faciles à mémoriser.

Quels sont les pré-requis pour installer WordOps ?

Du côté hardware, il n'y a pas vraiment de pré-requis, puisque l'application est développée en Python avec le framework Cement et ne nécessite que quelques mégaoctets d'espace disque pour le stockage des librairies.

Pour une utilisation en production, les services installés et configurés par WordOps tel que Nginx, PHP-FPM ou MariaDB, nécessitent un minimum de ressources pour fonctionner. Ce minimum peut varier en fonction du trafic des sites hébergés. C'est pourquoi nous conseillons d'installer WordOps sur un serveur disposant d'au moins 2Go de RAM et si possible d'un processeur multi-core (qu'ils soient virtuels ou non) pour garantir le bon fonctionnement des différents services déployés avec WordOps et donc la disponibilité des sites hébergés.

Par contre, si vous comptez utiliser WordOps pour du développement, il devrait normalement fonctionner sur n'importe qu'elle machine/VM disposant de 512mo de RAM ou plus.

Nous avons d'ailleurs ajouté depuis peu le support de la distribution Raspbian 9, qui permet donc l'installation sur Raspberry Pi (nos tests ont été réalisés sur le modèle 3B+).

Du côté software, les distributions linux supportées sont :

  • Ubuntu 16.04 LTS (Xenial)
  • Ubuntu 18.04 LTS (Bionic)
  • Ubuntu 19.04 (Disco)
  • Debian 8 (Jessie)
  • Debian 9 (Stretch)
  • Raspbian 9 (Stretch)

Quelles sont ses fonctionnalités ?

WordOps réalise non seulement l'installation et la configuration des paquets nécessaires au déploiement d'un site (Nginx, PHP, MariaDB) mais il s'occupe également de la création des vhosts Nginx, de la base de données, d'installer WordPress et même d'obtenir un certificat SSL Let's Encrypt, le tout réalisable en une seule ligne de commande.

Dans le cas d'un site WordPress, vous disposez de plusieurs solutions de cache (optionelles) : Nginx fastcgi_cache, Redis (full page cache + object cache) ou WP-Super-Cache.

Enfin WordOps dispose d'un tableau de bord (que j'ai réalisé depuis un template bootstrap de Creative Tim et avec la suite de monitoring Netdata) qui permet à la fois de monitorer le serveur mais également d'accéder à des outils tel que PhpMyAdmin, Adminer, eXtplorer, phpRedisAdmin etc.. Une démo est disponible à l'adresse suivante : demo.wordops.eu.

Qu'est ce qu'il y a sous le capot ?

  • Nginx stable v1.16.1  (custom) avec le support du HTTP/2 HPACK de Cloudflare, de la compression avec Brotli, et des modules tiers tel que ngx_cache_purge ou ngx_vts
  • PHP 7.2 & PHP 7.3
  • MariaDB server 10.3
  • Redis 5.0
  • Netdata pour le monitoring
  • Acme.sh pour la gestion des certificats SSL Let's Encrypt
  • WP-CLI pour le déploiement des sites WordPress

Et bien sûr, un ensemble de templates de configuration Nginx, qui ont pour objectif de délivrer les meilleures performances possibles ainsi qu'un niveau de sécurité optimale. Pour cela, WordOps utilise par exemple Nginx en tant que load-balancer pour répartir la charge sur les pools php-fpm en utilisant plusieurs unix sockets. On retrouve également un certain nombre de directives limitant l'accès et/ou l'exécution et le téléchargement de certains fichiers afin de bloquer les tentatives d'attaques régulièrement utilisées.

Installer WordOps

Un script pour automatiser l'installation de WordOps est bien sûr disponible, il s'exécute avec la commande suivante :

wget -qO wo wops.cc && sudo bash wo

Si vous souhaitez installer manuellement WordOps, un guide est disponible dans la documentation

Durant l'installation, WordOps vous demandera un nom d'utilisateur et une adresse email. Ces informations sont uniquement utilisées pour générer le fichier .gitconfig nécessaire au fonctionnement de git, qui est utilisé pour enregistrer les différentes configurations du serveur.

Commencer avec WordOps

Après avoir installé WordOps, la première étape est d'activer la complétion des commandes, il suffit pour cela d'utiliser la commande :

source /etc/bash_completion.d/wo_auto.rc

Nous pouvons donc commencer à utiliser les commandes WordOps, dont la structure est la suivante :

wo <commande> [options]

Vous souhaitez obtenir la liste des commandes disponibles ? Rien de plus simple, utilisez la commande :

wo

Vous pouvez également obtenir des informations sur chacune des sous-commandes en ajoutant les arguments -h ou --help.

Exemple :

wo site create -h

Installer les services (optionnel)

WordOps peut installer les services Nginx, PHP ou MySQL via la commande wo stack ou n'installer que les services nécessaires lors de la création d'un site avec la commande wo site create.

Si vous comptez utiliser WordOps pour héberger vos sites WordPress, il peut être intéressant de commencer par déployqer les services (Nginx, PHP 7.2, MariaDB) ainsi que les outils additionnels (phpMyAdmin, Adminer, OpcacheGui) qui seront disponibles dans le backend accessible via le port 22222 (exemple : https://IP.DU.SERVEUR:22222 ou https://serveur.hostname:22222).

Pour déployer les services, la commande à utiliser est :

wo stack install

Créer votre premier site

Que vous ayez suivi ou non l'étape précédente, vous pouvez créer votre premier site.
La création de site se fait via la commande wo site create avec la structure suivante :

wo site create  [<nom_de_domaine>] [type_de_site] [options] <options>

Pour vous donner un exemple relativement simple, nous allons créer un site WordPress, configuré avec PHP 7.3 et le système de cache nginx fastcgi_cache, sécurisé avec un certificat SSL Let's Encrypt :

wo site create site.tld --wpfc --php73 --letsencrypt

Quelques points à retenir

  • par défaut et en l'absence de l'argument --php73, WordOps utilisera PHP 7.2
  • l'argument --wpfc définit le type de site, ici un site WordPress avec le système de cache Nginx fastcgi_cache. Vous pouvez découvrir tous les autres types de sites dans la documentation.
  • l'argument --letsencrypt est optionel et peut être utilisé avec n'importe quel type de site. Si le site que vous souhaitez créer est un sous-domaine, utilisez alors l'argument --letsencrypt=subdomain pour que WordOps n'essaye pas de générer un certificat SSL pour l'alias www.site.tld.

Voici un exemple qui présente le fonctionnement général de WordOps :

Contribuer

Comme pour la majorité des projets open-source, toute contribution est la bienvenue. Et il n'est pas nécessaire d'être un développeur ou un administrateur système pour contribuer.

Le simple fait de faire un signalement détaillé d'un bug dans l'application est une contribution au projet. Vous pouvez également participer à l'amélioration de la documentation de WordOps, qui peut facilement être éditée car elle est rédigée en markdown et hébergée dans un dépôt Github.

Si vous souhaitez contribuer directement au développement de WordOps, sachez que la rédaction d'un guide est en cours, avec un présentation détaillée des librairies utilisées et les règles à suivre notamment pour le style à appliquer au code (PEP8). Je mettrais à jour cet article dès que le guide sera publié sur le dépôt Github.

Les liens utiles

Commentaires

licence creative common

L’ensemble des articles publiés sur jesuisadmin.fr sont mis à disposition
selon les termes de la licence CC BY-NC-SA 4.0.

Article précédent