86 lines
3.9 KiB
Markdown
86 lines
3.9 KiB
Markdown
# 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*.
|
|
|
|
|