10.3 Installation

TODO: détailler les procédures de configuration de MongoDB Atlas, et d’installation sur un serveur dédié ou en local.

  • Création d’un compte MongoDB ATLAS, une organisation et un serveur M0 (gratuit). Deux bases de données sont créées : “test” et “cours”. La première ne contient rien d’important et sert… à des tests comme son nom l’indique. La seconde contient nos données avec les collections “h5p”, “learnr” et “shiny”. Naturellement, vous pouvez donner le nom que vous souhaitez à ces deux base de données.

  • Installation et configuration de MongoDB sur un serveur dédié avec uniquement la base de données “cours”, et des tables “users”, “h5p”, “learnr”, “shiny”, … Également, mise en place de scripts cron (voir plus loin) pour récupérer les données venant de MongoDB ATLAS toutes les 5 min et pour faire des backups journaliers de la base de données.

  • Installation d’un serveur MongoDB local sur une machine sous Windows ou macOS pour travailler hors connexion avec un snapshot des données obtenu via mongodump/mongorestore.

Ces trois systèmes sont détaillés ci-dessous.

10.3.1 MongoDB ATLAS

TODO: expliquer l’organisation de MongoDB ATLAS…

10.3.2 Serveur MongoDB local associé à Posit Connect

TODO: développer l’innstallation du serveur MongoDB, voir https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu. Ci-dessous un script exemple qui date et qui doit être mis à jour :

sudo apt-get install gnupg
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
sudo apt-get update
# Either latest version
sudo apt-get install -y mongodb-org
# ... or specific version
#sudo apt-get install -y mongodb-org=4.4.0 mongodb-org-server=4.4.0 mongodb-org-shell=4.4.0 mongodb-org-mongos=4.4.0 mongodb-org-tools=4.4.0
# Optionally freeze version
#echo "mongodb-org hold" | sudo dpkg --set-selections
#echo "mongodb-org-server hold" | sudo dpkg --set-selections
#echo "mongodb-org-shell hold" | sudo dpkg --set-selections
#echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
#echo "mongodb-org-tools hold" | sudo dpkg --set-selections
# Determine if it is systemd or init that is used
ps --no-headers -o comm 1 # systemd here
# Start mongodb
sudo systemctl start mongod

# By default, MongoDB only accept clients from same machine (what we want)
# Data directory is /var/lib/mongodb, but we want /data1/mongodb
sudo mkdir /data1/mongodb
sudo chown -R mongodb:mongodb /data1/mongodb
# Edit /etc/mongod.conf and adjust dbPath to /data1/mogodb
sudo nano /etc/mongod.conf

# Start the MongoDB server and test it from R
sudo systemctl start mongod
# If an error, first try sudo systemctl daemon-reload
# Status (can also use start/stop/restart
sudo systemctl status mongod
R
library(mongolite)
con <- mongo(collection = "shiny", db = "sdd")
con$insert(trees)
trees2 <- con$find()
all.equal(trees, trees2)
con$drop()
rm(con)
gc()
q("no")

# Quand c'est bon, activer le service définitivement avec
sudo systemctl enable mongod

# Create a program supervisor for common environment variables (not done yet)
mkdir -p /opt/scripts
touch /opt/scripts/connect-env.sh
nano /opt/scripts/connect-env.sh

# Add this in the file:

#!/bin/bash

echo arguments: “$@“ >&2
echo >&2
export MONGO_URL=“mongodb://sdd:sdd@sdd-umons-shard-00-00-umnnw.mongodb.net:27017,sdd-umons-shard-00-01-umnnw.mongodb.net:27017,sdd-umons-shard-00-02-umnnw.mongodb.net:27017/test?ssl=true&replicaSet=sdd-umons-shard-0&authSource=admin”
export MONGO_BASE=“sdd”
exec “$@“

Then:
chmod 755 /opts/scripts/connect-env.sh

Add the following in /etc/rstudio-connect/rstudio-connect.gcfg
[Applications]
Supervisor = /opt/scripts/connect-env.sh

10.3.3 Serveur local MacOS ou Windows

Le plus simple est de regrouper dans un dossier sur un disque SSD externe tous les programmes et toutes les données relatives à un snapshot donné de notre LRS afin de pouvoir manipuler tout cela de manière indépendante et sécurisée (accès local uniquement). Le dossier de base contient deux sous-dossiers : bin et db.

