Ce projet contient le conteneur "wordpress-container" qui contient : - un serveur SSH - un serveur apache2 - WP-CLI - WordPress - Des modèles WordPress
Le fichier de variable d'environnement .env
contient les variables suivantes :
SSH_USER
: nom de l'utilisateur pour se connecter en SSHSSH_PASSWORD
: mot de passe de l'utilisateur rootROOT_PASSWORD
: mot de passe de l'utilisateur rootWORDPRESS_VERSION
: version de WordPress à installerPHP_VERSION
: version de PHP à installerINSTALL_PATH
: chemin vers le dossier où WordPress et les modèles seront téléchargésWORDPRESS_DB_HOST
: hôte de la base de donnéesWORDPRESS_DB_USER
: nom d'utilisateur de la base de donnéesWORDPRESS_DB_PASSWORD
: mot de passe de l'utilisateur de la base de donnéesWORDPRESS_DB_NAME
: nom de la base de donnéesHTTP_PORT
: port d'écoute du serveur HTTPSSH_PORT
: port d'écoute du serveur SSH
Exemple de fichier d'environnement :
###> SSH configuration ###
SSH_USER=user
SSH_PASSWORD=password
ROOT_PASSWORD=password
WORDPRESS_VERSION=6.0.2
PHP_VERSION=7.4
INSTALL_PATH=/home/shared
###< SSH configuration ###
###> Database configuration ###
WORDPRESS_DB_HOST=localhost:3306
WORDPRESS_DB_USER=root
WORDPRESS_DB_PASSWORD=password
WORDPRESS_DB_NAME=wordpress
###< Database configuration ###
###> Docker configuration ###
HTTP_PORT=8500
SSH_PORT=2222
###< Docker configuration ###
Avant de déployer le conteneur, il est nécessaire d'installer les modèles WordPress dans le dossier config/templates
.
En effet, les modèles sont déplacés pendant la construction du conteneur. Il faut reconstruire le conteneur pour ajouter un nouveau modèle.
Pour lancer le conteneur, exécuter la commande suivante :
docker compose up -d
Docker va automatiquement télécharger les images nécessaires et créer le conteneur.
Ce Dockerfile reprend l'image WordPress (https://hub.docker.com/_/wordpress) suivant les arguments WORDPRESS_VERSION
et PHP_VERSION
sous la forme wordpress:${WORDPRESS_VERSION}-php${PHP_VERSION}-apache
.
Exemple :
FROM wordpress:6.0.2-php7.4-apache
Les paquets openssh-server
et mariadb-server
sont téléchargés.
Le paquet openssh-server
sert à créer le serveur SSH de l'image.
Le paquet mariadb-server
permet à WP-CLI de communiquer avec la base de données.
L'utilisateur SSH est créé avec la commande suivante :
RUN useradd -s /bin/bash -g sudo -m -p $(openssl passwd -1 ${SSH_PASSWORD}) ${SSH_USER}
L'option -s /bin/bash
permet de définir le shell par défaut de l'utilisateur.
L'option -g sudo
permet d'ajouter le nouvel utilisateur au groupe sudo
afin d'avoir accès aux fichiers et dossiers du groupe.
L'option -m
permet de créer le dossier de l'utilisateur dans le dossier /home
.
L'option -p
permet renseigner le mot de passe du nouvel utilisateur avec l'argument SSH_PASSWORD
.
Le nom de l'utilisateur est donné avec l'argument SSH_USER
.
Le mot de passe root est modifié par l'argument ROOT_PASSWORD
avec la commande suivante :
RUN echo "root:${ROOT_PASSWORD}" | chpasswd
WP-CLI est installé, comme indiqué dans la documentation (https://wp-cli.org/fr/#installation), avec la commande suivante :
RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \
&& chmod +x wp-cli.phar \
&& mv wp-cli.phar /usr/local/bin/wp
WordPress est téléchargé avec WP-CLI dans le dossier donné par l'argument INSTALL_PATH
avec la commande suivante :
RUN mkdir -p ${INSTALL_PATH}/wordpress/${WORDPRESS_VERSION} \
&& cd ${INSTALL_PATH}/wordpress/${WORDPRESS_VERSION} \
&& wp core download --locale=fr_FR --version=${WORDPRESS_VERSION} --force --allow-root
La version de WordPress est donné avec l'argument WORDPRESS_VERSION
.
La commande wp core download
est exécuté avec les paramètres suivants :
locale=fr_FR
: pour télécharger WordPress en françaisversion=${WORDPRESS_VERSION}
: pour télécharger la version de WordPress donné par l'argumentWORDPRESS_VERSION
force
: écrase les fichiers existants dans le dossierallow-root
: autorise l'exécution de la commande avec les droits root
Les modèles WordPress sont déplacés depuis le dossier config/templates
vers le dossier du container donné par l'argument INSTALL_PATH
avec la commande suivante :
RUN mkdir ${INSTALL_PATH}/templates
COPY ./templates ${INSTALL_PATH}/templates
RUN chmod -R 755 ${INSTALL_PATH}/templates
Les droits de lecture, écriture et exécution sont modifiés afin de permettre au processus de déploiement d'avoir les droits nécessaires sur les fichiers et dossiers des modèles.
Le fichier bash start.sh
est déplacé depuis le dossier config
vers le dossier /
du container avec la commande suivante :
COPY ./start.sh /start.sh
RUN chmod 777 /start.sh
Ce fichier permet à docker de démarrer le serveur SSH en même temps que le serveur apache2 :
#!/bin/bash
/usr/sbin/sshd
/usr/sbin/apache2ctl -D FOREGROUND
L'option -D FOREGROUND
indique au container de continuer son exécution tant que le processus apache2
est en cours d'exécution.
Le Dockerfile se termine avec les 2 commandes suivantes :
EXPOSE 22 80
CMD ["/start.sh"]
La première commande permet d'ouvrir les ports 22
et 80
aux autres containers du réseau interne et la deuxième d'exécuter le fichier bash start.sh
.