Création d'une image docker pour grav avec php7 et http2

Aujourd'hui nous allons rapidement parler de la mise en place d'http2 dans un conteneur Docker prévu pour faire tourner GRAV.

Certains le savent déjà, j'utilise le CMS Grav (que je recommande vivement) pour faire tourner ce site, ainsi que plusieurs autres.

Récemment, j'ai donc travaillé sur l'image docker que j'utilise pour en mettre à jour les composants principaux :

  • Debian : passage à la version Stretch
  • Apache : utilisation de la version 2.4.25 (à la date d'écriture de cet article)
  • Php : utilisation de php7 au lieu de php5

Avec toutes ces mises à jour, difficile de ne pas être tenté d'activer l'http2 avec! Je vais donc vous montrer ici comme faire, et comment vérifier que l'http2 fonctionne ensuite!

Http2 dans la console de chrome

Création de l'image docker

Il n'y a absolument rien de compliqué dans tout ça, il nous suffit d'activer l'extension, et de configurer le vhost de manière adéquate.

Vous pouvez retrouver l'intégralité des fichiers nécessaires sur github à cette adresse : Projet sur github

Je vais vous montrer ici la configuration de certains fichiers uniquement, il vous faudra donc aller sur github pour aller chercher le reste.

Commençons par le Dockerfile :

FROM debian:stretch
MAINTAINER Nathan Boudou <contact@adiuvo.fr>

USER root
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y git apache2 php libapache2-mod-php php7.0-gd php7.0-curl php7.0-mbstring php7.0-zip php7.0-xml && apt-get clean && rm -rf /var/lib/apt/lists/*
RUN a2enmod php7.0 rewrite http2

RUN rm /etc/apache2/sites-enabled/*
RUN rm -rf /var/www/html/*

COPY html /var/www/html
COPY grav.conf /etc/apache2/sites-available/grav.conf
RUN a2ensite grav
RUN chown -R www-data:www-data /var/www/html

COPY hostname /etc/hostname

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2

RUN ln -sf /dev/stdout /var/log/apache2/access.log
RUN ln -sf /dev/stderr /var/log/apache2/error.log

COPY entry.sh /root/entry.sh

CMD bash -C '/root/entry.sh'

Comme vous pouvez le voir, c'est assez simple: nous installons les différentes dépendances dont nous avons besoin, et ensuite nous activons les modules qui nous intéressent.

J'ai fait le choix ici de démarrer apache à travers un script (entry.sh). Ce choix a été fait il y a un moment déjà, et me permet de créer moi même une image contenant une stack apache sur laquelle j'ai entièrement le contrôle.

À ce stade, tout est en place pour avoir un conteneur docker qui fera tourner grav en php7. Néanmoins, il faut s'assurer d'avoir activé http2 dans notre vhost.

Il suffit d'ajouter la ligne suivante dans votre vhost :

Pour en http uniquement

Protocols h2c http/1.1

Pour en https uniquement

Protocols h2 http/1.1

Une fois que vous avez tout mis en place, buildez votre image et lancez la en tant que conteneur: votre site est servi en http2!

Mais comment le vérifier?

Tester si votre site supporte l'http2

Pour commencer, vous pouvez toujours vous fier aux différents sites qui existe pour valider le bon fonctionnement de votre instance en http2. Il en existe un certain nombre, et ne vous en ferais pas la liste ici car google le fait bien mieux que moi.

Non ici je vais vous montrer comment faire avec curl, puis google chrome (ou chromium)

Tester avec curl

Depuis la version 7.43.0 de curl, http2 est supporté! Il vous suffit donc de lancer une simple commande pour vérifier les headers de votre instance et donc la présence et le fonctionnement d'http2.

Pour vérifier la version de curl sur votre poste curl --version

curl --http2 -vso /dev/null http(s)://adresse:port

Si votre instance possède http2, vous verrez donc l'http2 apparaître dans les headers.

Par exemple : > Connection: Upgrade, HTTP2-Settings

C'est aussi simple que ça!

Tester depuis la console chrome ou chromium

Il est tout à fait possible de vérifier ces informations depuis la console chrome ou même chromium (voir la première image de cet article). Pour cela il suffit d'activer les protocoles dans la console, et de veiller ensuite à la présente de h2 ou h2c.

Voici une capture pour l'activation des protocoles :

Activation des protocoles dans la console chrome

Vous voilà désormais prêt à déployer votre site Grav en php7 avec de l'http2! Et en plus vous pourrez même vérifier que ça marche, c'est pas beau ça?