Déployer un serveur Node.JS sur Centos

Source

Source : https://github.com/goffinet/guide-ansible-playbooks/tree/master/ansible-linux/10-deployer-un-serveur-nodejs-centos

Objectifs

  • Un second livre de jeu.
  • Enregistrement de variables (register:) et appel de la variable dans une autre tâche sous condition (when:)

1. Présentation

Dans cet exemple, on déploie une application Node.JS avec NPM sur Centos. Il s’agit d’un exemple de déploiement simple d’un stack de développement.

2. Variables

On définit une variable node_apps_location dans le jeu.

On peut définir la variable dans la ligne de commande --extra-vars="node_apps_location=/usr/local/opt/node"

- hosts: all
  become: yes
  vars:
    # Vars can also be passed in via CLI with `--extra-vars="name=value"`.
    node_apps_location: /usr/local/opt/node

3. Dépôts supplémentaires et leur clé GPG

La procédure pour installer des dépôts supplémentaires et leur clé GPG.

   - name: Install Remi repo.
      yum:
        name: "https://rpms.remirepo.net/enterprise/remi-release-7.rpm"
        state: present
    - name: Import Remi GPG key.
      rpm_key:
        key: "https://rpms.remirepo.net/RPM-GPG-KEY-remi"
        state: present
    - name: Install EPEL repo.
      yum:
        name: epel-release
        state: present

4. Installation de Node.JS

    - name: Ensure firewalld is stopped (since this is a test server).
      service:
        name: firewalld
        state: stopped
    - name: Install Node.js and npm.
      yum:
        name: npm
        state: present
        enablerepo: epel
    - name: Install Forever (to run our Node.js app).
      npm:
        name: forever
        global: yes
        state: present

5. Installation de l’application

Voici cette application qui doit être accompagnée du fichier de dépendances package.json.

cat app/app.js
// Simple Express web server.
// @see http://howtonode.org/getting-started-with-express

// Load the express module.
var express = require('express');
var app = express();

// Respond to requests for / with 'Hello World'.
app.get('/', function(req, res){
    res.send('Hello World!');
});

// Listen on port 80 (like a true web server).
app.listen(80);
console.log('Express server started successfully.');
    - name: Ensure Node.js app folder exists.
      file:
        path: "{{ node_apps_location }}"
        state: directory
    - name: Copy example Node.js app to server.
      copy:
        src: app
        dest: "{{ node_apps_location }}"
    - name: Install app dependencies defined in package.json.
      npm:
        path: "{{ node_apps_location }}/app"

6. Lancement de l’application

Ici, on utilise forever list pour connaître la liste de ses applications. forever start est lancé uniquement quand le chemin de notre application ne se trouve pas dans la valeur enregistrée dans forever_list.

    - name: Check list of running Node.js apps.
      command: forever list
      register: forever_list
      changed_when: false
    - name: Start example Node.js app.
      command: "forever start {{ node_apps_location }}/app/app.js"
      when: "forever_list.stdout.find(node_apps_location + '/app/app.js') == -1"