Le Framework JavaScript Serveur Évolutif
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.
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.
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 !
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'environnementNODE_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 2013 avec IIS8 il faut :
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
Un webconfig exemple pour une production :
{
"urlPort": 80,
"httpPort": 7777,
"httpHostname": "www.example.fr",
"routes": {
...
}
}
Il faut pour cela :
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.
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.
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.
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 :
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