Déploiement CrunchServer

Recommandations matérielles

Machine 1 : Opensearch / Crunch Server

Objectif : indexer entre 5000 et 10000 documents avec quelques dashboards

Cette machine est principalement dédiée à Opensearch

  • auto-hébergée,

  • machine dédiée

  • VM Elle sert également à héberger des web services (probablement en Flask, FastAPI ou autre) : le crunh server.

Composant

Spécification minimale recommandée

OS

Linux 64-bit (Ubuntu 22.04 LTS par ex.)

RAM

4 Go

CPU

2 vCPU

Disque

10–20 Go SSD (avec snapshot/réplica overhead)

Shards

1 shard principal par index

Réplicas

0 ou 1 (selon si tu veux de la redondance)

Dashboards

Oui, OpenSearch Dashboards sur la même machine possible

Les dimensions pour un passage en prod si on veut booster les machines:

Cas d’usage

RAM

CPU

Disque

Besoin actuel Labrador (small)

2–4 Go

1–2 vCPU

5–10 Go

Pré-prod/test

4 Go

2 vCPU

20 Go SSD

Prod évolutive

8 Go

4 vCPU

50+ Go SSD

Machine 2 : Machine de données / Serveur Webdav

Objectif: dédiée au stockage des données.

a. Hypothèse de stockage local

Si on imagine le besoin de stocker la Base Labrador 2 (par exemple) qui a environ 2500 documents que j’estime à 1Go en moyenne. Cette machine doit servir à :

  • Héberger des web services (probablement en Flask, FastAPI ou autre)

  • Servir du WebDAV via Nginx

  • Stocker jusqu’à 5 000 fichiers, chacun pouvant faire jusqu’à 1 Go → stockage potentiel de 5 To

  • Être stable pour une utilisation réseau (accès distant, scripts, sauvegarde)

Ressource

Recommandé

Notes

CPU

4 vCPU (2 si faible trafic)

Web services + gestion fichiers

RAM

8 Go

Pour WebDAV, cache Nginx, apps

Disque

5 To SSD ou HDD avec cache (RAID 1)

5 To utiles + marge

Réseau

1 Gbps si accès LAN ou externe

Priorité au débit soutenu

Sauvegarde

Externe ou NAS

5 To → pas négligeable

b. Hypothèse avec stockage déporté.

Dans le cas ou les fichiers sont une autre zone, un autre disque. Cette fois ci un montage NFS de la zone est préférable à un montage SMB.

[STOCKAGE NFS]
     |
[Machine WebDAV + Services]
     |
[Clients HTTP / WebDAV / API]

La machine doit :

  • Héberger uniquement :

    • des web services

    • un serveur WebDAV (via Nginx)

  • Exposer une zone réseau (distant) contenant jusqu’à 5 000 fichiers de 1 Go chacun

  • Gérer l’I/O réseau, pas le stockage local

Dans ce cas, une configuration possible est la suivante :

Ressource

Recommandé

Pourquoi

CPU

2 vCPU

Suffisant pour proxy, traitements légers

RAM

4 Go

Nginx + services Python + cache

Disque

20–50 Go SSD

OS + logs + services (pas de données)

Réseau

1 Gbps (minimum)

Accès rapide à la zone réseau et clients

OS

Debian 12 ou Ubuntu Server 22.04 LTS

Stable, bien supporté

Déploiement à BF

Les deux machines proposées sont :

  • poc-crunch-opensearch (172.31.235.211)

  • poc-crunch-ws ()

Installation de la machine OpenSearch

Sur cette machine, les ports sont ouverts. Donc pas besoin de passer par des alias d’adresses avec un reverse_proxy et tout dans un flux sécurisé (https)
On peut directement adresser les services sans couche ssl (http://adresse:port)

1 service : C’est 1 adresse + 1 port

Cette machine est une machine debian (version ?). Elle ne contient rien au départ.

Utilisation de l’extension SSH remote de VSCode

On y accède via ssh en utilisant l’utilisateur localuser

ssh localuser@172.31.235.211

On peut donc utiliser VSCode pour y accéder

  • Installation de VSCode

  • Ajout de l’extensions ssh, docker

  • se connecter à l’hôte poc-crunch-opensearch

    • Faire un add new host : localuser@poc-crunch-opensearch)

    • Editer le fichier .ssh/config avec les bons paramètres (user/name)

Installation de docker sur la machine

Suivre les indications données sur Docker Install

Ajouter l’utilisateur au groupe docker

sudo groupadd docker
sudo usermod –aG docker $USER

Pour tester, on se logue/delogue,

docker ps  

Si la commande passe, docker est correctement installé

On teste l’installation d’un docker, on lance vite fait un serveur web

docker run –p 80:80 nginx:latest

Dans un autre terminal, on teste en local

curl http:localhost

on voit la page défaut de nginx

