Deploiement
Cette page explique comment CodinSchool gère le déploiement du projet, et donc par quels moyens il est possible d'exécuter et de tester le serveur. Elle détaille aussi la configuration utilisée.
CodinSchool est basé sur une architecture Microservices et utilise donc la technologie Docker pour générer le déploiement de ce projet. Si vous êtes intéressé par ce choix, nous vous conseillons de jeter un œil à : « Pourquoi Docker ? » (en Anglais).
- Docker utilise des conteneurs, qui ne sont pas des machines virtuelles. Plus de détails ici (en Français).
- Rien n'empêche d'exécuter le serveur sans passer par Docker, bien que cela complique l'installation étant donné que le projet dépend de plusieurs services (Base de données PostgreSQL et Serveur d'évaluation du code utilisateur, en outre). Voir
Exécuter le serveur (sans Docker)
pour plus de détails sur cette procédure. - Cette documentation utilise la notion de
mode
pour distinguer l'utilisation faîte du projet, mais n'est pas demandée par Docker. Il s'agit d'un choix de l'équipe de développement pour simplifier la maintenance du projet.
Dans un premier temps, vous devez télécharger les sources du projet. Vous pouvez faire cela en téléchargeant directement les sources depuis le dépot GIT et en décompressant le dossier, ou en clonant le dépot avec la commande GIT suivante :
git clone https://github.com/Minigugus/CodinSchool.git
# Sous Ubuntu, GIT peut être installé via la commande (sans les commentaires) :
# sudo apt install git
Par la suite, on considèrera que les commandes seront entrées dans un terminal se trouvant dans le dossier du projet (commande cd
).
Lors des étapes qui suivent, vous serez amené à choisir un mode de déploiement :
- Production : Pour les opérateurs (mise en ligne du site)
- Développement : Pour les développeurs (débogage, tests, etc ...)
Avant de commencer, vous devez installer :
- Docker
- Windows (Microsoft Windows 10 Professional et Enterprise 64-bit uniquement, Ne fonctionne pas avec les autres versions de Windows ! Docker nécessite la technologie Hyper-V.) : « Docker Desktop »
- Linux (Ubuntu 16.04 et ultérieur) : Disponible avec Aptitude (commande
apt-get
). - Mac : « Docker Desktop »
- Docker-Compose (Guide d'installation)
Dans ce mode, vous pouvez déployer CodinSchool avec la commande suivante :
docker-compose -f docker-compose.prod.yml up
# docker-compose -f [FICHIER DE CONFIGURATION] up
Vous devez cependant définir préalablement la variable d'environnement SECRET_JWT
.
Cette variable indique le secret à utiliser pour générer les jetons de connexion à CodinSchool, et doit donc être fort et bien protégé, puisqu'un pirate pourrait s'en servir pour usurper l'identité d'un utilisateur.
Vous pouvez spécifier cette variable avec cette commande :
- Unix (Linux, Mac)
# export SECRET_JWT=[VOTRE_SECRET_ICI]
export SECRET_JWT=votre_secret
- Windows
:: set SECRET_JWT=[VOTRE_SECRET_ICI]
set SECRET_JWT=votre_secret
Pour résumer, sous Linux, il vous faudra entrer les commandes similaire à celles-ci :
export SECRET_JWT=aZerT2Eq5CF$sd4zE4%sHjhL4JKjyu4
docker-compose -f docker-compose.prod.yml up
Les ports suivants sont donc exposés :
- 80 : Serveur Web CodinSchool avec API GraphQL, accessible via http://ip-ou-nom-dns-de-votre-server/.
Dans les versions futures de CodinSchool, des clées RSA publiques et privées générées aléatoirement seront utilisées à la place de ce secret, sous la forme de fichiers.
Le mode développement est utilisé par les collaborateurs du projet et permet notamment un débogage et un traitement des erreurs plus adapté aux conditions de développement. En contre-partie, celui-ci expose donc des failles de sécurité et ne doit pas être utilisé sur un serveur publique !
NOTE : Ce mode risque de causer un problème de permissions sur les fichiers du projet créés par le conteneur. Pour l'instant, vous devrez donc régler ce problème manuellement après l'arrêt du conteneur.
Le serveur peut être lancé avec la commande :
docker-compose -f docker-compose.dev.yml up
Les ports suivants sont donc exposés :
- 4000 : Serveur GraphQL, accessible via http://ip-ou-nom-dns-de-votre-server/.
- 8080 : Serveur Web CodinSchool (avec Hot Reload), accessible via http://ip-ou-nom-dns-de-votre-server/.
Sans Docker, il est nécessaire d'installer Node.JS.
Ensuite, il vous faut installer les dépendances de CodinSchool (toujours dans le dossier du projet) :
# Le `--save-dev` sert à installer les dépendances développeurs,
# nécessaires pour compiler les sources en HTML/CSS/JS (avec Webpack).
npm install --save-dev
Il ne vous reste plus qu'à lancer le serveur, dans l'un des 2 modes suivants (au choix).
Les détails de ce mode sont disponibles dans la version Docker.
npm run apollo
Les ports suivants sont donc exposés :
- 4000 : Serveur GraphQL, accessible via http://ip-ou-nom-dns-de-votre-server:4000/.
- 8080 : Serveur Web CodinSchool (avec Hot Reload), accessible via http://ip-ou-nom-dns-de-votre-server:8080/.
Vous devez indiquer à Node que vous souhaitez lancer le serveur en mode production.
Cela se fait via la variable d'environnement NODE_ENV
:
- Unix (Linux, Mac)
export NODE_ENV=production # Unix (Linux/Mac)
- Windows
set NODE_ENV=production
Ensuite, il suffit d'entrer les commandes suivante :
# Compile les fichiers source en HTML/CSS/JS (avec Webpack) dans le dossier `dist`
npm run build
# Lance le serveur CodinSchool avec l'API GraphQL incluse
npm run serve:production
Les ports suivants sont donc exposés :
- 80 : Serveur Web CodinSchool avec API GraphQL, accessible via http://ip-ou-nom-dns-de-votre-server/.
Les fichiers suivants servent à configurer Docker et Docker-Compse :
- Dockerfile : Instructions servant à Docker pour construire une image du projet, c'est-à-dire une archive prête à l'emploi. Cette image servant de base au système de fichiers des conteneurs exécutant CodinSchool.
-
docker-compose.prod.yml et docker-compose.dev.yml : Respectivement les versions
Production
etDéveloppement
du fichier de configuration de Docker-Compose. Définissent tous les services qui doivent être lancés, ainsi que leur configuration, pour permettre l'exécution de CodinSchool. Il comprend le serveur CodinSchool, la base de données PostgreSQL et le serveur d'exécution du code utilisateur. Docker-Compose se charge donc de créer un conteneur par service.