Serveur Web avec Docker : Nginx, PHP et PostgreSQL
Utiliser Docker pour mettre en place un serveur Web intégrant une base de données PostgreSQL, PHP-FPM et servi par Nginx.
Un serveur Web incluant généralement un logiciel serveur (Nginx), un interpréteur de script CGI (PHP) et d’un système de gestion de base de données (PostgreSQL), nous allons voir comment mettre en place ces trois composants en utilisant Docker.
Nginx et PHP FPM
Récemment, j’expliquais comment simplement mettre en place un serveur Nginx qui supporte PHP à l’aide de Docker. L’image php:fpm-alpine utilisée y était minimaliste et n’embarquait que très peu d’extension PHP. De plus, aucune base de données n’était présente dans notre infra : c’est ce point là que nous allons corrigé ici.
Pour rappel, nous avions créé l’arborescence suivante dans laquelle nous retrouvons le fichier de configuration nginx.conf, les journaux Nginx et le contenu du site Web dans www :
|
|
|
|
|
|
Après avoir vérifié que nos deux containers web-nginx et web-php sont bien démarrés et que le serveur Nginx est accessible depuis un navigateur Web, nous allons modifier le fichier index.php pour qu’il se connecte à la base de données et affiche la version du SGBD (Système de Gestion de Base de Données, NDLR).
|
|
Si tous ce passe bien, vous devriez obtenir une erreur … wait, what?
Personnaliser l’image Docker de PHP
Le serveur nous indique qu’il y a une erreur : Call to undefined function pg_connect(). En effet, l’image Docker standard de PHP n’embarque que très peu de module. Il est précisé sur la page DockerHub PHP comment ajouter des extensions PHP supplémentaires. Nous allons donc créer notre propre image Docker de PHP pour y intégrer le client PostgreSQL.
Commençons par créer un fichier Dockerfile dans le répertoire docker-web/.build-php (vous pouvez le placer ailleurs). C’est dans ce fichiers que nous allons décrire comment construire l’image :
- Nous partons de l’image
php:fpm-alpine - Nous y ajoutons les paquets
postgresql-devafin de disposer des bibliothèques nécessaire aux extensions PHP PostgreSQL - L’image
php:fpm-alpineembarque des scripts pour faciliter l’ajout d’extension, nous les utilisons pour ajouterpgsqletpdo_pgsql.
|
|
Il faut également modifier le fichier docker-compose.yml pour préciser que nous voulons utiliser notre image plutôt que php:fpm-alpine. Nous renseignons pour cela la directive build afin d’indiquer à Docker Compose de construire l’image si nécessaire (premier démarrage, modification du fichier Dockerfile, etc…), ou d’utiliser la dernière image construite si aucune modification n’a été opérée depuis le dernier build.
|
|
host:~# docker-compose up -d
Si tous ce passe bien, vous devriez obtenir une erreur … wait, again?
Le container PostgreSQL
Évidement, il nous manque le container PostgreSQL, que nous avons déjà nommé ci-dessus dans le fichier index.php : web-pgsql.
host:~# mkdir -p docker-web/data # Pour stocker le contenu de la base de données
Pas besoin de faire compliqué ici, nous allons simplement utiliser l’image officielle et Docker Compose pour configurer et démarrer le container PostgreSQL :
- Le container est nommé
web-pgsql; - Le répertoire
./docker-web/dataest monté pour y stocker le contenu de la base de données ; - Les variables d’environnement suivantes sont définies :
POSTGRES_PASSWORD, cette variable définit le mot de passe de l’utilisateurPOSTGRES_USERpour PostgreSQL ;POSTGRES_USER, cette variable créera l’utilisateurfoobar. S’il n’est pas spécifié, l’utilisateur par défaut depostgressera utilisé ;POSTGRES_DB, cette variable créera la base de donnéesfoobar. S’il n’est pas spécifié,la valeur dePOSTGRES_USERsera utilisée.
foobar:foobar pour me connecter à la base de données. Pensez à remplacer les variable d’environnement par vos propres valeurs ;)
|
|
host:~# docker-compose up -d
Si tous ce passe bien, vous devriez obtenir une erreur … Ah non, pas cette fois-ci, maintenant que tout est en place la fonction pg_version() renvoie les infos des versions client/serveur de PostgreSQL.
Références
Cet article est mis à disposition selon les termes de la Licence Creative Commons Attribution-ShareAlike 4.0 International.
Cet article a été publié il y a 394 jours, son contenu peut être inexact, voire erroné, et l'application des conseils ou consignes présents dans cet article doit être fait à votre propre appréciation. L'auteur de l'article ne pourra être tenu responsable des inconvénients pouvant résulter de l'application des conseils et consignes énoncés dans cet article.





Share this post
Twitter
Google+
Facebook
Reddit
LinkedIn
StumbleUpon
Pinterest
Email