Sur sa machine, on accède à la machine en http, ouvrir l’url http://poc-crunch-opensearch:80 et voir que ça marche, on voit la page par défaut de nginx. ça montre au passage qu’on peut atteindre la machine poc-crunch-opensearch directement au travers du réseau par le DNS.

Création et lancement du Crunch Server

  1. On récupère le code

git clone https://ifpen-gitlab.appcollaboratif.fr/tellus/crunch_server.git
  1. On construit l’image docker du server

Dans le répertoire infra/crunch :

docker compose build

=> ça va créer le docker crunch_server:latest

  1. on lance le serveur.

Pour cela, on va lancer le service crunch défini dans le fichier infra/docker-compose.yml

crunch:
image:crunch_server:latest
container_name:crunch
ports:
	-8000:8000     

Dans un terminal :

docker compose up crunch 

On teste sur internet : http://poc-crunch-opensearch:8000/ping ça répond pong, ça signifie que ça marche On stoppe tout et on redémarre en mode daemon :

docker compose down crunch
docker compose up -d crunch

Lancement des services docker pour OpenSearch

Sur la machine poc-crunch-opensearch, suivre les indications pour installer OpenSearch

cat /proc/sys/vm/max_map_count # nombre de process qu’on peut faire tourner en même temps, lié à Java
sudo vi /etc/sysctl.conf

Rajouter une ligne avec vm.max_map_count=262144

sudo sysctl -p

Dans VSCode, ouvrir le fichier docker-compose.yml (disponible dans le paquet cadeau récupéré) et enlever les parties dédiées à Traefik

Dans le répertoire infra, créer un fichier .env et y ajouter OPENSEARCH_INITIAL_ADMIN_PASSWORD=passwd.

Attention: Ce mot de passe sera utilisé par la suite pour faire des requêtes sur la base opensearch.

Dans un terminal via VSCode sur la machine localuser@poc-crunch-opensearch :

docker volume create opensearch.data01
docker volume create opensearch.data02

Dans le fichier docker-compose.yml mettre pour la mémoire: Xms1g et Xmx1g (et non pas Xms2g et Xmx2g). C’est à adapter à la configuration de la machine

Ajouter pour le node s01 :

ports
-5601:5601

Dans le terminal via VSCode sur la machine localuser@poc-crunch-opensearch :

docker compose up 

=> OK, attendre et regarder les logs pour voir qu’il n’y a pas d’erreurs au bout d’un certain temps. On teste l’adresse http://poc-crunch-opensearch:5601/, ça marche si la fenêtre d’authentification des dashboards s’ouvre.

Normalement le service tourne tout le temps, si ça plante, refaire un docker compose up

Installation de la machine Data

La 2ème machine se nomme : poc-crunch-ws.

On peut également configurer une nouvelle machine distante dans VSCode pour l’extension remote ssh

Installation de Miniconda

Dans le terminal, afin d’avoir une version standalone python on installe miniconda, inutile si on a déjà un python en version > 3.10 d’installé sur la machine.

Tester que curl est installé et Si curl n’est pas déjà installé

sudo apt insatll curl  

Ensuite on installe miniconda

export MINICONDA_VERSION=py311.25.22-2
export MINICONDA_REPO=https://repo.anaconda.com/miniconda
curl -sSLo /tmp/miniconda.sh ${MINICONDA_REPO}/Miniconda3-${MINICONDA_VERSION}-Linux-x86_64.sh
bash /tmp/miniconda.sh –b –p /home/${USER}/mconda3.11

Récupération et installation du la DataCrunch ToolBox

Création d’un environnement virtuel (dans le terminal)

~/mconda3.11/bin/python –m venv venv
. venv/bin/activate

Installation de Python dans VSCode Ouvrir osearch_file_screener.py Shift Ctrl p > select interpréter > Python 3.11 Dans le terminal :

pip install –r requirements.txt
pip install –r requirements_reports.txt
python scripts/install_nltk_data.py
python scripts/install_spacy_data.py
pip install en_core_web_sm-3.5.0-py3-none-any.whl

Mise à jour des chemins dans les fichiers scripts/test_osearch.py et scripts/config.yaml

Modifier le fichier pyproject.toml :

Supprimer la ligne dynamic Mettre version_file=‘’0.1.1’’ Dans le terminal :

pip install –e .
pip install requests-ntlm

Création d’un fichier .env dans screener_toolbox_develop avec OSEARCH_PW=passwd Dans terminal

export OSEARCH_PW=‘’passwd’’

Dans le fichier config.yaml :

Dans un terminal

curl –u ‘’admin:${OSEARCH_PW}’’ –X GET ‘’http://172.31.235.211:9200/’’

Attention: Mettre 172.31.235.211 au lieu de poc-crunch-opensearch. Soucis pour passer au travers du DNS pour le moment.