Skip to content

Guide de déploiement

Ludovic Herbelin edited this page Dec 14, 2018 · 4 revisions

Contexte et prérequis

Nous avons à disposition un serveur web dans un container accessible en SSH sur lequel la version 10.11.0 de Node.js, composer, git ainsi que la version 6.4.1 de npm sont installées.

Note : en cas de crash du container, tous les package Node.js sont désinstallés. Il est donc nécessaire de les réinstaller et de relancer les services de pm2.

Récupération du code source

-- Connexion en ssh. --

cd ~/www/Complex-DLMA/

git fetch --all

git status

-- Gestion des conflits. --

git pull origin master

Déploiement de la partie Laravel

composer install --optimize-autoloader --no-dev

composer update --prefer-dist -vvv --profile

php artisan config:cache

composer dump-auto

À ne faire qu'en cas de volonté de reset les données de la bdd :

php artisan migrate:refresh

Déploiement de la partie Node.js

Installation des modules nécessaires

Si websocket n'est pas déjà installé (pour tester : npm list websocket ) :

npm install websocket

Si uuid n'est pas déjà installé (pour tester : npm list uuid ) :

npm install uuid

Si pm2 n'est pas déjà installé (pour tester : npm list pm2 ) :

npm install pm2 -g

Utilisation de pm2

Dans le cas où le serveur a déjà été démarré (pour tester : pm2 list ) :

pm2 stop nodeServer

pm2 delete nodeServer

Démarrage du service et configuration de pm2 (en cas de redémarrage du serveur) :

pm2 start nodeServer.js

pm2 startup

-- Taper la commande affichée dans l'output de la commande précédente. --

Utilisation de Node.js avec l'infrastructure fournie

Nous avons rencontré un problème lors du premier déploiement de notre application Node.js sur l'infrastructure fournie par la HE-Arc qui nous empêchait d'établir un websocket entre le serveur Node et un client.

Il s'est avéré que le problème provenait du fait que le client essayait de communiquer sur un port inaccessible depuis l'extérieur du serveur web. Les seuls ports disponibles étaient le 443 (https) et le 80 (http).

Nous avons donc modifié les fichiers de configuration du serveur de telle manière qu'il redirige les requêtes du client Node sur un port interne spécifique sur lequel écoute le serveur Node.js.

Nous avons ainsi modifié le fichier ~/www/config/nginx.conf pour y ajouter la route suivante :

location ~ ^/socket\.io {
        proxy_pass http://localhost:1337;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;
    }

Selon la configuration ci-dessus, le client Node.js doit donc communiquer à l'adresse "wss://complexdlma.srvz-webapp.he-arc.ch:443/socket.io" et le serveur doit écouter à l'adresse 127.0.0.1:1337.

Source : L'article traitant de la configuration de Nginx duquel nous avons trouvé la solution à ce problème (consulté le 14.12.18)

Problème résolu grâce à J.Crescoli.