Le dossier bin contient tous les exécutables macOS et Windows nécessaires, soit mongod et mongo de la distribution de MongoDB, et bsondump, mongodump, mongoexport, mongofiles, mongoimport, mongorestore, mongostat et mongotop des MongoDB Data Tools de version compatible. Ces versions sont choisies identiques à celles déployées sur votre serveur dédié et/ou sur MongoDB Atlas1. Ces différents exécutables sont récupérés depuis les installeurs (format .tgz ou .zip) macOS et Windows depuis MongoDB on-premises et MongoDB tools. Ses exécutables macOS et Windows occupent un peu plus de 1Go dans le dossier bin.

Le dossier db contient le snapshot de la base de données. Il est créé en réalisant un mongorestore à partir des données obtenues par mongodump depuis votre serveur externe comme ceci (exemple sous MacOS) :

# On your serveur, navigate to a emty folder, say '/data/dump/sdd', then:
mongodump # Possibly restrict with --collection=<col_name> and/or --query='{"x": {"$gt":1}}'
# Compress this folder
cd ..
tar -czvf sdd.tar.gz sdd
rm -rf sdd
# Go back to your local machine, then:
cd <empty_temporary_dir>
scp unser@server.edu:/data/dump/sdd.tar.gz sdd.tar.gz # Enter password...
tar -xzvf sdd.tar.gz
rm sdd.tar.gz
cd ..
<path_to>/mongorestore # Of course, the local MongoDB server must be running here

En plus de ces deux sous-dossier, il y a également deux scripts qui permettent de lancer le serveur MongoDB sous macOS ou sous Windows. Ces scripts sont :

  • sdd_server_macos.sh :
#!/bin/bash
cd "$(dirname "$0")"
port=27017
./bin/mongod --port $port --dbpath db
  • sdd_server_win.bat :
@echo off
set port=27017
start cmd /c bin\mongod --port %port% --dbpath db

Le script correspondant à votre système doit être exécuté soit dans un terminal macOS, soit dans une fenêtre Powershell Windows après avoir changé le répertoire par défaut vers le dossier racine :

cd <dossier_racine>
./sdd_server_macos.sh ou ./sdd_server_win.bat

TODO: Un script qui remplit le sous-dossier bin en fonction du système, et qui traite aussi le cas Linux Ubuntu.

Un démon MongoDB serveur local est lancé sur le port 127.0.0.1:27017 et sert les données présentes dans le sous-dossier db. Les messages du serveur sont directement affichés dans la fenêtre terminal. À partir de ce moment, on peut travailler tranquillement sur les données, les analyser et/ou prototyper des outils à déployer ensuite sur le serveur sans craintes de casser la base de données principale. Ce serveur ne permet qu’un accès local. Donc, il est parfaitement sécurisé.

Les versions de MongoDB sur le serveur et sur votre disque SSD doivent toujours être les mêmes, ainsi que celles sur MongoDB Atlas. En cas de changement de version, il faut donc bien penser à remplacer les exécutables du dossier bin par les nouvelles versions avant de continuer à travailler !

10.3.4 Mise-à-jour de MongoDB

La version de MongoDB serveur est dictée par celle installé dans MongoDB Atlas. Voici les étapes à réaliser pour une mise à jour :

  • Vérification de la compatibilité du driver PHP dans Wordpress et upgrade éventuel (voir le chapitre 11).

  • Vérification de la compatibilité de {mongolite} dans R, à la fois sur l’ordinateur des enseignants et sur les machines des étudiants :

packageVersion("mongolite")
# If needed:
#remotes::install_github("jeroen/mongolite@vX.X.X")
  • Vérification de l’option “featureCompatibilityVersion” qui doit être mise à une valeur correcte (selon que vous voulez pour l’instant rester compatible avec l’ancien sans utiliser les fonctionnalités de la nouvelle version de MongoDB ou pas), donc dans R :
library(mongolite)
# Start the local server, then... check featureCompatibilityVersion
admin <- mongo(url = "mongodb://127.0.0.1:27017/admin")
admin$run('{ "getParameter": 1, "featureCompatibilityVersion": 1 }')
# If it is lower than 4.4, check first upgrade recommandations, then
#admin$run('{ "setFeatureCompatibilityVersion": "4.4" }')
  • Mettre à jour les versions de MongoDB Tools. Faire cet upgrade sur les versions locales aussi.

  • Tester la compatibilité de la nouvelle version de MongoDB sur une instance locale de la base de données et y exécuter les différents requêtes. Si tout va bien, mettre à jour les serveurs.


  1. Aligner les versions majeurs de MongoDB avec MongoDB Atlas nécessite de jongler un peu avec les mises à jour car nous n’avons aucuns contrôles des versions sur Atlas dans un compte gratuit. Vous êtes prévenu à l’avance lorsqu’une migration vers une nouvelle version de MongoDB sur Atlas va se faire et vous devez vous aligner !↩︎