transition-bibliographique / poc-fne

Preuve de concept basée sur Wikibase pour le "Fichier National d'Entités" (Abes/BNF). Projet réalisé en 2019.
http://www.abes.fr/Autorites-et-referentiels/Projet-FNE-Fichier-National-d-Entites
4 stars 1 forks source link

Installer NodeJS sur le serveur #197

Closed jum-s closed 4 years ago

jum-s commented 4 years ago

Aujourd'hui les scripts d'import de notices sont exécutés sur des machines sur lesquelles NodeJS est déjà installé et exécutable. Ce n'est pas le cas du serveur du POC. Or les scripts d'import devraient pourvoir être exécutés et l'installation de NodeJS documenté pour pouvoir être lancé par n'importe quel utilisateur du serveur.

Validation du ticket: En tant qu'utilisateur du serveur, je veux pourvoir installer NodeJS via une documentation afin de lancer les scripts d'import via le serveur grâce à une commande simple type npm run etl-notices ...

Solutions possibles (à choisir par les équipes ABES qui gère le serveur ?): NodeJS peut-être installé directement sur le serveur (plus simple) ou bien via une image Docker (nécéssite la mise en place d'alias et de redéfinition de chemin d'environnement $PATH) Si la première solution est retenue une installation via sudo est nécessaire ce que l'utilisateur poc-fne du serveur n'est pas est devra donc être réalisé par l'ABES.

maxlath commented 4 years ago

une installation sans sudo devrait être possible en installant NodeJS via nvm

kerphi commented 4 years ago

Il serait bien de privilégier docker.

Le mieux serait que l'unique middleware/dépendance logicielle vis a vis du serveur soit docker.

jum-s commented 4 years ago

Il est effectivement préférable de tout faire passer par docker, mais le travail à fournir n'est pas le même (par rapport à une commande sudo apt install nodejs). Au vu des autres taches prioritaires à réaliser, nous souhaiterions déléguer ce ticket aux mainteneurs du serveur abes, ca vous parait faisable ?

MathieuBarret commented 4 years ago

Je viens d'installer nodejs sur le serveur. Est-ce qu'il faut d'autre outils ?

kerphi commented 4 years ago

A tester pour la solution node/npm via des alias docker :

# cat /etc/profile.d/docker-node.sh
alias npm="docker run --user $(id -u):$(id -g) -it --rm -e HOME -e NODE_ENV -e DEBUG -v $HOME:$HOME -v $(pwd):/usr/app/ -w /usr/app node:12.8.1 npm"
alias node="docker run --user $(id -u):$(id -g) -it --rm -e HOME -e NODE_ENV -e DEBUG -v $HOME:$HOME -v $(pwd):/usr/app/ -w /usr/app node:12.8.1 node"
maxlath commented 4 years ago

@MathieuBarret la version de node installée semble être v6.17.1, hors il me semble qu'il nous faut au minimum v6.4 (support de la syntax ES6) et idéalement >= v8 (la plus ancienne LTS encore maintenue)

MathieuBarret commented 4 years ago

Avec les conseils de @Kerphi j'ai mis en place des alias pour les commandes npm et node qui lance un conteneur docker pour l’exécution des scripts.

Pouvez-vous tester?

maxlath commented 4 years ago

il semble maintenant y avoir 2 manières d'accéder à node :

[poc-fne@withanie-dev poc-fne-wikibase-docker]$ /usr/bin/node --version
v6.17.1
[poc-fne@withanie-dev poc-fne-wikibase-docker]$ node --version
v8.16.1

j'ai créé un script de test de l’environnement Node (sur une branche temporaire dédié test-node-env), lequel échoue actuellement quand appelé par npm

# depuis le serveur ABES
cd ~/poc-fne
npm run test-env-node

avec l'erreur suivante :

npm run test-node-env
npm ERR! path /usr/app/package.json
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall open
npm ERR! enoent ENOENT: no such file or directory, open '/usr/app/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent 

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/maxime/.npm/_logs/2019-08-27T18_53_48_615Z-debug.log

alors qu'il marche quand appelé directement, mais c'est le node installé globalement qui est utilisé

# depuis le serveur ABES
~/poc-fne/scripts/test_node_env.js
# => hello! v6.17.1
maxlath commented 4 years ago

pour que le système arrive à résoudre l’environnement des scripts commençant par #!/usr/bin/env node, il me semble pour ma part plus opportun/beaucoup moins galère d'avoir un NodeJS installé globalement (soit par le package manager soit par nvm) et non par Docker

kerphi commented 4 years ago

J'ai modifié le wrapper node et npm pour ne pas passer par le système d'alias.

Ca semble mieux se passer :

[poc-fne@withanie-dev poc-fne]$ npm run test-node-env

> @ test-node-env /usr/app
> ./scripts/test_node_env.js

hello! v8.16.1

Et pour la vielle version de nodejs (6.17.1) je vais en parler à @MathieuBarret pour la désinstaller tout simplement.

maxlath commented 4 years ago

ah pas mal le /usr/local/bin/node :D j'imagine qu'il y a certains cas où -v $(pwd):/usr/app/ n'est pas suffisant (si le script fait appel à des fichiers hors du pwd) (?) mais ça devrait suffire pour notre usage

kerphi commented 4 years ago

On peut faire une tentative comme ça (car ça serait bien si on pouvait arriver à contenir les dépendances de l'OS à uniquement docker) mais si ça génère trop d'effets de bord (et oui tu as raison pour les fichiers "hors du pwd") on passera par un repository yum dédié à nodejs ou carrément par nvm.

kerphi commented 4 years ago

On peut aussi peut-être monter en version 12 de nodejs (c'est très facile avec le wapper) ? car c'est la version stable actuelle qui va démarrer son cycle LTS très bientôt (octobre 2019) et qui va courir jusqu'en 2022.