image de mise en avant pour l'article Migration Docker d'un site web PHP

Migration Docker d’un site web PHP

Temps de lecture estimé: 2 minutes

cet article fait partie d’une série d’articles sur la Dockerisation de toute mon infra, mes services et applications en ligne.

c’est un projet un vieillissant que je ne modifie pas souvent et qui est resté avec des technos pas forcement au gout du jour. ça utilise le framework PHP codeIgniter en version 3 et pour compiler des fichiers less je vais avoir besoin de Grunt et de quelques dépendances Node (et bien sûr d’un serveur web et de PHP). Je verrai ensuite pour le moderniser (et le faire passer sous python)

je ne vais pas utiliser l’image Docker de httpd, mais plutôt une Ubuntu sur laquelle je vais construire au fur et à mesure.

globalement,

  • j’installe les dépendances nécessaires
  • je copie les fichiers de mon application dans l’image Docker
  • je fournis aussi les fichiers de configuration de mon vhost apache

Mon fichier Dockerfile final ressemble à

# à partir de l'image d'ubuntu 22.04
FROM ubuntu:22.04

# update et upgrade général de la distrib ubuntu 
# et installation et configuration de la timezone Europe/Paris 
# en mode non interactif de tzdata
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update -yq \
&& apt-get upgrade -yq \
&& apt-get install -yq tzdata --no-install-recommends \
&& ln -fs /usr/share/zoneinfo/Europe/Paris /etc/localtime \
&& dpkg-reconfigure --frontend noninteractive tzdata

# installation du serveur apache, de PHP en mode FPM et des autres outils nécessaires 
RUN apt-get install nano apache2 brotli libapache2-mod-fcgid php-fpm php-curl php-memcached php-tidy memcached wget grunt webp npm git -yq --no-install-recommends

WORKDIR /root
RUN wget https://dlcdn.apache.org/incubator/pagespeed/1.14.36.1/x64/mod-pagespeed-apache-incubating-beta_1.14.36.1-r0_amd64.deb &&  dpkg -i mod-pagespeed-apache* && apt-get install -f

# copie de l'application 
COPY /app /var/www/

# Installation des dépendances Node, Bower et compilation des fichiers avec grunt 
WORKDIR /var/www
RUN npm install && npm install bower -g 
RUN bower install --allow-root 
RUN grunt

# copie de la configuration générale d'Apache et des fichiers vhost 
COPY deploy/conf/apache2/sites-enabled /etc/apache2/sites-enabled
COPY deploy/conf/apache2/apache2.conf /etc/apache2/apache2.conf

# activation des modules apaches nécessaires
# et désactivation du fichier de configuration du host par défaut
RUN  a2enconf php8.1-fpm \
&& a2enmod proxy \
&& a2enmod proxy_fcgi \
&& a2enmod ssl \
&& a2enmod rewrite \
&& a2enmod http2 \
&& phpenmod curl \
&& phpenmod memcached \
&& phpenmod tidy \
&& a2enmod ext_filter \
&& a2enmod pagespeed \
&& a2enmod brotli \
&& a2dissite 000-default

# ports nécessaires
EXPOSE 80
EXPOSE 443

# lancement du serveur web et de PHP
CMD /usr/sbin/php-fpm8.1 && apache2ctl -D FOREGROUND

Pour des raisons de sécurité, mes certificats letsencrypt ne doivent en aucun cas être présents sur ce projet (et surtout inclus dans un commit et poussé sur le dépôt git) et ils ne doivent pas non plus être inclus directement dans le build de l’image Docker.

Ils vont être inclus en spécifiant un volume au lancement de l’image. J’ai vu qu’il était possible de les inclure sous sous forme de secrets Docker, un peu de la même manière que les secrets sous Kubernetes, mais ça je verrai dans un second temps.

Ce site n’utilise ni base de données et n’a pas besoin de persister les données, donc je n’ai pas besoin d’un volume Docker spécifique.

comme les autres projets, je déploie ce site avec un script deploy.sh qui contient docker run

#!/bin/bash
docker build -t anthonygj/resume-website . -f ./deploy/Dockerfile

docker container rm -f resume-website

docker run -dit \
-p 81:80 -p 445:443 \
-v /etc/letsencrypt/:/etc/certs/ \
--network=infra \
-h www.anthony-jacob.com \
--restart=always \
--name resume-website \
anthonygj/resume-website

et voilà!! Mon image Docker est bien déployée et fonctionnelle. pour avoir les bonnes redirections, je n’oublie pas d’ajouter un nouveau fichier de configuration et de redéployer mon reverse proxy apache pour qu’il prenne en compte ce nouveau site.

Pour suivre les autres étapes de la migration de mon serveur, ça se passe sur l’article récapitulatif

Partagez l'article:
FacebookTwitterEmailLinkedIn

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.