Application Meteor sur Debian

Pascal Richier & Morea.fr

Application Meteor sur Debian

Présenté par Pascal Richier & www.morea.fr

Conception et infogérance d’infrastructures critiques

Les étapes d'installation & configuration

  1. MongoDB

Le tout, sans compilation
sous Debian 7.2 Wheezy

Conception et infogérance d’infrastructures critiques

MongoDB : installation

Dernière version de MongoDB disponible depuis les dépôts MongoDB

			$ # Importer la clé PGP de MongoDB
            $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
			$ # Créer un fichier sources.list pour MongoBD
            $ echo 'deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen' | 
sudo tee /etc/apt/sources.list.d/mongodb.list
$ # Recharger la liste des paquets et installer MongoBD $ sudo apt-get update $ sudo apt-get install mongodb-10gen

Conception et infogérance d’infrastructures critiques

MongoDB : configuration du compte admin

Si vous utilisez un firewall et que vous ne donnez pas accès au port 27017 de votre serveur, vous pouvez sauter cette étape.

            $ # Lancer un MongoDB shell
            $ mongo
               # Sélection de la base de données admin
               db = db.getSiblingDB('admin')
               # Ajout du compte administrateur
               db.addUser({user: "adminuser", pwd: "myPWD", roles: ["userAdminAnyDatabase", "clusterAdmin", "readAnyDatabase"]})
               # Quitter le shell 
               exit
        

Conception et infogérance d’infrastructures critiques

MongoDB : activation du mode authentifié

Édition de la configuration : /etc/mongodb.conf

            dbpath=/var/lib/mongodb
            logpath=/var/log/mongodb/mongodb.log
            logappend=true
            #port = 27017
            # Disables write-ahead journaling
            # nojournal = true
            # Turn on/off security.  Off is currently the default
            #noauth = false
            auth = true
        

Ne pas oublier de relancer MongoDB :sudo /etc/init.d/mongodb restart

Conception et infogérance d’infrastructures critiques

MongoDB : utilisateur et base

            $ # Connection avec le compte admin
            $ mongo -u adminuser -p --authenticationDatabase admin
   MongoDB shell version: 2.4.8
   Enter password:
   connecting to: test
   >
               # Sélection de la base de données testdatabase
               use testdatabase
               # Ajout d'un compte pour notre application
               db.addUser({ user: "testuser", pwd: "testuserpass", roles: [ "readWrite", "userAdmin"] })
               # Sortons du shell 
               exit
        

Conception et infogérance d’infrastructures critiques

Node & npm : installation

Via les dépôts Backports.debian.org

            $ # Ajout des dépôts Backports et rechargement de la liste des paquets
            $ echo "deb http://ftp.us.debian.org/debian wheezy-backports main" >>
/etc/apt/sources.list
            $ apt-get update
            $ # Installation de Node
            $ apt-get install nodejs-legacy
            $ # Installation de npm
            $ curl https://npmjs.org/install.sh | sh
        

Rappel : les paquets Backports ne sont pas prioritaires !

Conception et infogérance d’infrastructures critiques

Node & npm : petit bug

Si l'installation de npm échoue car il ne trouve pas Node

            $ ln -s /usr/bin/nodejs /usr/bin/node
            $ ln -s /usr/lib/nodejs /usr/lib/node
        

npm cherche node, or il est installé sous nodejs

Relancer l'installation de npm

            $ curl https://npmjs.org/install.sh | sh
        

Conception et infogérance d’infrastructures critiques

NGinX : installation

Via les dépôts Dotdeb

            $ # Ajout des dépôts Dotdeb et rechargement de la liste des paquets
            $ echo "http://packages.dotdeb.org wheezy all" >> /etc/apt/sources.list
            $ wget http://www.dotdeb.org/dotdeb.gpg
            $ apt-key add dotdeb.gpg # la clé GnuPG de Dotdeb
            $ apt-get update
            $ # Installation de NGinX
            $ apt-get install nginx
        

Conception et infogérance d’infrastructures critiques

NGinX : conf. des vhosts à la Apache2

  1. Création des répertoires
                    $ mkdir /etc/nginx/sites-available /etc/nginx/sites-enabled
                

Conception et infogérance d’infrastructures critiques

NGinX : créer un virtual host

Ajout d'un fichier /etc/nginx/sites-available/my-meteor-app.com

            upstream my_meteor_app {
        server 127.0.0.1:58080;
}
server {
        listen 0.0.0.0:80;
        server_name my-meteor-app.com;
        access_log /var/log/nginx/my-meteor-app.access;
        location / {
                proxy_pass http://my_meteor_app/;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forward-Proto http;
                proxy_set_header X-Nginx-Proxy true;
                proxy_redirect off;
        }
}
        

Conception et infogérance d’infrastructures critiques

NGinX : suite et fin...

  1. Création du lien symbolique activant notre vhost
                    $ cd /etc/nginx/sites-enabled
                    $ ln -s /etc/nginx/sites-available/my-meteor-app.com
                

Conception et infogérance d’infrastructures critiques

Forever : relance en cas de crash

  1. Installation de Forever et utilisation
                    $ npm install forever
                    $ forever my_node_app.js
                

Il existe une alternative à Forever : PM2.

Meteor : bundle sur la machine de DEV

Meteor n'est pas installé sur la machine de PROD, uniquement sur la machine de DEV.

  1. Installation de demeteorizer
                    $ npm install -g demeteorizer
                

Conception et infogérance d’infrastructures critiques

Un script pour démarrer l'application

echo "[+] Starting Meteor App!"
if [ "$1" = "" ]
        then
        echo "[-] Usage: <dir>"
        echo "[!] Path needed for the containing project folder"
        exit 0
fi
if [ ! -d $1 ]
        then
        echo "[!] Could not enter the dir: $1"
        exit 0
fi
cd $1
echo "[+] Running NPM"
npm install &>/dev/null
echo "[+] Setting environment variables"
export MONGO_URL='mongodb://testuser:testuserpass@127.0.0.1:27017/testdatabase'
export PORT=58080
export ROOT_URL='http://localhost/'
echo "[+] Starting Node Server"
forever main.js

Utilisation :

$ # Enregistrer le script dans ~/www
$ cd ~/www
$ chmod +x ./start_app.sh
$ ./start_app.sh ./testapp

Pour débuter

  1. Monitoring CPU & RAM avec htop
    1. $ apt-get install htop
    2. $ htop
    3. Activer le filtre avec la touche F4 (ex: taper node)

Pour héberger vos applications Meteor critiques

MOREA vous accompagne dès la conception de votre architecture technique jusqu’à l’infogérance de vos services ou applications critiques. Morea travaille principalement avec des technologies Open Source.
Ils font confiance à Morea :

Merci !

www.morea.fr