Depuis les débuts d’alwaysdata — il y a plus de 10 ans ! — trois langages majeurs peuvent être utilisés pour faire tourner des applications web : PHP, Python et Ruby. Si PHP est un poids lourd depuis longtemps, Python et Ruby étaient alors les petits nouveaux du monde du web, et nous étions parmi les tout premiers hébergeurs à faire tourner des applications écrites dans ces langages.
Aujourd’hui, PHP est toujours un poids lourd, Python et Ruby ont mûri, et les petits nouveaux se sont multipliés : Node.js, Go, Lua, Elixir, Haskell, Clojure, etc. Bien que les interpréteurs et compilateurs étaient déjà installés sur nos serveurs et utilisables, par exemple, en SSH, il n’était pas possible de faire tourner des applications web développées avec ces langages… jusqu’à maintenant !
Un nouveau type de site fait son apparition : Programme utilisateur. Lorsque vous créez un site avec ce type, vous devez indiquer une commande qui sera exécutée et qui fait tourner un serveur HTTP. Ce programme peut être écrit dans le langage de votre choix, interprété ou compilé : si la commande démarre correctement (vous pouvez tester en SSH), votre application sera joignable.
Un exemple avec Node.js
Prenons un exemple avec un Hello World implémenté en Node.js. Créons un fichier ~/www/hello.js contenant :
1 2 3 4 5 6 7 8 | var http = require('http'); var server = http.createServer(function (request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.end("Hello World\n"); }); server.listen(8100, '127.3.151.58'); |
Le programme va écouter sur l’IP 127.1.251.59 et le port 8100 : ce ne sont pas des valeurs prises au hasard, vous devrez utiliser celles qui sont indiquées lorsque vous créez votre site, dans l’administration alwaysdata. Indiquons ensuite dans le formulaire de création du site la commande suivante :
C’est tout : notre site en Node.js est bien joignable et affiche un élégant Hello World.
Planning découverte
Vous trépignez de tester une application écrite dans votre langage favori ? Allez‑y, et n’hésitez pas à contacter notre support si vous avez besoin d’aide (ou à laisser un commentaire sur cet article pour exprimer votre joie). Si vous manquez d’inspiration, nous allons démarrer sur ce blog une série d’articles d’initiation pour héberger ses applications dans divers langages.
Premier concerné : Node.js, avec même une surprise (les développeurs de Node.js nous sollicitent depuis tant de temps qu’ils l’ont bien méritée)…
Merci Alwaysdata ! Socket.io sera bien utilisable sur vos serveurs ?
Ps : pour la démo Nodejs, je serais d’avis pour une minie app avec MeteorJs ! (comment là déployer chez Alwaysdata)
A priori Socket.io est bien utilisable, puisque c’est du Node.js.
Suggestion pour la page https://admin.alwaysdata.com/site/add/ avec « Commande utilisateur » :
Vous annoncez dans le help text « cette commande doit démarrer un serveur HTTP écoutant sur 127.0.X.Y:Z. »
Tant qu’à faire, serait-il possible d’exposer l’hôte et le port sous forme soit de variable d’environnement, soit de placeholders type %h et %p (voire les deux) ? Ainsi, pas besoin d’hard-coder cette valeur dans la ligne de commande (ou dans l’application).
Par ailleurs, serait-il envisageable d’écouter sur un UNIX domain socket plutôt qu’un port ?
Zopieux : c’est une excellente suggestion, nous venons de l’implémenter. Les variables d’environnement ALWAYSDATA_HTTPD_IP et ALWAYSDATA_HTTPD_PORT contiennent donc l’IP et le port à utiliser. Comme ces variables d’environnement sont accessibles directement depuis la commande, vous pourrez faire :
node ~/www/hello.js $ALWAYSDATA_HTTPD_IP $ALWAYSDATA_HTTPD_PORT
Concernant le socket UNIX, ce n’est pas supporté à l’heure actuelle (parce qu’Apache ne le gère pas, or jusqu’à peu on ne gérait qu’Apache). Y verriez-vous un intérêt ?
@Cyril : pas spécialement d’intérêt personnellement, mais cela a l’avantage (tout relatif) de ne pas avoir à se baser sur une ressource « réservable » comme un port TCP. Mais clairement les applications concernées supporteront toujours mieux host:port que UNIX domain, donc faut pas se prendre la tête.