|
|
@@ -0,0 +1,360 @@
|
|
|
+# Docker pour Opentalent
|
|
|
+
|
|
|
+## Installer et configurer une instance Docker
|
|
|
+
|
|
|
+### Installer docker
|
|
|
+
|
|
|
+#### Installation pour Linux
|
|
|
+
|
|
|
+Installer Docker Engine : <https://docs.docker.com/install/linux/docker-ce/ubuntu/>
|
|
|
+Et Docker Compose : <https://docs.docker.com/compose/install/>
|
|
|
+
|
|
|
+Faire :
|
|
|
+
|
|
|
+ docker ps
|
|
|
+
|
|
|
+> Si Docker ne marche pas sans "sudo" appliquer :
|
|
|
+> https://techoverflow.net/2017/03/01/solving-docker-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket/
|
|
|
+> `sudo usermod -aG docker $USER`
|
|
|
+
|
|
|
+### Première mise en place du projet
|
|
|
+
|
|
|
+#### Cloner le projet docker
|
|
|
+
|
|
|
+ git clone git@gitlab.2iopenservice.com:vincent/docker.git
|
|
|
+
|
|
|
+
|
|
|
+#### Cloner les sous-repos
|
|
|
+
|
|
|
+Les repositories suivants doivent être clônés dans les sous-répertoires suivants:
|
|
|
+
|
|
|
+| Folder | Repo | SSH
|
|
|
+| --- | --- | --- |
|
|
|
+| apps/opentalent | [Voir le repository](https://gitlab.2iopenservice.com/developper/opentalent) | <git@gitlab.2iopenservice.com:developper/opentalent.git> |
|
|
|
+| apps/opentalent-admin-2.0 | [Voir le repository](https://gitlab.2iopenservice.com/vincent/opentalent-admin-2.0) | <git@gitlab.2iopenservice.com:vincent/opentalent-admin-2.0.git> |
|
|
|
+| apps/opentalent-config | [Voir le repository](https://gitlab.2iopenservice.com/developper/opentalent-config) | <git@gitlab.2iopenservice.com:developper/opentalent-config.git> |
|
|
|
+| apps/opentalent-platform | [Voir le repository](https://gitlab.2iopenservice.com/opentalent/opentalent-platform) | <git@gitlab.2iopenservice.com:opentalent/opentalent-platform.git> |
|
|
|
+| apps/ot_typo3 | [Voir le repository](https://gitlab.2iopenservice.com/opentalent/ot_typo3) | <git@gitlab.2iopenservice.com:opentalent/ot_typo3.git> |
|
|
|
+| apps/portail | - | - |
|
|
|
+| apps/metabase | [Voir le repository](https://gitlab.2iopenservice.com/vincent/metabase) | <git@gitlab.2iopenservice.com:vincent/metabase.git> |
|
|
|
+| apps/python-scripts/clonedb | [Voir le repository](https://gitlab.2iopenservice.com/opentalent/clonedb) | <git@gitlab.2iopenservice.com:opentalent/clonedb.git> |
|
|
|
+
|
|
|
+
|
|
|
+### 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.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.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](https://gitlab.2iopenservice.com/opentalent/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
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### Finaliser et exécuter
|
|
|
+
|
|
|
+#### Docker php70
|
|
|
+
|
|
|
+Se connecter a opentalent-platform
|
|
|
+
|
|
|
+ docker exec -it php bash
|
|
|
+
|
|
|
+Et exécuter:
|
|
|
+
|
|
|
+ composer install
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+A 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>
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 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`
|
|
|
+
|
|
|
+TODO: à quoi il sert?
|
|
|
+
|
|
|
+#### Docker: `python39`
|
|
|
+
|
|
|
+Héberge différents scripts python, dont [clonedb](https://gitlab.2iopenservice.com/opentalent/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](http://thumbor.org/) 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?
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 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
|