# Drupal - image docker PHP-FPM de base ## Introduction Ce dépôt permet de créer et de pousser l'image docker 'PHP-FPM' de base pour les sites web de la Ville de Genève. Il se base sur une image `php` avec un *tag* identique aux versions officielles du type `#.#-fpm-alpine#.#`, `#.#.#-fpm-alpine#.#`, `#.#-fpm-alpine` ou `#.#.#-fpm-alpine` en y ajoutant les paquets et librairies nécessaires afin de pouvoir compiler une image *php* type utilisée par les sites Web de la Ville. Il crée également à partir de l'image de base une image pour les tests unitaires en ajoutant `xdebug` à l'image de base. ## CI/CD La *CI* se déclenche uniquement après avoir tagué une version dans *gitlab* qui reprend le type d'image `type_image` (p.ex `drupal_php`, `vdg_php`, etc...) et le *tag* de l'image officielle `#.#-fpm-alpine#.#` en y ajoutant un numéro de version sous la forme `type_image%#.#-fpm-alpine#.#@##` ou un commentaire `type_image%#.#-fpm-alpine#.#@commetaire-explicatif` Le *build* des images de base et de tests est lancé manuellement depuis le menu : *Pipelines* dans *gitlab*. Les images sont ensuite déposées dans le dépôt de la Ville de Genève. Si une image avec le même tag existe déjà dans le dépôt, elle est remplacée par la nouvelle. Cela permet de mettre à jour les versions mineures de PHP. ## Structure Chaque version liée à une image officielle `#.#-fpm-alpine#.#` doit être associée à un sous dossier correspondant au type d'image `type_image` suivi d'un sous dossier `#.#-fpm-alpine#.#` contenant les fichiers `Dockerfile`, `Dockerfile-tests`, `php.ini` et `xdebug.ini`, par exemple : ``` src ├── drupal_php └── 8.1-fpm-alpine3.18 ├── Dockerfile ├── Dockerfile-tests ├── php.ini └── xdebug.ini ``` Pour créer une nouvelle image, il est tout à fait conseillé de partir d'une copie d'un dossier existant et de l'adapter pour préparer les nouvelles images de base et de tests pour les sites Web. Une fois l'image validée localement, il suffit de la commiter dans *gitlab* et d'ajouter un nouveau *tag* pour lancer la *CI*. ## Environnement local Localement, il est possible de récupérer les images à partir du dépôt VdG ou de la reconstruire à des fins de tests en utilisant le script `docker.sh`. Pour initialiser l'environnement local, cloner le projet et rendre le script `docker.sh` exécutable : ```bash chmod +x docker.sh ``` Créer ensuite un fichier `.env` à partir du fichier `.env.dist` : ```bash cp .env.dist .env chmod 600 .env ``` Récupérer dans le *KeePass* les informations de connexion à la registry *Nexus* et renseigner la variable `REGISTRY_PASSWORD` dans le fichier `.env`. ### Commandes locales Pour télécharger localement l'image de base `type_image` avec le *tag* `#.#-fpm-alpine#.#` depuis le dépôt VdG, il faut lancer la commande : ``` ./docker.sh -n type_image -t #.#-fpm-alpine#.# pull ``` Pour télécharger localement l'image de tests avec le *tag* `#.#-fpm-alpine#.#-tests` depuis le dépôt VdG, il faut lancer la commande : ``` ./docker.sh -n type_image -t #.#-fpm-alpine#.# pull-tests ``` Pour reconstuire localement les 2 images `type_image` associées au *tag* `#.#-fpm-alpine#.#`, il faut lancer la commande : ``` ./docker.sh -n type_image -t #.#-fpm-alpine#.# build ``` Pour se connecter dans l'image de base nouvellement téléchargée ou reconstruite : ``` ./docker.sh -n type_image -t #.#-fpm-alpine#.# bash ``` Pour se connecter dans l'image de tests nouvellement téléchargée ou reconstruite : ``` ./docker.sh -n type_image -t #.#-fpm-alpine#.# bash-tests ``` L'aide en ligne de la commande `docker.sh` et la liste complète des options peut être affichée avec la commande : ```bash ./docker.sh help ``` **Notes :** - Si le *type de l'image* et/ou le *tag* n'est pas renseigné, il sera demandé avant l'exécution de la commande souhaitée. - Le bon format du *type* et du *tag* sont également validés par le script et la *CI*.