/GMPPT

Projet tutoré permettant au département GMP de gérer les résultats d’exercices personnalisés sur une interface Web

Primary LanguageJavaScript

GMPPT

build

Projet tutoré permettant au département GMP de gérer les résultats d'exercices personnalisés sur une interface Web. Dans ce README, vous trouverez la documentation technique afin d'installer notre application sur un nouveau serveur ainsi que de maintenir notre projet. Pour tout problème, vous pouvez ouvrir une issue ou contacter l'un des collaborateurs.

Sommaire

  1. Système d'exploitation
  2. Installation générale
    a. Installation de la base de données
    b. Installation du backend
    c. Installation du frontend
  3. Erreurs communes

Système d'exploitation

Notre application fonctionne actuellement sous Linux Debian 10 x86-64. Pour cette documentation, nous partirons du principe que nous sommes sur un environnement Linux Debian. Il est possible d'installer notre application sur une autre distribution de Linux, mais les commandes, versions et chemins pourraient changer.

Aucun support pour Windows ou Mac est prévu.

Installation générale

Vous trouverez ci-dessous les outils nécessaires au fonctionnement de notre projet. La configuration présentée a été testée et est stable. Nous ne vous conseillons pas de changer de serveur web car une configuration d'Apache2 a été réalisée pour le projet et est détaillée dans la suite de cette documentation. MariaDB peut être remplacé par MySQL facilement. Pour Node.JS, il est conseillé de rester dans la version 14 ou 15 car ce sont les versions stables lors de l'écriture de cette documentation.

Commande(s) Version
Node.JS curl -sL https://deb.nodesource.com/setup_14.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh
sudo apt install nodejs
>=14.6.0
Apache2 sudo apt-get install apache2 2.4
MariaDB sudo apt install mariadb-server 10.3.27
Giac sudo apt-get install xcas >=1.6.0
PM2 sudo npm i -g pm2 >=4.5.0

Installation de la base de données

Une fois les outils présentés au-dessus installé sur votre machine, commençons par l'initialisation de la base de données. Pour se faire, télécharger le script dans /docs/gmp.sql sur ce dépôt. Une fois le script sur la machine hébergeant la base de données, vous n'avez qu'à utiliser la commande mysql -u NOMUTILISATEUR -p NOMDEDATABASE < CHEMIN/DU/FICHIER/A/IMPORTER puis à écrire le mot de passe du compte. La base de données de notre application est maintenant installée.

Installation du backend

La base de données étant maintenant installée, nous allons lancer notre API sur la machine. Dans un premier temps, choisissez un répertoire où celle-ci sera installée. Ce répertoire peut être n'importe où sur votre machine mais nous vous conseillons quelque chose comme /home/tech/backend où tech est un utilisateur de la machine différent de root. Une fois dans ce répertoire, récupérez le dossier Backend et uniquement ce dossier de ce dépôt GitHub et déposer le dans votre dossier créé. Vous devriez avoir une arborescence suivante :

./backend
├── app.js
├── databases.js
├── middleware.js
├── .env
├── package.json
├── package-lock.json
├── routes
│ ├── architecture.js
│ ├── auth.js
│ ├── correction.js
│ ├── etudiant.js
│ ├── modele.js
│ ├── promo.js
│ └── unite.js
├── strategies
│ └── local.js
└── utils.js

Une fois cette étape complétée, vous devez naviguer dans ce dossier puis entrez la commande npm i. Les dépendances vont s'installer automatiquement. Une fois le processus fini, comme vous pouvez le remarquer dans l’arborescence, un fichier .env est disponible. Utilisez nano .env pour l'ouvrir et le configurer. Vous obtiendrez un fichier comme ci-dessous. Vous devez le compléter afin que l'API puisse fonctionner correctement.

PORT=3001 Le port de l'API
DB_HOST=localhost Si vous hebergez la base de donnees sur la meme machine 
DB_PORT=3306 par defaut pour MariaDB 
DB_DATABASE=Nom de la base que vous avez creer/importer precedemment 
DB_USER=Le nom d utilisateur pour se connecter a la base de donnees. Verifier que cette utilisateur possede toutes les permissions sur la base entree precedemment 
DB_PWD=Le mot de passe pour l utilisateur de la base de donnees 
COOKIE_SECRET=Le grain de sel pour les cookies 
DOMAIN=164.1.1.1 L adresse ip qui permet de requeter le serveur (Ne pas utilisez localhost, ni 127.0.0.1, vous devez utilisez l ip publique du serveur) 
ORIGINHTTP=http://164.1.1.1 L origine des requetes autorise. Si le serveur apache est sur la meme machine, utilisez la meme ip avec le protocol http 
ORIGINHTTPS=https://164.1.1.1 L origine des requetes autorise. Si le serveur apache est sur la meme machine, utilisez la meme ip avec le protocol https

Une fois la configuration terminée, vous n'avez plus qu'à lancer la commande pm2 start index.js --name Backend. Cette commande va exécuter l'API pour la mettre en ligne. Pour vérifier que tout est opérationnel, utilisez la commande pm2 logs pour vérifier que la dernière ligne est égale à ceci :
api_ok

Installation du frontend

La dernière partie pour que notre application soit utilisable est la partie client. Nous allons devoir dans un premier temps configurer Apache2. Rendez vous dans la configuration d'apache sudo nano -l /etc/apache2/apache2.conf puis à la ligne 170. Nous allons autoriser l'utilisation des fichiers .htaccess dans le répertoire /var/www/ afin de pouvoir faire fonctionner notre application avec la configuration déjà fournie. Vous devez donc avoir la configuration suivante :

apache_config

Maintenant qu'Apache2 est opérationnelle, la dernière étape est d'importer et configurer notre application web. Pour se faire, téléchargé uniquement le dossier dans Frontend/build de ce dépôt. Vous n'avez qu'à déposer le contenu de ce dossier dans /var/www/html. Le dernier point avant que notre application ne soit utilisable est la configuration du frontend. Ouvrez le fichier nano config.js et entrez les informations nécessaires dans les guillemets :

window.host = "164.1.1.1"; // L'adresse ip de l'api
window.port = "3001"; // Le port de l'api (le même que PORT= dans le .env)
window.max_variable = 75; // Nombre maximale de variables aléatoires par modèle de sujet
window.max_catformule = 30; // Nombre maximale de catégories de formules par modèle de sujet
window.max_formule = 20; // Nombre maximale de formules par modèle de sujet
window.max_question = 20; // Nombre maximale de questions par modèle de sujet
window.max_reponse = 10; // Nombre maximale de réponses par question par modèle de sujet

Vous pouvez maintenant aller sur l'adresse ip du serveur apache pour voir si l'application est en ligne. Si vous arrivez sur le portail de connexion et que vous pouvez vous connectez avec l'identifiants root et le mot de passe toor@, l'application GMPPT est opérationnelle 🎉 !

Erreurs communes

La principale erreur que vous êtes amené à rencontrer lors de l'installation d'une nouvelle est l'erreur CORS. Celle-ci apparaît si l'API n'est pas atteignable par le serveur Apache. Elle indique une mauvaise configuration dans le .env du backend et la config.js du frontend. Il s'agit d'une mauvaise configuration des adresses IP/ports.

Il est aussi possible d'obtenir une erreur npm lors de l’exécution de npm i pour l'installation de l'API même si elle est plus rare que l'erreur CORS. Nous vous conseillons de regarder l'erreur générée par npm afin de comprendre quel package ou composant cause cette erreur.

Pour tout autre problème d'installation ou de bug dans l'application, merci d'ouvrir une issue ici.

Documentation écrite avec ❤️ par @Sawangg