Pour un projet dont je ne tarderai plus à vous parler, j’ai eu à faire cohabiter Apache2 et Node.js sur un même machine déstinée à la production. Je voulais pouvoir accéder à mon application Node.js sur le port 80.

Le sujet est assez bien documenté et ne présente pas de difficultés particulières ; cet article sera surtout une mise en relation des différents tutos et autres posts que j’ai pu lire ici et là.

On suppose ici qu’Apache2 tourne déjà et qu’il est configuré pour utiliser les Virtual Hosts.

Installation de Node.js

Node.js n’a toujours pas fait son arrivée dans les dépots officiels Debian stable. On devra donc l’installer depuis les sources.

Node.js depuis les sources

Rien de bien complexe à cette étape. Ces quelques lignes suffiront à avoir un Node.js fonctionnel :

1
2
3
4
5
6
7
8
9
$ cd /tmp
$ wget http://nodejs.org/dist/node-latest.tar.gz
$ tar xzvf node-latest.tar.gz
$ cd node-latest
$ ./configure
$ make
$ su
# make install
# exit

Node.js en tant que service

Créons un utilisateur pour notre application :

1
# sudo adduser --system --shell /bin/bash --group --disabled-password --home /home/super-app super-app

Puis créez le fichier SuperApp.js sous le répertoire /home/super-app/ :

1
2
3
4
5
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Robotize My Stuff !\n');
}).listen(1337, '127.0.0.1');

Pour utiliser votre application en tant que service, un script init.d a été réalisé par un certain Peter Host. Servons-nous en :

1
2
$ cd /tmp
$ wget http://uploads.robotize-my-stuff.com/super-app.sh

On va maintenant éditez le script pour l’adapter à nos besoins :

1
$ nano super-app.sh

Les directives à modifier sont les suivantes :

1
2
DEAMON_ARGS="/home/super-app/SuperApp.js"
NODEUSER=super-app:super-app

Le fichier dans l’état fonctionnera. Libre à vous de le tweaker à votre sauce, mais avant ça on va le mettre au bon endroit et le lancer une première fois !

1
2
3
4
5
6
$ su
# mv super-app.sh /etc/init.d/super-app
# chmod 0755 /etc/init.d/super-app
# chown root:root /etc/init.d/super-app
# /etc/init.d/super-app start
# exit

Vous devriez pouvoir y accéder via http://IPDUSERVEUR:1337/.

Configuration de Apache2

On n’a plus qu’à éditer le bon Vhost et demander à Apache2 de fonctionner en tant que proxy pour ce host :

1
$ nano /etc/apache2/mondomaine

Puis collez-y ce qui suit :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<VirtualHost *:80>
ServerAdmin contact@mondomaine.fr
ServerName super-app.mondomaine.fr
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
ProxyPass http://127.0.0.1:1337/
ProxyPassReverse http://127.0.0.1:1337/
</Location>
ErrorLog /home/super-app/logs/error.log
LogLevel warn
CustomLog /home/super-app/logs/access.log combined
</VirtualHost>

On active le nouveau Vhost et on redémarre Apache2 :

1
2
3
4
$ su
# a2ensite super-app
# /etc/init.d/apache2 restart
# exit

Conclusion

Vous n’avez plus qu’à vous rendre à l’adresse http://super-app.mondomaine.fr/ et à admirer le résultat.

J’utilise cette solution depuis quelques semaines et je n’ai jusqu’alors rencontré aucun problème.

En espérant que ce petit tuto vous aura plu ; je vous dit à bientôt, et je me ferai un plaisir de lire vos remarques ou de répondre à vos questions dans les commentaires !