L'utilisation avec docker en mode développement implique, pour éviter de polluer l'espace de travail sur le poste du
développeur avec les répertoires `app/tmp`, `vendors` ou `node_modules`, de lister les fichiers à envoyer dans le
conteneur docker dans les fichiers `docker-compose.yml` et `docker/app/Dockerfile`.
Cela ne pose pas de problème pour les fichiers se trouvant dans `app`, mais peut nécessiter des ajustements si des fichiers
sont ajoutés dans d'autres répertoires ou à la racine.
### Patches SQL
Par ailleurs, pour pouvoir passer les fichiers SQL au lancement du docker, il faut penser, si on renomme ou ajoute des
fichiers SQL, à modifier la fonction `init_data_db` du fichier `docker/app/usr/bin/docker-entrypoint.sh`.
### Fichiers importants pour docker
| Fichier / dossier | Git | Commentaire |
| --- | --- | --- |
| `docker/app/Dockerfile` | Nouveau | `Dockerfile` du conteneur applicatif |
| `docker/app/etc/apache2/sites-available/webdpo.conf` | Nouveau | Configuration apache du conteneur applicatif |
| `docker/app/etc/cron.d/web-dpo` | Nouveau | Tâche planifiée du conteneur applicatif |
| `docker/app/usr/bin/composer-install.php` | Nouveau | Script facilitant l'installation de `composer` sur le conteneur applicatif |
| `docker/app/usr/bin/docker-entrypoint.sh` | Nouveau | Script exécuté au lancement du conteneur applicatif, passe les patches SQL, corrige les sources de PHPUnit, création de liens symboliques, modification des permissions et lancement des services (cron, apache) |
| `docker/app/var/www/html/web-dpo/app/Config/database.php` | Nouveau | Configuration de la connexion à la base de données propre au conteneur applicatif |
| `docker/app/var/www/html/web-dpo/app/Config/email.php` | Nouveau | Configuration du serveur de mail propre au conteneur applicatif |
| `docker/postgres/docker-entrypoint-initdb.d/000-init.sql` | Nouveau | Création de l'utilisateur et de la base de données `webdpo` sur le conteneur PostgreSQL |
| `.env` | Nouveau | Variables d'environnement utilisées pour les conteneurs docker |
| `cake_utils.sh` | Nouveau | Lancement de commandes (pre_commit, lint, tests, ...) dans le conteneur applicatif |
| `docker-compose.sh` | Nouveau | Commandes permettant de nettoyer ou de lancer les conteneurs docker nécessaires à web-DPO (voir ci-dessous) |
| `docker-compose.yml` | Nouveau | `docker-compose` des services de `web-DPO` |
| `README-docker.md` | Nouveau | Ce fichier d'information |
## Commandes
### Lancement de web-DPO
```bash
./docker-compose.sh web-dpo
```
### Nettoyage des images docker etc...
Lorsqu'on change de page ou que l'on a fait des modifications importantes, pour supprimer les images docker etc et
repartir sur une installation propre.
```bash
./docker-compose.sh clear
```
### Exécution côté conteneur applicatif
```bash
docker-compose exec web-dpo-app /bin/bash
```
#### Console de vérification de l'application
```bash
sudo-u www-data vendors/bin/cake checks -app app
```
#### Lancement de l'intégration continue manuellement
for file in $(find -L"${__APP__}"-type f \(-name"*.php"-or-name"*.ctp"\)\(-not-path"*/Plugin/*"-or-path"*/Plugin/CakeTest/*"\)-not-path"*/plugins/*"-not-path"*/vendors/*" | sort-t'/') ; do
php -l "${file}"
code=$?
if [ $code -ne 0 ] ; then
return=$code
fi
done
set -o errexit
return $return
}
lint_po()
{
local code=0
local return=0
set +o errexit
for file in $(find -L"${__ROOT__}"-type f -name"*.po"\(-not-path"*/Plugin/*"-or-path"*/Plugin/CakeTest/*"\)-not-path"*/plugins/*"-not-path"*/vendors/*" | sort-t'/') ; do
echo "${file}"
msgfmt -v -c -o /dev/null "${file}"
code=$?
if [ $code -ne 0 ] ; then
return=$code
fi
done
set -o errexit
return $return
}
lint_sh()
{
local code=0
local return=0
set +o errexit
for file in $(find -L"${__ROOT__}"-type f -name"*.sh"\(-not-path"*/Plugin/*"-or-path"*/Plugin/CakeTest/*"\)-not-path"*/plugins/*"-not-path"*/vendors/*" | sort-t'/') ; do
echo "${file}"
/bin/bash -n "${file}"
code=$?
if [ $code -ne 0 ] ; then
return=$code
fi
done
set -o errexit
return $return
}
lint_sql()
{
local code=0
local return=0
which pgsanity > /dev/null 2>&1 || ( >&2 printf "${_red_}Error:${_default_} pgsanity is not installed, fix it with: ${_cyan_}sudo pip install pgsanity${_default_}" ; exit 1 )
set +o errexit
for file in $(find -L"${__APP__}/Config/Schema/CreationBase/""${__APP__}/Plugin/"-type f -name"*.sql"-not-path"*/Plugin/*"-not-path"*/plugins/*"-not-path"*/vendors/*" | sort-t'/') ; do
echo "${file}"
pgsanity "${file}"
code=$?
if [ $code -ne 0 ] ; then
return=$code
fi
done
set -o errexit
return $return
}
# Create and tail the log files of a CakePHP 2.x install
cake2_tail()
{
local levels="emergency alert critical error warning notice info debug"
cake2_check && \
echo "Preparing to tail logs..."
# @todo filter by user/group (apache|www-data|jenkins)
for level in $levels ; do
local file="app/tmp/logs/${level}.log"
sudo touch "${file}"
sudo chown www-data: "${file}"
done
tail -f app/tmp/logs/*.log
return $?
}
pre_commit()
{
# phpcpd 3.0.1, 2020-04-04 19h11
# Found 39 clones with 1622 duplicated lines in 41 files (3.17% duplicated lines out of 51168 total lines of code.)
set +o errexit
(
cake2_clear \
&& lint_php \
&& lint_sh \
&& lint_po \
&& if [ $( which pgsanity > /dev/null 2>&1 ;echo$?) -eq 0 ] ; then lint_sql ; fi \
&& tests "app" "AllTests" \
)
code=$?
set -o errexit
if [ $code -ne 0 ] ; then
>&2 echo "Erreur lors des vérifications de pré-commit ($code)"
else
echo "Succès lors des vérifications de pré-commit ($code)"