dataesr / scanr-backend-v1

All serverside code for scanR application.
https://scanr.enseignementsup-recherche.gouv.fr/
MIT License
0 stars 0 forks source link

scanR : Moteur de recherche de la recherche et de l'innovation française

⚠️ This project has been archived. The new project is now here : https://github.com/dataesr/scanr-ui.

https://scanr.enseignementsup-recherche.gouv.fr/

Contact: scanr@recherche.gouv.fr

Licences: MIT, APACHE 2.0

Copyright (c) MESRI

A propos de scanR

scanR est le moteur de recherche de la recherche et de l'innovation française.

scanR est une application web d’aide à la caractérisation des acteurs de la recherche et de l'innovation qui comprend aussi bien des organisations publiques (unité de recherche de tous types, institutions publiques) que privées (entreprises). scanR est un agrégateur de sources. Il n'est donc pas exhaustif mais tente de rassembler le plus d'information possible afin de pouvoir caractériser ses objets le plus finement possible.

Fonctionnalités

Team

Installation

Environnement de développement

En production, scanR se déploie dans une Debian 9 (LTS) avec Docker.

L'environnement de développment consiste en un déploiement de production, mais dans une VM locale, et dont on peut arrêter le conteneur Docker d'un composant Java ou Python pour plutôt exécuter celui-ci directement dans la VM afin de faciliter son redéploiement et son debug, et dont le code source est synchronisé depuis l'hôte Windows pour pouvoir développer dans Windows.

Voici donc comment développer scanR sous Windows 10 en tout en l'exécutant dans une machine virtuelle locale Debian Jessie, en s'aidant de Vagrant et chocolatey.

Développement du code source sous Windows :

Récupérer le code source :

cd C:/dev/menesr/vm/rsync
git@github.com:dataesr/scanr-backend.git

et committer et développer là sous Windows avec Eclipse Java, PyCharm, Notepad++, ConEmu... après y avoir configuré encoding UTF-8 et fin de ligne Unix (dans Eclipse, dans les propriétés de tous les projets et pas seulement de la racine scanesr).

NB. éviter de committer dans la VM, ou penser à faire un git pull dans Windows après. NB. git est configuré pour garder les fichiers source au format Linux et non Windows, vu que ce code est ensuite exécuté directement dans la VM Linux (par rsync). L'équivalent en configuration manuelle est :

git config core.autocrlf false
git config --list

Installer Vagrant :

à l'aide de chocolatey (ou manuellement) : (comme dit à https://chocolatey.org/install)

dans une ligne de commande Windows en tant qu'administrateur (search "cmd" > clic droit "Run as admin"), exécuter
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

choco install vagrant

Déployer dans une VM locale Debian 8 ayant Java et Docker :

Dans une ligne de commande Windows, démarrer la VM et y synchroniser le code source :

