| apps/opentalent |
Voir le repository |
|
| apps/opentalent-admin-2.0 |
Voir le repository |
|
| apps/opentalent-config |
Voir le repository |
|
| apps/opentalent-platform |
Voir le repository |
|
| apps/ot_typo3 |
Voir le repository |
|
| apps/portail |
- |
- |
| apps/metabase |
Voir le repository |
|
| apps/python-scripts/clonedb |
Voir le repository |
|
Configurer le projet
Le fichier .env
Copier le fichier .env.skeleton en .env (attention à ne pas supprimer le fichier .env.skeleton!)
Mettre à jour le contenu de .env selon votre config:
OS: LINUX ou MAC selon votre système d'exploitation
- EMAIL
Les autres variables peuvent être laissées telles quelles.
Nb: le hash de contrôle COMPOSER_HASH change à chaque nouvelle version de composer. Si la version de composer
installée sur les containers change, cette variable doit être mise à jour avec la clé indiquée ici: https://getcomposer.org/download/
Le fichier /etc/hosts
Les domaines locaux doivent être enregistrés sur la machine hôte (=votre machine).
Pour cela, ajouter les lignes suivantes à votre fichier /etc/hosts:
127.0.0.1 local.api.opentalent.fr # Docker 'php70'
127.0.0.1 local.new.api.opentalent.fr # Docker 'php74'
127.0.0.1 local.mailcatcher.opentalent.fr # Docker 'mailcatcher'
127.0.0.1 local.v59.opentalent.fr # Docker 'adminassos'
127.0.0.1 local.phpmyadmin.opentalent.fr # Docker 'phpmyadmin'
127.0.0.1 local.elasticsearch.opentalent.fr # Docker 'es'
127.0.0.1 local.admin.opentalent.fr # Docker 'adminLegacy'
127.0.0.1 local.admin2.opentalent.fr # Docker 'admin'
127.0.0.1 local.thumbor.opentalent.fr # Docker 'thumbor'
127.0.0.1 local.opentalent.fr # Docker 'portail'
127.0.0.1 local.sub.opentalent.fr # Docker 'typo3'
127.0.0.1 local.blackfire.opentalent.fr # Docker 'blackfire'
127.0.0.1 local.metabase.opentalent.fr # Docker 'metabase'
127.0.0.1 local.api-doc.opentalent.fr # Docker 'php-doc'
Attention: les domaines indiqués ici doivent correspondre aux domaines définis dans le fichier .env
Les certificats SSL
Pour permettre l'usage de l'HTTPS, il faut générer des certificats pour les domaines locaux.
Lancer les commandes suivantes :
chmod +x docker/nginx-proxy/certs/ssl_keys.sh
sh docker/nginx-proxy/certs/ssl_keys.sh
Vérifier ensuite la prise en compte des certificats:
docker-compose build
docker-compose up
Si docker up bloque à cause du port 80 : vérifier qu'aucun programme sur votre machine n'écoute le port 80
(Apache est souvent coupable...): https://linuxize.com/post/check-listening-ports-linux/
Faire ensuite un docker stop $(docker ps -a -q)
Synchroniser les données en local
Bases de données
Pour synchroniser les DB, on utilise clonedb. Cet utilitaire est
préinstallé sur le container python39
Pour l'exécuter:
docker exec -it python39 bash
cd clonedb
Puis, pour synchroniser toutes les bases (recommandé si c'est la première synchronisation) :
python3 clonedb.py
Ou, pour synchroniser seulement une ou plusieurs bases :
python3 clonedb.py [operation]
L'opération est le nom défini à la section 'operations' du fichier /env/clonedb/settings.yml
Pour plus d'infos: https://gitlab.2iopenservice.com/opentalent/clonedb/blob/master/readme.md
Elasticsearch
Avec elasticdump
Pour clôner l'index elasticsearch, plusieurs options.
Se connecter au docker php70:
docker exec -it php70 bash
Puis lancer:
npm install elasticdump@3.3.7 -g
elasticdump --input http://elasticsearch.2iopenservice.com:9200//search --output http://es:9200/search_bkp --type=analyzer
elasticdump --input http://elasticsearch.2iopenservice.com:9200//search --output http://es:9200/search_bkp --type=mapping
Pour synchroniser les données complètes (nécessite un bon débit descendant et de l'espace disque disponible pour 50 à 100 Go):
elasticdump --input http://elasticsearch.2iopenservice.com:9200// --input-index=search --output http://es:9200/ --output-index=search_dump --type=data
Pour synchroniser les données d'un type spécifique:
elasticdump --input http://elasticsearch.2iopenservice.com:9200// --input-index=search//course --output http://es:9200/ --output-index=search_dump//course --type=data
Avec fos:elastica
Regénérer un index complet. Nécessite de l'espace disque disponible pour 50 à 100 Go, peut nécessiter plusieurs jours de traitement.
Se connecter au docker php70:
docker exec -it php70 bash
Puis lancer:
app/console fos:elastica:populate --process-isolation --no-debug
Poue ne générer que certains types, lancer:
php app/console fos:elastica:populate --index search --process-isolation --no-debug --no-reset --type organization
php app/console fos:elastica:populate --index search --process-isolation --no-debug --no-reset --type access
Finaliser et exécuter
Docker php70
Se connecter a php70
docker exec -it php70 bash
Installer les vendor:
php composer.phar install
A la première exécution, composer va demander certains paramètres. Vous pouvez tout laisser par défaut, sauf:
database_host: db
database_port: 3306
database_password: mysql660
database_host_cms: db
database_port_cms: 3306
database_password_cms: mysql660
locale: fr
elastic_search_host: es
thumbor_url: 'http://thumbor'
typo3_base_url: 'http://typo3/'
Si le fichier app/config/parameters.yaml vient d'être créé, il est possible que la commande suivante
doive t'être exécutée:
chown 1000:1000 /var/www/html/app/config/parameters.yml
Puis mettre à jour le schéma de la DB:
app/console d:s:u --force
Enfin, afin de prévenir des erreurs de permission:
chmod -R 777 /var/www/html/app/cache/
À ce niveau, la page de documentation d'API Platform devrait être accessible à l'adresse
https://local.api.opentalent.fr/doc
Docker adminLegacy
Se connecter au docker:
docker exec -it adminLegacy bash
Lancer npm install
npm install
Lancer Bower install
bower install
Lancer le serveur front:
gulp serve
Docker typo3
Se déplacer dans le sous-répertoire ot_typo3/docker:
cd apps/ot_typo3/docker
Puis exécuter:
sh clone-install.sh
Enfin, revenir à la racine du projet:
cd ../../..
Plus d'infos ici: https://gitlab.2iopenservice.com/opentalent/ot_typo3/-/blob/master/doc/docker.md
(optionnel) Docker phpdoc
Pour générer la PHP DOC de l'API:
docker run --rm -v /opt/opentalent/apps/api/src/:/data -v /opt/opentalent/apps/apidoc:/output phpdoc/phpdoc:3.1 -d /data -t /output
Le documentation devrait ensuite être accessible à: http://local.api-doc.opentalent.fr
Démarrer les dockers
Pour démarrer une instance docker complète, se placer dans le répertoire de votre projet docker,
puis lancer:
docker-compose up
Patienter quelques secondes, puis dans un nouveau terminal, lancer:
docker exec -it 'adminLegacy' bash
gulp serve
Description des containers
Docker: nginx-proxy
Gère le routage de toutes les requêtes envoyées au ports 80 et 443 de la machine hôte et les redirige
vers le container cible.
Docker: mariaDb
Héberge les bases de données MariaDb de tous les containers.
Les autres docker peuvent ensuite accéder au serveur de base de données de cette manière:
|
|
| Db Host |
db |
| Login |
root |
| Pass |
mysql660 |
Docker: nginx
TODO: à quoi il sert?
Docker: php70
Héberge la partie back du logiciel: https://gitlab.2iopenservice.com/opentalent/opentalent-platform
Ce container embarque une installation de php-fpm v7.0.
Docker: nginx_new
TODO: à quoi il sert?
Docker: php74
Serveur sur lequel est présent la version Symfony 5.3 du Back.
Penser à copier le dossier php7.4/jwt vers config
Docker: python39
Héberge différents scripts python, dont clonedb.
Embarque une installation de python3.9.
Docker: adminLegacy
Héberge l'application frontend Opentalent, version pré-2021:
https://gitlab.2iopenservice.com/vincent/opentalent-admin-2.0/-/tree/master-front
Docker: admin
Héberge l'application frontend Opentalent, version post-2021:
https://gitlab.2iopenservice.com/vincent/admin
Docker: portail
Héberge une instance Typo3 version 8.7, qui sert entre autres le portail Opentalent et le site 2iOpenservice
Docker: typo3
Héberge une instance Typo3 version 9.5, qui sert tous les mini-sites des clients.
Docker: adminassos
TODO: à quoi il sert?
(optionnel) Docker: metabase
TODO: à quoi il sert?
Docker: es
Héberge une instance elasticsearch
TODO: à compléter
Docker: thumbor
Héberge une instance thumbor dont le rôle est de fournir des fichiers via une API.
(optionnel) Docker: phpmyadmin
Héberge une instance phpmyadmin
(optionnel) Docker: mailcatcher
TODO: à quoi il sert?
(optionnel) Docker: blackfire
Héberge une instance blackfire, utilisée pour l'analyse des performances des dockers php
(optionnel) Docker: phpdoc
Héberge une instance phpdoc, qui permet ensuite de générer des documentations automatiques à partir du code PHP.
(optionnel) Docker: jsdoc
TODO: à quoi il sert?
Opérations courantes
Ajouter un certificat SSL pour un nouveau domaine local
Si les docker sont up, tout arrêter:
docker-compose stop
Ajouter les lignes suivantes au fichier docker/nginx-proxy/certs/ssl_keys.sh
cp docker/nginx/certs/default.key docker/nginx/certs/<my-domain.fr>.key
cp docker/nginx/certs/default.crt docker/nginx/certs/<my-domain.fr>.crt
en remplaçant <my-domain.fr> par le nom de domaine attendu.
Copier les deux fichiers nouvellement générés dans
Exécuter le script depuis la racine du projet doker:
sh docker/nginx-proxy/certs/ssl_keys.sh
Supprimer le docker nginx-proxy, puis rebuilder:
docker-compose rm nginx-proxy
docker-compose build
Puis relancer docker.
Problèmes et solutions
Certificat SSL refusé par Chrome
Pour que le certificat soit validé sur chrome, allez à l'adresse cible, ouvrir la console de debugger et entrer :
console.log(window.atob('dGhpc2lzdW5zYWZl'));
Cliquer ensuite n'importe où sur la page, et taper le mot qui s'est affiché dans la console précédemment.
Page blanche sur local.admin.opentalent.fr
Lorsque vous demandez la page http://local.admin.opentalent.fr/#/login ,
la page reste blanche, et le message d'erreur suivants s'affichent dans la console:
Uncaught Error: Cannot find module "@opentalent/ruler/lib/model/rule.class"
Accéder au container adminLegacy:
docker exec -it adminLegacy bash
Puis exécuter:
cd modules/ruler && jison -t rule.jison && babel --presets=es2015 model/**/*.js model/*.js -d lib && npm link && cd ../.. && npm link @opentalent/ruler
Enfin, relancer:
gulp serve
Problème de permission lors de l'accès à local.api.opentalent.fr/
Lorsque vous demandez la page https://local.api.opentalent.fr/doc,
une erreur php s'affiche, avec un message similaire à ceci:
RuntimeException in ClassCollectionLoader.php line 280: Cache directory "/var/www/html/app/cache/dev" is not writable.
Accéder au docker php70:
docker exec -it php70 bash
Puis exécuter:
chmod -R 777 /var/www/html/app/cache/
L'accès SSH est refusé depuis docker
Lorsque l'un de vos containers essaie d'accéder à un serveur extérieur en SSH, l'accès est refusé.
Vérifier d'abord que le répertoire ~/.ssh de votre machine a bien été copié dans le docker à l'emplacement:
/root/.ssh
Si ce n'est pas le cas, ajouter la ligne suivante au Dockerfile concerné:
COPY /.ssh /root/.ssh
Et relancer un:
docker-compose build
Si le problème persiste, vérifier que les droits du répertoire .ssh sont identiques à ceci:
drwxr-xr-x 1 root root 4096 Feb 24 16:01 .
drwx------ 1 root root 4096 May 10 12:04 ..
-rw-r--r-- 1 root root 0 Mar 18 2020 .gitkeep
-rw------- 1 root root 887 Mar 18 2020 id_rsa
-rw------- 1 root root 1678 Mar 18 2020 id_rsa_exploitation
-rw-r--r-- 1 root root 397 May 15 2020 id_rsa_exploitation.pub
-rw-r--r-- 1 root root 888 May 12 14:19 known_hosts
Erreur de type 'table not found' ou 'column not found'
Accéder au docker php70:
docker exec -it php70 bash
Lancer:
app/console d:s:u --force
Une modification des annotations Doctrine n'est pas prise en compte
Suite à une modification des annotations, il faut forcer un vidage du cache symfony:
Accéder au docker php70:
docker exec -it php70 bash
Lancer:
rm -r app/cache/*
chmod -R 777 app/cache/
Puis quitter le docker:
exit
et le redémarrer:
docker restart