DOCUMENTATION DE L'INSTALL DES MODULES D'AUTHENTIFICATION, PUBLICATIONS ET SALLES DE RÉUNION SUR LIPN-INTRANET-DEV
participants: Omar, Jaime, Jorge
date: 5-8 juin 2020
1. Création d'une image docker pour le module d'AUTHENTIFICATION
1.1.1 Création du fichier dockerfile Dockerfile /server/Dockerfile
λ> docker build --pull --rm -f "server/Dockerfile" -t authentication:latest "server"
1.2 lancer l'image docker
λ> docker run --rm -it -p 3000:3000/tcp authentication:latest
2. Le serveur écoute sur localhost
App name | id | version | mode | pid | status | restart | uptime | cpu | mem | user | watching |
---|---|---|---|---|---|---|---|---|---|---|---|
authentication_server | 0 | 0.0.0 | fork | 45 | online | 0 | 0s | 0% | 28.6 MB | root | enabled |
Use `pm2 show <id|name>` to get more details about an app Done in 1.28s.
3.3 PM2 a été intégré à l'image
3.4 On a un problème parce que le containeur s'arrête…
authentication on master [!?] took 2s
λ> docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
%
3.5 ON rajoute la ligne sur FROM Dockerfile
CMD ["npx", "pm2-runtime", "process.json"]
3.6 ON régénère l'image docker
λ> docker build --pull --rm -f "server/Dockerfile" -t authentication-server:latest "server"
3.6bis (on lance toutes ces commandes depuis authentication/server)
3.7 on relance
λ> docker run --rm -it -p 3000:3000/tcp authentication-server:latest 2020-06-05T14:19:38: PM2 log: Launching in no daemon mode 2020-06-05T14:19:38: PM2 log: [Watch] Start watching authentication_server 2020-06-05T14:19:38: PM2 log: App [authentication_server:0] starting in -fork mode- 2020-06-05T14:19:38: PM2 log: App [authentication_server:0] online 2020-06-05 14:19 +00:00: GET / 200 8.003 ms - 35
3.8 ON procède à paramétrer le fichier authentification / server / config / auth.js
3.9 Pour sécuriser l'accès au ldap on va d'abord passer les identifiants ldap de michael par ligne de commande
λ> docker run --rm -it -p 3000:3000/tcp -e NODE_ENV=production authentication-server:latest
(c'est la variable NOD_ENV qui pemrmet de passer les identifiants)
3.10 (notamment on a balancer tous les données pour s'authentifier sur des variables d'environement)
3.11 On fait un commit (git add Dockerfile
, process.json, ) et push
8.1 Erreur:
{"error":{"message":"\"ldap://lipn-ldap-maitre:389\" is an invalid LDAP url (protocol)"}}
8.2 Il faut créer un fichier docker.compose.yml dans le root du projet authentification pour contrer le problème des guillemets (docker ne les interpète pas bien)… ce problème concerne la sécurisation des clés d'authentification dans des fichier des variables d'environnement
root@lipn-intranet-dev:~/authentication# docker-compose up
8.3 La commande CURL marche à partir de lipnssh avec les identifiants de @jaime (pas avec ceux de Jorge ni avec ceux d'Omar)
On clone https://depot.lipn.univ-paris13.fr/etamine/plugins/gateway sur la racine de lipn-intranet-dev
[depot.lipn.univ-paris13.fr] Sign in - GitLab LIPN GitLab
On va créer le fichier Dockerfile à la racine de gateway
FROM node:lts-alpine Working directory WORKDIR /app Install dependencies COPY package*.json . RUN yarn install Copy files COPY . . Listening port EXPOSE 8080 Default command CMD ["npx", "pm2-runtime", "process.json"]
On attire notre attention sur le fichier gateway.config.yml où son configurés les ports d'écoute de gateway
On configure le fichier docker.compose.yml
version: '3.1'
services:
gateway:
containername: gateway
restart: always
build: .
ports:
- 8080:8080
environment:
- AUTHENDPOINT=http://localhost:3000
- BOOKINGENDPOINT=http://localhost:3001
- PUBLICATIONENDPOINT=http://localhost:3002
depuis /gateway on fait docker-compose up
cette commande a créer les images et il a lancer les conteneurs docker
on lance le service d'authentification
cd /authentification/
docker-compose up
Nous avons un erreur parce qu'autant le service d'authentification que le gateway utilisent le port 8080
On configure les ports sur un ficher .env dans /gateway
GATEWAYPORT=8000
GATEWAYHOST=localhost
AUTHENDPOINT=http://localhost:3000
BOOKINGENDPOINT=http://localhost:3001
PUBLICATION_ENDPOINT=http://localhost:3002
root@lipn-intranet-dev:~/gateway# docker-compose up –build
MAIS l'erreur persiste (gateway continue à écouter sur le port 8080)
On va le ressoudre de la façon suivante:
25.1 sur le docker.compose on déclare ports: 8000:8080
c'est à dire, le port extérieur 8000 est redirigé vers le port 8080 du conteneur docker
25.2 et sur le Docker file on expose 8080
image.png
Télécharger image.png (51.57 KB)
26 on supprime le fichier .env qu'on avait fait sur /gateway
27 on démarre le serveur sur intranet-dev avec docker-compose up -d pour lui dire que c'est un daemon
image.png
Télécharger image.png (167.97 KB)
maintenant les conteneurs docker pour l'authentification et pour le gatweays sont lancés et sur le navigateur depuis l'extérieur l'adresse lipn.univ-paris13.fr/intranet-dev réponds…
Screenshot20200612075852.png
Télécharger Screenshot20200612075852.png (283.95 KB)
On va tester juste le serveur d'authentification à travers gateway
et nous avons un erreur Bad request
curl -d '{“username”: “pepito”, “password”:“peye”}' -H “Content-Type: application/json” 192.168.90.43:3000/login
curl -d '{“username”: “pepito”, “password”:“peye”}' -H “Content-Type: application/json” 192.168.90.43:3000/login
Empty reponse from server
On essaye de changer le port du gateway à 8081 sur docker-compose.yml
services:
gateway:
containername: gateway
restart: always
build: .
ports:
- 8081:8080
environment:
- GATEWAYPORT=8080
- GATEWAYHOST=localhost
- AUTHENDPOINT=http://localhost:3000
- BOOKINGENDPOINT=http://localhost:3001
- PUBLICATIONENDPOINT=http://localhost:3002
On essaye de mofidier gateway/config/gateway.config.yml pour configurer directement le port 8081
Notre problème est que les containeurs docker ne communique pas entre eux (gateway est isolé d'authentication)
31.1 On va créer un réseaux virtuel entre containeurs docker
root@lipn-intranet-dev:~# docker network connect mybridge authentication-api
root@lipn-intranet-dev:~# docker network connect mybridge authentication-api
Jaime ARIAS
docker container exec -it gateway sh
Jorge GARCIA FLORES a envoyé une image
image.png
Télécharger image.png (159.54 KB)
31.2 Jaime ARIAS vient de se connecter au containeur gateway et de faire un ping vers le containeur authentication-api
Jaime ARIAS a envoyé une image
image.png
Télécharger image.png (38.08 KB)
Jorge GARCIA FLORES
31.2 Depuis l'interieur du conaieneur gateway on fait un curl vers le containeur authentication-api
curl authentication-api:3000
Jorge GARCIA FLORES
31.3 On va déclarer dans /gateway/docker-compose.yml' le réseux "backend" pour tous le microservice de Pétale (qui seront tous de conteneurs docker: un par microservice)
networks:
default:
external:
name: backend-network
et on crée le réseaux à la main
root@lipn-intranet-dev:~/gateway# docker network create -d bridge backend-network
31.3 Il faut également rajouter le réseau inter conteneur docker backend-network au docker.compose.yml du module d'authentification
networks:
default:
external:
name: backend-network
image.png
Télécharger image.png (79.77 KB)
31.4 La commande docker network ls nous permet de voir les réseaux actifs
image.png
Télécharger image.png (151.96 KB)
root@lipn-intranet-dev:~/authentication# docker container exec -it gateway sh nous permet de nous connecter dans gateway pour faire ping sur authentication
Jorge GARCIA FLORES
31.5.1 gateway écoute sur le port 8081
31.5.2 il définit un endpoint d'authentification dans le docker compose
AUTH_ENDPOINT=authentication-api:3000
31.5.3 dans gateway/config/gateway-config.yml on fait référence au meme endpoint
serviceEndpoints:
authService:
url: '${AUTH_ENDPOINT:-authentication-api:3000}'
si on se connecte dans le conteneur gateway et on lance directement le curl envers authentication, il marche
Omar KEBLI: on t'entends mal Omar
image.png
Télécharger image.png (166.05 KB)
si on met les adresses ip harcodés dans gateway-config.yml apparemment ça marche
Jorge GARCIA FLORES
31.6 Ça ne marche pas... on essaye de fusioner les deux composants dans un seul conteneur docker
Jorge GARCIA FLORES
31.7 Dès ll'intérieur ça marche /app # curl -d '{"username": "pepito", "password":"peye"}' -H "Content-Type: application/json" localhost:8081/login Unauthorized
31.8 L'erreur était issu d'une configuration érronée dans le fichier root@lipn-intranet-dev:~/gateway/config/gateway-config.yml
sur la ligne 4 de ce fichier, dans la section "http", la valeur était "localhost". Jaime a enlevé ce champ et tout a marché...
32. (à partir de la racine du serveur)
docker-compose.yml gateway
33. ON va maintenant configurer Apache sur le serveur
root@lipn-intranet-dev:/etc/apache2/sites-available# vim 000-default.conf
34. On teste avec curl
curl -d '{"username": "pepito", "password":"peye"}' -H "Content-Ty
Unauthorizedroot
35. On teste l'authentication avec curl depuis la pasarelle lipnssh
wget -O- --post-data='{"username":"arias","password":"peyeroski"}' --header='Content-Type:application/json' 192.168.90.43/login
35.1 Il ne marche que sur le compte arias mais pas sur celle de jorge ni d'omar
35.2 l'erreur vient du LDAP... le champ accountStatus a la valeur active pour le compte de Jaime et active22 pour celui d'Omar et Jorge
36. ON procède à tester le endpoint de login
curl -d '{"username": "pepito", "password":"peye"}' -H "Content-Type: application/json" 192.168.90.43/login
et ÇA MARCHE!!!
{"user":{"dn":"uid=garciaflores,ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"garciaflores","mail":"garciaflores@lipn.univ-paris13.fr","displayName":"Jorge Garcia flores","accountStatus":"active22"},"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkbiI6InVpZD1nYXJjaWFmbG9yZXMsb3U9cGVvcGxlLGRjPXVuaXYtcGFyaXMxMyxkYz1mciIsImNvbnRyb2xzIjpbXSwidWlkIjoiZ2FyY2lhZmxvcmVzIiwibWFpbCI6ImdhcmNpYWZsb3Jlc0BsaXBuLnVuaXYtcGFyaXMxMy5mciIsImRpc3BsYXlOYW1lIjoiSm9yZ2UgR2FyY2lhIGZsb3JlcyIsImFjY291bnRTdGF0dXMiOiJhY3RpdmUyMiIsImlhdCI6MTU5MjQ4NDgwNX0.iWNiq8ff5AfOtFm0sPInYEuuEp4x7jRiRiIVE06EtBU"}
37: On décide de deployer deux conteneur docker par microservice: un pour le client et un pour le serveur. Il va nous falloir des stress test pour
s'assurer que cette multiplicité de conteneurs docker ne plonge pas la performance...
38: ON FAIT L'IMAGE DU CLIENT D'AUTHENTIFICATION!!!
39: On va éditer le docker-compose global à la racine de l'application
40: Pour la compilation du client (authentication_app) on va paser les variables d'environement dans le build pour qu'elles soit accessibles
au moment de la compilation des interfaces client vue en html5
41: Sur le fichier /docker-compose on a trois conteneur par le moment (section services):
authentication_app
authentication_api
gateway
42: on configure le fichier /etc/apache2/sites-enabled/000-default.conf
on configure les endpoints et les ports:
/ authentification (port 8080)
/api gateway (port 8081)
42: ÇA MARCHE DEPUIS L'EXTÉRIEUR (ON A L'ÉCRAN DE LOGIN)
43. Erreur: lorsqu'on essaye de s'authentifier, l'onglet réseaux de la console d'inspection du navigateur nous envoie vers
localhost://3000
43.1 ON va donc éditer le Dockerfile du client our déclarer les nouvelles variables d'environnement /authentification/client/Dockerfile
# Add
ARG NODE_ENV
ENV NODE_ENV $NODE_ENV
ARG API_URL
ARG APP_BASE_URL
43.2 docker-compose -up
36. ON procède à tester le endpoint de login
curl -d '{"username": "pepito", "password":"peye"}' -H "Content-Type: application/json" 192.168.90.43/login
et ÇA MARCHE!!!
{"user":{"dn":"uid=garciaflores,ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"garciaflores","mail":"garciaflores@lipn.univ-paris13.fr","displayName":"Jorge Garcia flores","accountStatus":"active22"},"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkbiI6InVpZD1nYXJjaWFmbG9yZXMsb3U9cGVvcGxlLGRjPXVuaXYtcGFyaXMxMyxkYz1mciIsImNvbnRyb2xzIjpbXSwidWlkIjoiZ2FyY2lhZmxvcmVzIiwibWFpbCI6ImdhcmNpYWZsb3Jlc0BsaXBuLnVuaXYtcGFyaXMxMy5mciIsImRpc3BsYXlOYW1lIjoiSm9yZ2UgR2FyY2lhIGZsb3JlcyIsImFjY291bnRTdGF0dXMiOiJhY3RpdmUyMiIsImlhdCI6MTU5MjQ4NDgwNX0.iWNiq8ff5AfOtFm0sPInYEuuEp4x7jRiRiIVE06EtBU"}
37: On décide de deployer deux conteneur docker par microservice: un pour le client et un pour le serveur. Il va nous falloir des stress test pour
s'assurer que cette multiplicité de conteneurs docker ne plonge pas la performance...
38: ON FAIT L'IMAGE DU CLIENT D'AUTHENTIFICATION!!!
39: On va éditer le docker-compose global à la racine de l'application
40: Pour la compilation du client (authentication_app) on va paser les variables d'environement dans le build pour qu'elles soit accessibles
au moment de la compilation des interfaces client vue en html5
41: Sur le fichier /docker-compose on a trois conteneur par le moment (section services):
authentication_app
authentication_api
gateway
42: on configure le fichier /etc/apache2/sites-enabled/000-default.conf
on configure les endpoints et les ports:
/ authentification (port 8080)
/api gateway (port 8081)
42: ÇA MARCHE DEPUIS L'EXTÉRIEUR (ON A L'ÉCRAN DE LOGIN)
43. Erreur: lorsqu'on essaye de s'authentifier, l'onglet réseaux de la console d'inspection du navigateur nous envoie vers
localhost://3000
43.1 ON va donc éditer le Dockerfile du client our déclarer les nouvelles variables d'environnement /authentification/client/Dockerfile
# Add
ARG NODE_ENV
ENV NODE_ENV $NODE_ENV
ARG API_URL
ARG APP_BASE_URL
43.2 docker-compose -up
43.4 on fait le ménage sur les conteneurs docker actifs (docker rmi suprime des images dans le filesystem)
docker rmi $(docker images | grep none | awk '{print $3;}')
43.4 Jaime a effacé les images intermediaires en disque (le docker compose est plus rapide maintenant)
43.5: on édite le package.json du client pour enlever les fichers qui ne sont pas nécessaries en production
43.6 dans package.json, axios continue de prendre localhost (on galère pour que les différentes bibliothèques du client prennent
en compte nos variables d'environnement)
44: *************ON VA INSTALLER LE MICROSERVICE DE USER MANAGEMENT*******
45: on fait gitclone à partir du git-lab
46: On va modifier les variables d'environement de la configuration de user-MANAGEMENT
47: On modifie le /docker-compose pour définir la section user-management-api
48: docker-compose up --build user-management_api
48.1: syntax error (ligne 50)
48.2 On utilise la version 3.4 de docker-compose parce qu'elle nous permet de déclarer des variables
49. On a corrigé la déclaration des variables pour les adapter à la dernière versin de docker-compose
49.1 On a une erreur en essayant de déclarer les variables d'environnement
x-ldap-variables: &ldap-variables
environment:
- LDAP_URL=ldap://lipn-ldap-maitre:389
- LDAP_BASE=ou=people,dc=univ-paris13,dc=fr
- LDAP_FILTER=(&(uid={{username}})(accountStatus=active*))
- LDAP_ATTRIBUTES=uid, mail, displayName, accountStatus
- LDAP_ADMIN_USER=cn=admin
- LDAP_ADMIN_PWD=rimichae
nouvelle configuration du service authentication_api<<: *ldap-variables
environment:
- NODE_ENV=production
- API_PORT=3000
50. On remarque que tous les microservices doivent etre configurés sur le ficher de configuration gatwey-config.yml
51 maintenant user-management marche!
curl localhost:3001/user
"controls":[],"uid":"radji","cn":"RADJI WARIS","sn":"RADJI","givenName":"WARIS","mail":"wradji64@gmail.com"},{"dn":"uid=msa, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"msa","cn":"Msa Nodjimba","sn":"Msa","givenName":"Nodjimba","mail":"msa@lipn.univ-paris13.fr"},{"dn":"uid=harang, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"harang","cn":"HARANG Romain","sn":"HARANG","givenName":"Romain","mail":"harang@lipn.univ-paris13.fr"},{"dn":"uid=elhaj-lahsen, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"elhaj-lahsen","cn":"Elhaj-Lahsen Hugo","sn":"Elhaj-Lahsen","givenName":"Hugo","mail":"elhaj-lahsen@lipn.univ-paris13.fr"},{"dn":"uid=quentin.david, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"quentin.david","cn":"DAVID Quentin","sn":"DAVID","givenName":"Quentin","mail":"quentin.david@lipn.univ-paris13.fr"},{"dn":"uid=rousselin, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"rousselin","cn":"Rousselin Pierre","sn":"Rousselin","givenName":"Pierre","mail":"rousselin@math.univ-paris13.fr"},{"dn":"uid=buffiere, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"buffiere","cn":"Buffière Théophile ","sn":"Buffière","givenName":"Théophile ","mail":"buffiere@lipn.univ-paris13.fr"},{"dn":"uid=mittal, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"mittal","cn":"Mittal Aayush","sn":"Mittal","givenName":"Aayush","mail":"aayushmittalaayush@gmail.com"},{"dn":"uid=darya.pchelina, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"darya.pchelina","cn":"Pchelina Darya","sn":"Pchelina","givenName":"Darya","mail":"darya.pchelina@lipn.univ-paris13.fr"},{"dn":"uid=chinaud-chaix, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"chinaud-chaix","cn":"Chinaud-Chaix Clémence","sn":"Chinaud-Chaix","givenName":"Clémence","mail":"chinaud-chaix@lipn.univ-paris13.fr"},{"dn":"uid=gayral, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"gayral","cn":"Gayral Leo","sn":"Gayral","givenName":"Leo","mail":"gayral@lipn.univ-paris13.fr"}]root@lipn-intranet-dev:~#
52. On configure le gatewaysur /gateway/config/gateway-config.yml
53. On devait déclarer la variable JWT_SECRET dans la config d'authentication
53.Problème avec JWT-SECRET
WARNING: The KL variable is not set. Defaulting to a blank string.
ERROR: Invalid interpolation format for "environment" option in service "authentication_api": "JWT_SECRET=K4$KL)wc6%'Y$6{"
53.1 On l'a corrigé en générant une nouvelle variable JWT_SECRET dans /docker-compose
54. On a du répéter la déclaratin de variables sur le docker compose pour que ça marche
55. Lorsqu'on fait une requête curl avec le token d'authentication , on a une erreur de Bad Gateway
56. On peut pas se connecter au port 3001 sur gateway
57. Le problème est de perspective... chaque containeur doit communiquer sur son port 3000 et tous les contaneurs doivent communiquer
seulement avec le gateway
57.1 La seule perspective qu'on a à partir de l'intérieur des conteneurs docker est
--mon port 3000
--le gateweay qui me me permet de communiquer avec les autres microservices
58. curl -H "Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkbiI6InVpZD1hcmlhcywgb3U9cGVvcGxlLGRjPXVuaXYtcGFyaXMxMyxkYz1mciIsImNvbnRyb2xzIjpbXSwidWlkIjoiYXJpYXMiLCJtYWlsIjoiYXJpYXNAbGlwbi51bml2LXBhcmlzMTMuZnIiLCJkaXNwbGF5TmFtZSI6IkphaW1lIEFyaWFzIiwiYWNjb3VudFN0YXR1cyI6ImFjdGl2ZSIsImlhdCI6MTU5MjU3NjE4N30.0UxjmXCVfgnAZzRC8aH9j-ZtoxO7OjHuNg10wsSOnpo"
localhost:8081/user
58.1 ce curl passe le token d'authentication et renvoie une liste de tous les utilisateurs
:"Desel Jörg","sn":"Desel","givenName":"Jörg","mail":"desel@lipn.univ-paris13.fr"},{"dn":"uid=bennani, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"bennani","cn":"Bennani Mohamed Taha","sn":"Bennani","givenName":"Mohamed Taha","mail":"bennani@lipn.univ-paris13.fr"},{"dn":"uid=floquet, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"floquet","cn":"Floquet Nicolas","sn":"Floquet","givenName":"Nicolas","mail":"floquet@lipn.univ-paris13.fr"},{"dn":"uid=zammit, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"zammit","cn":"ZAMMIT Alban","sn":"ZAMMIT","givenName":"Alban","mail":"zammit@lipn.univ-paris13.fr"},{"dn":"uid=kryukov, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"kryukov","cn":"Kryukov Aleksander","sn":"Kryukov","givenName":"Aleksander","mail":"aleksander.kryukov9@etu.univ-lorraine.fr"},{"dn":"uid=arcaini, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"arcaini","cn":"Arcaini Paolo","sn":"Arcaini","givenName":"Paolo","mail":"arcaini@nii.ac.jp"},{"dn":"uid=gitlab, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"gitlab","cn":"Gitlab LIPN","sn":"Gitlab","givenName":"LIPN","mail":"gitlab@lipn.univ-paris13.fr"},{"dn":"uid=mansour, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"mansour","cn":"Mansour Yanis","sn":"Mansour","givenName":"Yanis","mail":"mansouryanis6@gmail.com"},{"dn":"uid=radji, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"radji","cn":"RADJI WARIS","sn":"RADJI","givenName":"WARIS","mail":"wradji64@gmail.com"},{"dn":"uid=msa, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"msa","cn":"Msa Nodjimba","sn":"Msa","givenName":"Nodjimba","mail":"msa@lipn.univ-paris13.fr"},{"dn":"uid=harang, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"harang","cn":"HARANG Romain","sn":"HARANG","givenName":"Romain","mail":"harang@lipn.univ-paris13.fr"},{"dn":"uid=elhaj-lahsen, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"elhaj-lahsen","cn":"Elhaj-Lahsen Hugo","sn":"Elhaj-Lahsen","givenName":"Hugo","mail":"elhaj-lahsen@lipn.univ-paris13.fr"},{"dn":"uid=quentin.david, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"quentin.david","cn":"DAVID Quentin","sn":"DAVID","givenName":"Quentin","mail":"quentin.david@lipn.univ-paris13.fr"},{"dn":"uid=rousselin, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"rousselin","cn":"Rousselin Pierre","sn":"Rousselin","givenName":"Pierre","mail":"rousselin@math.univ-paris13.fr"},{"dn":"uid=buffiere, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"buffiere","cn":"Buffière Théophile ","sn":"Buffière","givenName":"Théophile ","mail":"buffiere@lipn.univ-paris13.fr"},{"dn":"uid=mittal, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"mittal","cn":"Mittal Aayush","sn":"Mittal","givenName":"Aayush","mail":"aayushmittalaayush@gmail.com"},{"dn":"uid=darya.pchelina, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"darya.pchelina","cn":"Pchelina Darya","sn":"Pchelina","givenName":"Darya","mail":"darya.pchelina@lipn.univ-paris13.fr"},{"dn":"uid=chinaud-chaix, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"chinaud-chaix","cn":"Chinaud-Chaix Clémence","sn":"Chinaud-Chaix","givenName":"Clémence","mail":"chinaud-chaix@lipn.univ-paris13.fr"},{"dn":"uid=gayral, ou=people,dc=univ-paris13,dc=fr","controls":[],"uid":"gayral","cn":"Gayral Leo","sn":"Gayral","givenName":"Leo","mail":"gayral@lipn.univ-paris13.fr"}]root@lipn-intranet-dev:~/gateway/config#
59************ON VA CLONER PUBLICATIONS***************+
git clone https://depot.lipn.univ-paris13.fr/etamine/plugins/publications.git
60. On va faire un dockerfile pour le serveur de publications
61. On lance la commande
grep -ri "process.env" .
pour trouver toutes les variables d'environement utilisé par le microservice
variables d'environement pour publications:
- NODE_ENV
- API_PORT
- STORAGE_PATH
- DB_NAME
- DB_HOST
- DB_PORT
62. On a modifié le fichier /publications/server/bin/www
pour changer PORT par API_PORT
63. On rajoute les variables d'environement avec ses valeurs
64. On lance
$ docker-compose up publications_api
65. WARNING: Image for service publications_api was built because it did not already exist. To rebuild this image you must use
docker-comp
Creating publications-api … done
Attaching to publications-api
publications-api | 2020-06-19T15:34:22: PM2 log: Launching in no daemon mode
publications-api | 2020-06-19T15:34:23: PM2 log: [Watch] Start watching publicationsserver
publications-api | 2020-06-19T15:34:23: PM2 log: App [publicationsserver:0] starting in -fork mode-
publications-api | 2020-06-19T15:34:23: PM2 log: App [publications_server:0] online
66. Normalement on peut faire Ctrl-C ici parce que nous avons le message “online”
67. MAIS nous n'avons pas mongodb
68. On ajoute le service databse dans docker compose
69. On relance
# docker-compose up publicationsapi
Attaching to publications-api
publications-api | 2020-06-19T15:42:44: PM2 log: Launching in no daemon mode
publications-api | 2020-06-19T15:42:44: PM2 log: [Watch] Start watching publicationsserver
publications-api | 2020-06-19T15:42:44: PM2 log: App [publicationsserver:0] starting in -fork mode-
publications-api | 2020-06-19T15:42:44: PM2 log: App [publicationsserver:0] online
publications-api | 2020-06-19 15:42 +00:00: Mongoose default connection is open to mongodb:database:27017/publications
70. on édite le fichier /docker-compose.yml pour configuer le serveur de publications pour qu'il réponde sur http://publications_api:3000
71. Quel curl faut-il qu'on consulte pour vérifier que le serveur de publications marche?
72: Depuis l'extérieur, pour tester le serveur d'authentication, on se connecte sur
curl -d '{“username”: “pepito”, “password”: “peye”}' -H “Content-Type: application/json” 192.168.90.43:8081/login
parce que le port 3000 est configuré sur docker-compose.yml
73: pour tester si le serveur de publications marche avec curl je fais la requête suivante:
$ curl localhost:8081/publication Unauthorized
curl -H “Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkbiI6InVpZD1hcmlhcywgb3U9cGVvcGxlLGRjPXVuaXYtcGFyaXMxMyxkYz1mciIsImNvbnRyb2xzIjpbXSwidWlkIjoiYXJpYXMiLCJtYWlsIjoiYXJpYXNAbGlwbi51bml2LXBhcmlzMTMuZnIiLCJkaXNwbGF5TmFtZSI6IkphaW1lIEFyaWFzIiwiYWNjb3VudFN0YXR1cyI6ImFjdGl2ZSIsImlhdCI6MTU5MjU3NjE4N30.0UxjmXCVfgnAZzRC8aH9j-ZtoxO7OjHuNg10wsSOnpo” localhost:8081/publication
réponse: bad gateway
$ curl -X GET http://localhost:3000/publication [{“type”:“Article”,”authors“:[{“username”:“amy”,”lastName“:“Kroker”,”firstName“:“Amy”},{“username”:“bender”,”lastName“:“Rodríguez”,”firstName“:“Bender”},{“username”:“fry”,”lastName“:“Fry”,”firstName“:“Philip”}],”id“:“5edf61754742b879860cca6d”,”custom“:{“labCategory”:“livr”,”labStatus“:“apar”,”labTime“:“ant”,”labTop“:“ving”},”key“:“a33667d13d”,”title“:“qw”,”year“:2020,”pages“:“12”,”doi“:“12”,”month“:1,”address“:“1ww”,”url“:“http://test.test”,”note“:“wef”,”abstract“:“rg”,”journal“:“qw”,”publisher“:“qw”,”volume“:“1”,”number“:“1”,”createdby“:“testuser”,”modifiedby“:“testuser”,”_v“:0}]
http PUT httpbin.org/put X-API-Token:123 name=John
http GET localhost:8081/publication 'Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkbiI6InVpZD1nYXJjaWFmbG9yZXMsb3U9cGVvcGxlLGRjPXVuaXYtcGFyaXMxMyxkYz1mciIsImNvbnRyb2xzIjpbXSwidWlkIjoiZ2FyY2lhZmxvcmVzIiwibWFpbCI6ImdhcmNpYWZsb3Jlc0BsaXBuLnVuaXYtcGFyaXMxMy5mciIsImRpc3BsYXlOYW1lIjoiSm9yZ2UgR2FyY2lhIGZsb3JlcyIsImFjY291bnRTdGF0dXMiOiJhY3RpdmUyMiIsImlhdCI6MTU5MzA4NzczOH0.HNP1FRsf7ujiy2IAyWXoOKwAJris8qzqxdmObCTfEx4'
$ yarn install yarn install v1.22.4 [1/4] Resolving packages… [2/4] Fetching packages… info fsevents@1.2.4: The platform “linux” is incompatible with this module. info “fsevents@1.2.4” is an optional dependency and failed compatibility check. Excluding it from installation. info fsevents@1.2.9: The platform “linux” is incompatible with this module. info “fsevents@1.2.9” is an optional dependency and failed compatibility check. Excluding it from installation. [3/4] Linking dependencies… warning ”
> babel-core@7.0.0-bridge.0" has unmet peer dependency "@babel/core@^7.0.0-0".
w
arning “
> babel-jest@24.9.0" has unmet peer dependency "@babel/core@^7.0.0".
w
arning ”
> eslint-plugin-vuetify@1.0.0-beta.5" has unmet peer dependency "release-it@*".
w
arning “eslint-plugin-vuetify > eslint-plugin-vue@5.2.3” has incorrect peer dependency “eslint@^5.0.0”. warning “eslint-plugin-vuetify > eslint-plugin-vue > vue-eslint-parser@5.0.0” has incorrect peer dependency “eslint@^5.0.0”. warning “
> sass-loader@8.0.0" has unmet peer dependency "webpack@^4.36.0".
[
4/4] Building fresh packages… Done in 11.98s.
FROM node:lts-alpine as build-stage
RUN apk –no-cache add g++ gcc libgcc libstdc++ linux-headers make python
WORKDIR /app
COPY package*.json . COPY yarn.lock .
RUN yarn add git+ssh:git@depot.lipn.univ-paris13.fr:vuetify-plugins/confirm-dialog.git
RUN yarn install
90. Nous avons modifié le dockerfile
Nous avons supprimé la ligne : confirm-dialog”: “https://depot.lipn.univ-paris13.fr/vuetify-plugins/confirm-dialog.git”,
On test à nouveau la création du docker client
L'ajout du docker client n'a pas réussi il manque la dépendance que nous avons supprimé
Nous devons voir pourquoi celle-ci ne passe pas dans le dockerfile
91. On continue la galère du confirm-dialog.git
error Couldn't find the binary git
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
ERROR: Service 'publications_app' failed to build: The command '/bin/sh -c yarn install' returned a non-zero code: 1
91.1 On a contourné l'erreur en modifiant /publications/client/Docker
RUN apk –no-cache add g++ gcc libgcc libstdc++ linux-headers make python git
92. Nous avons eu un erreur de yarn upgrade
Step 14/18 : RUN yarn build
—> Running in e462752a99ac
yarn run v1.22.4
$ vue-cli-service build
- Building for production…
Browserslist: caniuse-lite is outdated. Please run next command yarn upgrade
Browserslist: caniuse-lite is outdated. Please run next command yarn upgrade
DONE Compiled successfully in 34331ms4:50:17 PM
File Size Gzipped
dist/js/chunk-vendors.js 5514.11 KiB 1145.99 KiB
dist/js/app.js 685.07 KiB 43.75 KiB
Images and other types of assets omitted.
DONE Build complete. The dist directory is ready to be deployed.
INFO Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html
Done in 48.09s.
92.1 L'erreur de build a été surmonté en supprimant une ligne du Dockerfile où on effacer le fichier yarn.lock et en relançant
docker-compose up -d –build publications_app
93. Nous avons un erreur de port
Step 18/18 : CMD [“nginx”, “-g”, “daemon off;”]
—> Running in a7566f2a2763
Removing intermediate container a7566f2a2763
—> aa0edd4edcf0
Successfully built aa0edd4edcf0
Successfully tagged rootpublicationsapp:latest
Creating publications-app …
Creating publications-app … error
ERROR: for publications-app Cannot start service publications_app: driver failed programming external connectivity on endpoint publications-app (4b0e528e91b9b3117fad3fc83dd7917cd0df7822d317da4b32157c4b939bccb9): Bind for 0.0.0.0:8080 failed: port is already allocated
ERROR: for publicationsapp Cannot start service publicationsapp: driver failed programming external connectivity on endpoint publications-app (4b0e528e91b9b3117fad3fc83dd7917cd0df7822d317da4b32157c4b939bccb9): Bind for 0.0.0.0:8080 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.
94. Modification de docker-compose.yml situé dans /root
Il y avait un conflit sur le port 8080
Nous avons remplacé le port 8080 par 8082 au niveau de publications_app
95. Modification dans /etc/apache2/sites-enabled/000-default.conf
Dans la partie # publication application nous avons modifié le port 8080 en 8082
96. Ajout de docker-compose dans publications
Contrairement à authentication il n'y avait pas de docker-compose dans publications
Nous avons donc ajouté un docker-compose dans publications
==97. Publications==
root@lipn-intranet-dev:~# docker-compose ps
Name Command State Ports
————————————————————————————-
authentication-api docker-entrypoint.sh npx p … Up 3000/tcp
authentication-app nginx -g daemon off; Up 0.0.0.0:8080→80/tcp
database docker-entrypoint.sh mongod Up 27017/tcp
gateway docker-entrypoint.sh npx p … Up 0.0.0.0:8081→8081/tcp
publications-api docker-entrypoint.sh npx p … Up 3000/tcp
publications-app nginx -g daemon off; Up 0.0.0.0:8082→80/tcp
user_management-api docker-entrypoint.sh npx p … Up 3000/tcp
97.1 Test d'accès sur le serveur
Le serveur répond sur localhost:8081/publication
et la requête GET depuis la ligne de commande avec est enregistrée sur les logs (docker logs publi) du containeur publications-api
root@lipn-intranet-dev:~# http GET localhost:8081/publication 'Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkbiI6InVpZD1nYXJjaWFmbG9yZXMsb3U9cGVvcGxlLGRjPXVuaXYtcGFyaXMxMyxkYz1mciIsImNvbnRyb2xzIjpbXSwidWlkIjoiZ2FyY2lhZmxvcmVzIiwibWFpbCI6ImdhcmNpYWZsb3Jlc0BsaXBuLnVuaXYtcGFyaXMxMy5mciIsImRpc3BsYXlOYW1lIjoiSm9yZ2UgR2FyY2lhIGZsb3JlcyIsImFjY291bnRTdGF0dXMiOiJhY3RpdmUyMiIsImlhdCI6MTU5MzE3ODk0N30.gj8z7skaNGF9-dWr3X90oh0xQJNDLsxykfTrW46WAB0'
HTTP/1.1 200 OK
access-control-allow-origin: *
connection: keep-alive
content-length: 2
content-type: application/json; charset=utf-8
date: Fri, 26 Jun 2020 14:26:26 GMT
etag: W/“2-l9Fw4VUO7kr8CvBlt4zaMCqXZ0w”
x-powered-by: Express
La requête est bien enresitrée sur les logs
root@lipn-intranet-dev:~# docker logs publications-api
2020-06-26T14:19:08: PM2 log: Launching in no daemon mode
2020-06-26T14:19:08: PM2 log: [Watch] Start watching publicationsserver
2020-06-26T14:19:08: PM2 log: App [publicationsserver:0] starting in -fork mode-
2020-06-26T14:19:08: PM2 log: App [publications_server:0] online
2020-06-26 14:19 +00:00: Mongoose default connection is open to mongodb:database:27017/publications
2020-06-26 14:26 +00:00: GET /publication 200 28.260 ms - 2
[]
97.2 Test d'accès vers le client de publication Le conteneur client répond sur localhost:8082 et la requête GET est bien enregistrée sur le logs du conteneur publications-app
root@lipn-intranet-dev:~# http localhost:8082 HTTP/1.1 200 OK Accept-Ranges: bytes Connection: keep-alive Content-Length: 966 Content-Type: text/html Date: Fri, 26 Jun 2020 16:38:38 GMT ETag: “5ef5f834-3c6” Last-Modified: Fri, 26 Jun 2020 13:29:24 GMT Server: nginx/1.18.0
<!DOCTYPE html> <html lang=“en”
>
<head>
<meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <link rel="icon" href="/favicon.ico"> <link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/npm/@mdi/font@4.x/css/materialdesignicons.min.css" rel="stylesheet"> <title>Etamine v5</title>
<link href=“/js/app.js” rel=“preload” as=“script”
><link href="/js/chunk-vendors.js" rel="preload" as="script"></head>
<body>
<noscript> <strong>We're sorry but client doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> </noscript> <div id="app"></div> <!-- built files will be auto injected -->
<script type=“text/javascript” src=“/js/chunk-vendors.js”
></script><script type="text/javascript" src="/js/app.js"></script></body>
</html>
root@lipn-intranet-dev:~# docker logs publications-app 172.19.0.1 - - [26/Jun/2020:16:17:19 +0000] “GET / HTTP/1.1” 200 966 “-” “HTTPie/0.9.8” “-” 172.19.0.1 - - [26/Jun/2020:16:18:44 +0000] “GET / HTTP/1.1” 200 966 “-” “HTTPie/0.9.8” “-”
$ http localhost $ docker logs authentication-app x8664; rv:77.0) Gecko/20100101 Firefox/77.0“ “200.57.193.75, 192.168.90.15” 172.19.0.1 - - [26/Jun/2020:15:11:56 +0000] “GET /favicon.ico HTTP/1.1” 200 1150 ”-“ “Mozilla/5.0 (X11; Ubuntu; Linux x8664; rv:77.0) Gecko/20100101 Firefox/77.0” “200.57.193.75, 192.168.90.15” 172.19.0.1 - - [26/Jun/2020:15:15:11 +0000] “GET / HTTP/1.1” 200 654 ”-“ “HTTPie/0.9.8” ”::1“ 172.19.0.1 - - [26/Jun/2020:15:16:37 +0000] “GET / HTTP/1.1” 200 654 ”-“ “HTTPie/0.9.8” ”::1“
(sur authentication-api il n'y a rien puisque la demande n'est parvenue au serveur)
98.2 Test de login à authentication-api depuis le serveur intranet-dev
root@lipn-intranet-dev:~# http localhost:8081/login HTTP/1.1 404 Not Found Connection: keep-alive Content-Length: 144 Content-Security-Policy: default-src 'none' Content-Type: text/html; charset=utf-8 Date: Fri, 26 Jun 2020 15:43:54 GMT X-Content-Type-Options: nosniff
<!DOCTYPE html> <html lang=“en”
>
<
head> <meta charset=“utf-8”
>
<
title>Error</title> </head> <body> <pre>Cannot GET /login</pre> </body> </html>
Le cannot GET est causé par une configuration dans /root/gateway/config/gateway-config.yml
98.3 tests avec curl depuis le réseau lipn [garciaflores@merkel ~]$ curl POST 192.168.90.43 [root@lipn-intranet-dev] $ docker logs authentication-app 172.19.0.1 - - [26/Jun/2020:15:59:03 +0000] “GET / HTTP/1.1” 200 654 ”-“ “curl/7.52.1” “10.10.0.185” 172.19.0.1 - - [26/Jun/2020:16:01:16 +0000] “GET / HTTP/1.1” 200 654 ”-“ “curl/7.52.1” “10.10.0.185”
98.4 test avec Google chrome depuis http://lipn.univ-paris13.fr/intranet-dev en cliquant sur la touche LOGIN
172.19.0.1 - - [26/Jun/2020:16:08:26 +0000] “GET / HTTP/1.1” 200 654 ”-“ “Mozilla/5.0 (X11; Linux x8664) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36” “200.57.193.75, 192.168.90.15” 172.19.0.1 - - [26/Jun/2020:16:08:27 +0000] “GET /app.js HTTP/1.1” 200 5181766 “https://lipn.univ-paris13.fr/intranet-dev/” “Mozilla/5.0 (X11; Linux x8664) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36” “200.57.193.75, 192.168.90.15” 172.19.0.1 - - [26/Jun/2020:16:08:37 +0000] “GET /favicon.ico HTTP/1.1” 200 1150 “https://lipn.univ-paris13.fr/intranet-dev/” “Mozilla/5.0 (X11; Linux x8664) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36” “200.57.193.75, 192.168.90.15” 172.19.0.1 - - [26/Jun/2020:16:08:54 +0000] “GET /fonts/MaterialIcons-Regular.bca3a187.woff2 HTTP/1.1” 200 59000 “https://lipn.univ-paris13.fr/intranet-dev/” “Mozilla/5.0 (X11; Linux x8664) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36” “200.57.193.75, 192.168.90.15”
Data:
{ "custom": { "labCategory": "livr", "labStatus": "apar", "labTime": "ant", "labTop": "ving" }, "authors":[ { "lastName": "Arias", "firstName": "Jaime" }, { "lastName": "Garcia Flores", "firstName": "Jorge" } ], "key": "45767c5294", "title": "Test", "year": 2020, "type": "Unpublished", "pages": "123", "doi": "test", "month": "11", "address": "5 rue", "url": "http://test.test", "note": "test", "abstract": "test", "created_by": "test_user", "modified_by": "test_user" }
Réponse:
{ "error":{ "message": "\"user\" is not allowed" } }
Notre probleme est le suivant:
Le serveur nous dit que le champ “user” n'est pas autorisé alors que nous ne fournissions pas cette donnée.