Skip to content

Deploiement

rigwild edited this page Dec 19, 2018 · 4 revisions

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).

Notes importantes

  • 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.

Preliminaires

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 ...)

Deployer & executer le serveur (avec Docker)

Avant de commencer, vous devez installer :

Mode Production

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 :

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.

Mode Developpement

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 :

Exécuter le serveur (sans Docker)

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).

Mode Développement

Les détails de ce mode sont disponibles dans la version Docker.

npm run apollo

Les ports suivants sont donc exposés :

Mode Production

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 :

Explication de la configuration de Docker

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 et Dé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.