image de mise en avant pour l'article mémo Docker

Dockeriser un reverse proxy Apache

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

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.