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.
le premier container que j’ai mis en place c’est le reverse proxy apache. C’est le point d’entrée pour tous mes services web qui s’occupera de rediriger les requêtes sur les bons services / containers Docker.
je ne vais pas utiliser l’image Docker de httpd mais Je suis plutôt parti d’une image Docker d’Ubuntu 22.04 sur laquelle je viens installer un serveur apache et toutes les dépendances dont j’ai besoin. j’ai en local (sur un dépôt git en fait) , un répertoire contenant tous mes fichiers de configuration apache et mes vhosts que je copie dans l’image Docker.
mon fichier Dockerfile ci-dessous
# à partir de l'image d'ubuntu 22.04
FROM ubuntu:22.04
# update et upgrade général de la distrib ubuntu
RUN apt-get update -yq \
&& apt-get upgrade -yq
# installation du serveur apache et des autres outils nécessaires
RUN apt-get install wget ca-certificates brotli nano curl dnsutils apache2 libapache2-mod-fcgid -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 la configuration générale d'Apache et des fichiers vhost
COPY conf/apache2/sites-enabled /etc/apache2/sites-enabled
COPY 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 a2enmod proxy \
&& a2enmod proxy_http \
&& a2enmod ssl \
&& a2enmod rewrite \
&& a2enmod http2 \
&& a2enmod proxy_wstunnel \
&& a2enmod pagespeed \
&& a2enmod brotli \
&& a2enmod headers \
&& a2dissite 000-default
# ports nécessaires
EXPOSE 80
EXPOSE 443
# lancement du serveur web
CMD apache2ctl -D FOREGROUND
un exemple de fichier de configuration de vhosts pour mon site CV qui tourne sous un container Docker qui s’appelle resume-website et sous le même réseau docker (infra)
<VirtualHost *:80>
ServerAdmin contact@anthony-jacob.com
ServerName www.anthony-jacob.com
Protocols h2 http/1.1
ErrorLog ${APACHE_LOG_DIR}/www.anthony-jacob.com.error.log
CustomLog ${APACHE_LOG_DIR}/www.anthony-jacob.com.access.log combined
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>
<VirtualHost *:443>
ServerAdmin contact@anthony-jacob.com
ServerName www.anthony-jacob.com
Protocols h2 http/1.1
<IfModule mod_brotli.c>
AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/javascript
</IfModule>
ProxyPreserveHost on
ProxyRequests off
ProxyPass / https://resume-website:443/
ProxyPassReverse / https://resume-website:443/
<IfModule mod_ssl.c>
SSLEngine on
SSLCipherSuite HIGH:MEDIUM
SSLProtocol all -SSLv2
SSLCACertificateFile /etc/certs/live/anthony-jacob.com/cert.pem
SSLCertificateFile /etc/certs/live/anthony-jacob.com/fullchain.pem
SSLCertificateKeyFile /etc/certs/live/anthony-jacob.com/privkey.pem
</IfModule>
<Location />
Order deny,allow
Allow from all
</Location>
ErrorLog ${APACHE_LOG_DIR}/www.anthony-jacob.com.error.log
CustomLog ${APACHE_LOG_DIR}/www.anthony-jacob.com.access.log combined
</VirtualHost>
et je lance tout ça avec un script de plusieurs commandes
#!/bin/bash
docker build -t anthonygj/reverse-proxy . -f ./Dockerfile
docker container rm -f reverse-proxy
docker run -dit \
-p 80:80 -p 443:443 \
-v /etc/letsencrypt/:/etc/certs/ \
--network=infra \
-h proxy.anthony-jacob.com \
--restart=always \
--name reverse-proxy \
anthonygj/reverse-proxy
et voilà, la première brique de mon infra est posé, n’hésite pas à revenir et consulter le reste de la migration