cd C:/dev/menesr/vm
cp rsync/scanesr/Vagrantfile rsync/scanesr/*sh .
vagrant up
vagrant rsync-auto
# Attention, il peut être nécessaire de le redémarrer, notamment après un commit depuis la VM et non Windows

Ceci créé une VM (IP 192.168.56.35, disque 10GB additionnel monté sous ~/dev), la démarre et installe aussi les prérequis : Maven 3, Java 8, Python 3, Docker. Sinon pour plutôt déployer manuellement dans une Debian 8, installer les prérequis avec les ligne de commandes shell au début du Vagrantfile.

Puis dans une autre ligne de commande Windows, se connecter à la VM pour builder et déployer :

cd C:/dev/menesr/vm
vagrant ssh
cd /home/vagrant/dev/scanesr

# DEPLOY CONF, BUILD ALL AND DEPLOY DOCKER CONTAINERS

# this script can be executed as is, or shell commands copied from it and executed independently as required
# IMPORTANT do CTRL-C to stop logging a docker container and start the next one
./buildAndStartAll.sh <ENV>
# where ENV can be : preprod (else prod by default)
# WARNING the first time, building the pythondp docker image (and subsequent python images)
# may fail. In this case, execute this script again.

# try it out :
# in c:\Windows\System32\Drivers\etc\hosts :
<your.vm.ip.here> scanr.local scanr-admin.local
# admin : login with CHANGEME/CHANGEME at http://scanr-admin.local
# front : search ex. occiware at http://scanr.local

# Clean up docker (to gain disk size) - stop and remove all containers and images :
docker stop $(sudo docker ps -aq)
docker rm $(sudo docker ps -aq)
docker rmi $(sudo docker images -q)

Importer les données (2Gb ram minimum):

(requires 2gb ram) : Go to the Swagger API doc UI by clicking on SWAGGER in the admin UI toolbar (or by going to http://:8080/api/swagger-ui.html or http://scanr-admin.local/api/swagger-ui.html) there in "import menesr" call GET /admin/import/all and see increasing data size in "count" by calling GET /services/counts . BEWARE, this adds 3-200GB, so if disk becomes full in development environment, increase main disk size in VirtualBox and check that Elasticsearch and MongoDB work again (ex. restart Elasticsearch if it has been put in read-only).

Dans Swagger UI, cliquer sur le bouton "Try it out" de l'opération GET /admin/import/all Et voyez la taille des données augmenter dans SwaggerUI dans "count" en appelant l'opération GET /services/counts

Planifier les tâches d'extraction :

Dans l'onglet "QUEUES" de l'UI d'administration, cliquer sur chaque composant pour voir sa planification, forcer son démarrage ou le déplanifier. Ou bien utiliser la ScheduleApi directement depuis Swagger API DOC UI.

Déploiement en intégration

Ressources minimum conseillées en intégration : 1 VM avec 4 CPU, 16go RAM, 500go disque (20-30go mongodb, 23-60go elasticsearch, 70-200go cassandra depending on indexing phase). Pas besoin de partitionner (car pas besoin de faire de snapshots ; sinon, /var/lib/docker a besoin de 10-15go et /vagrant/dev de 3go).

Et voir le déploiement en préproduction.

Déploiement en (pré)production

# create debian 8 jessie
# create lvm volumes (refer to the original df -h)

# SETUP SOURCES AND PREREQS (do this only once)

# Adding user menesr
sudo adduser menesr
sudo usermod -a -G sudo menesr

# Switch to user menesr
su - menesr

# Creating work folders in home
mkdir -p install dl save dev

# Prepare sources : put sources (front, java, python) in dev
# depends on your deployment method : git / rsync / scp / ...
sudo apt-get install git
cd ~/dev
git clone https://github.com/dataesr/scanr-backend.git
# if you have a gitlab account, rather generate a key and copy-paste it to your gitlab account :
ssh-keygen -o -t rsa -C "your.email@example.com" -b 4096
git clone git@github.com:dataesr/scanr-backend.git

# Install prereqs
cd scanesr
chmod +x install_prereqs.sh
sudo ./install_prereqs.sh

# UPDATE SOURCES (do this everytime these scripts change in source code)

cd ~/dev/scanesr
git pull

# configure certificates
# TODO
sudo mkdir -p /etc/nginx/certs
# and put your certs in /etc/nginx/certs

# BUILD ALL AND DEPLOY DOCKER CONTAINERS

cd ~/dev/scanesr
chmod +x buildAndStartAll.sh
sudo ./buildAndStartAll.sh
# or do manually what is in this script.
# if MongoDB fails because of not enough space (esp. in VM), do: sudo /var/deploy/scanr-mongo/run.sh --smallfiles
# look in /var/deploy/*/run.sh how to check deployments

# try it out :
# admin : login using CHANGEME/CHANGEME at http://scanr-admin.local/api/swagger-ui.html and do import menesr : GET /admin/import/all (BEWARE adds 3GB)
# front : search ex. occiware at http://scanr.local

Development

Démarrer dans l'IDE au-dessus des composants d'une VM :

Dans Eclipse, créer une nouvelle configuration d'exécution avec les paramètres :

Alternative - Déployer et débugger des composants Java ou Python dans la VM locale :

Pour déployer des composants Java ou Python en développement, typiquement à des fins de debugging :

Par exemple, pour le workflow côté java et le CoreExtractor côté python :

vi /etc/hosts
127.0.0.1 localhost scanr-backend_workflow scanr-python_comp_coreextractor

# worfklow
sudo docker stop scanr-backend_workflow
# start workflow with default conf (scanesr's "brain", will conf everything : ES, rabbitmq, cassandra)
vi application.properties
cd ~/dev/scanesr/java/scanr-backend/workflow && mvn clean install && java -Xmx2048m -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8002 -Dspring.config.location=/var/deploy/scanr-backend_app/config/application.properties -jar target/*.jar
# then connect an Eclipse remote debugging session to <your.vm.ip.here>:8002

# CoreExtractor
sudo docker stop scanr-python_comp_coreextractor
cd ~/dev/scanesr/python/comp_coreextractor-* && source tools/setup_venv.sh && ./tools/deps.sh && python comp_coreextractor/main.py --conf /var/deploy/scanr-python_comp_coreextractor/config.json --proc 1&

Alternative development deployment of front :

start dev server (won't work without backend, BEWARE conflicts with the java processes' 8080 port)

cd ~/dev/scanesr/front/scanr-frontend
npm start
browse to http://<your.vm.ip.here>:8080/
# OR
#npm run dev

Development FAQ

Develoment - models

JSON -> Structure (by ImportMenesrApi which cleans it) -> FullStructure (Mongo + API get) -> FullStructureIndex (ES + API search)