Node Atlas NodeAtlas

Le Framework JavaScript Serveur Évolutif

  • Mise en place Simple

    Au point avec HTML & CSS ?
    Débutant en JavaScript ?

    Réalisez rapidement des sites vitrines multilingues sans effort avec l'utilisation de routes, vues ou variations.

  • Site vivant et Évolutif

    Expert en JavaScript client ?
    Prêt à embrasser Node.js ?

    Améliorer progressivement votre base à mesure de vos besoins en utilisant des contrôleurs, modèles ou modules.

  • Partie Cliente Agnostique

    Déjà vos habitudes Front-end ?
    Habitué(e) du Data Binding ?

    Du léger Vanilla au simple jQuery en passant par Vue, Angular ou React : utiliser vos bibliothèques clientes favorites !

Environnement de Production

C'est bien de développer, mais il est temps de faire tourner vos réalisations sur des serveurs de production. Voici divers exemple.

IMPORTANT : il est fortement recommandé d'utiliser l'option "cache": true dans le webconfig de production afin de permettre au moteur d'être optimisé ou mettre votre variable d'environnement NODE_ENV à production.


NOTE : il est possible que le proxy que vous utilisiez ne gère pas les websockets. Dans ce cas il faudra limiter le transport à "socketServerOptions": { transports: ['polling'] } (par défaut en l'absence de cette valeur les transports sont progressivement testé comme suit { transports: ['polling', 'websocket'] }.

Dans un environnement Windows Server avec iisnode

Dans un environnement Windows Server 2013 avec IIS8 il faut :

  1. Installer l’exécutable node.exe capable d’exécuter du code JavaScript.
  2. Installer le module IIS8 UrlRewrite pour mapper les pages exécutées à une Url de sortie.
  3. Installer le module IIS8 issnode pour lire des web.config et manager des site via IIS (Management de pool d’application, démarrage/arrêt de site, etc...).

Créer une application

Dans IIS8, créez un Website et créez une Application.

Le contenu de votre application sera celui du site mélangé à celui de NodeAtlas. Cela signifie donc que ceci :

node-atlas/
├─ node_modules/
│  ┊┉
├─ languages/
│  ┊┉
│  └─ default.json
┊┉
└─ index.js
site-hello-world/
├─ assets/
│  ┊┉
├─ views/
│  └─ index.htm
└─ webconfig.json

devient ceci :

site-hello-world/
├─ node_modules/
│  ┊┉
├─ languages/
│  ┊┉
│  └─ default.json
┊┉
├─ assets/
│  ┊┉
├─ views/
│  └─ index.htm
├─ index.js
└─ webconfig.json

Vous rajouterez à cet ensemble de fichiers, un fichier supplémentaire nommé web.config dont le contenu est le suivant :

<configuration>
    <system.webServer>
        <handlers>
            <add name="iisnode" path="node-atlas.js" verb="*" modules="iisnode" />
        </handlers>
        <rewrite>
            <rules>
                <rule name="LogFile" patternSyntax="ECMAScript" stopProcessing="true">
                     <match url="^[a-zA-Z0-9_\-]+\.js\.logs\/\d+\.txt$"/>
                </rule>
                <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
                    <match url="^node-atlas.js\/debug[\/]?" />
                </rule>
                <rule name="StaticContent">
                     <action type="Rewrite" url="assets{REQUEST_URI}"/>
                </rule>
                <rule name="DynamicContent">
                     <conditions>
                          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
                     </conditions>
                     <action type="Rewrite" url="node-atlas.js"/>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

pour au final obtenir :

site-hello-world/
├─ node_modules/
│  ┊┉
├─ languages/
│  ┊┉
│  └─ default.json
┊┉
├─ assets/
│  ┊┉
├─ views/
│  └─ index.htm
├─ index.js
├─ webconfig.json
└─ web.config

Il ne vous restera plus qu'à cliquer sur « Browse » dans votre panneau d'action IIS8. Vous pouvez dès lors manager votre site (Démarrage / Arrêt / Recyclage de Pool) comme pour n'importe quelle autre application IIS8.

webconfig exemple

Un webconfig exemple pour une production :

{
    "urlPort": 80,
    "httpPort": 7777,
    "httpHostname": "www.example.fr",
    "routes": {
        ...
    }
}

Dans un environnement Unix avec forever

Il faut pour cela :

  1. Installer l’exécutable node.exe capable d’exécuter du code JavaScript.
  2. Installer le CLI tool forever pour manager vos sites en continue (démarrage, arrêt, redémarrage, etc.).
  3. Faire tourner en plus de vos sites un reverse-proxy pour que toutes vos applications tournent sur le port 80.

Quelques commandes forever

Pour manager un nouveau site en continue il faut utiliser la commande :

$ forever start </path/to/>node-atlas/ --path </path/to/your/website/directory/>

Pour le stopper, il faut repérer son uid avec la commande forever list

$ forever list

puis utiliser la commande :

$ forever stop <uid>

ou <uid> est l'uid du site qui tourne.

webconfig exemple

Un webconfig exemple pour une production :

{
    "urlPort": 80,
    "httpPort": 7777,
    "httpHostname": "www.example.fr",
    "routes": {
        ...
    }
}

Il vous faudra ensuite utiliser un reverse-proxy pour rendre votre site accessible sur le port 80.

Dans un environnement Unix avec Nginx

Voici un exemple de configuration pour Nginx :

## Server an.example.fr

upstream websocket {
    server Ip_backend:7777;
}

server {

    listen   80;
    server_name an.example.fr;

        keepalive_timeout    60;

    access_log on;

        access_log /var/log/nginx/access.log logstash;
    error_log /var/log/nginx/error-an.example.fr.log;

    location /socket.io/ {
            proxy_pass http://websocket;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    }

    location / {
        proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;

            proxy_pass http://websocket;
        proxy_read_timeout 300;
        proxy_connect_timeout 300;
        proxy_redirect off;

    }

    error_page 400 401 402 403 405 406 407 408 409 410 411 412 413 414 415 416 417 500 501 502 503 504 505 506 507 /error.html;

    location = /error.html {
            root /var/www/nginx-default;
    }
}

Ip_backend doit être remplacé par l'IP de votre sous-réseaux privé. Cela peut être 127.0.0.1 si la node tourne sur le même serveur que Nginx.

websocket peut être remplacé par n'importe quel mot, il faudra alors aussi modifier le proxy_pass. Il doit être unique à chaque node.

Proxy

Bouncy

Bouncy est un exemple de reverse-proxy que vous pouvez utiliser pour faire tourner divers sites NodeAtlas (avec d'autres types de site) ensemble sur le même port (le 80).

Vous pouvez par exemple :

  • lancer 3 applications Node.js sur les ports 7777, 7778 et 7779 avec forever,
  • et en plus lancer un server apache sur le port 81

et rendre tous vos sites accessibles derrière des noms de domaines sur le port 80 avec Bouncy par exemple.

Voici un exemple de configuration avec Bouncy :

global-server.js

var bouncy = require('bouncy');

var server = bouncy(function (request, response, bounce) {
    if (request.headers.host === 'beep.example.com') {
        bounce(7777);
    }
    else if (request.headers.host === 'blup.example.com') {
        bounce(7776);
    }
    else if (request.headers.host === 'boop.example.com') {
        bounce(81);
    }
    else {
        response.statusCode = 404;
        response.end('no such host');
    }
});

server.listen(80);

que vous pouvez lancer avec :

$ forever start </path/to/>global-server.js

Plus d'informations sur Bouncy