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