Node.js

Simple Hosting Node.js hace fácil y asequible alojar aplicaciones escalables de Node.js.

Prerrequisitos

  • Node.js y NPM instalados en su computadora,
  • Su aplicación debe usar NPM para manejar sus dependencias.

Soporte de versiones

Node.js 6 LTS está actualmente preinstalado y soportado oficialmente en las instancias de Node.js. También puede utilizar cualquier versión de Node.js y NPM distribuida por el gestor de versiones de nodos (Node Version Manager - NVM).

Por favor, consulte la sección Gestor de Versiones de Nodos a continuación para saber cómo funciona.

Funcionamiento general

Su aplicación Node.js debe estar compuesta de al menos un archivo llamado server.js, pero la configuración recomendada es usar un archivo package.json donde especifique las dependencias y el punto de entrada de su aplicación.

Este archivo de punto de entrada será ejecutado por el intérprete Node.js cuando se inicie la instancia, o después de una implementación con git+SSH.

Para recibir peticiones HTTP y HTTPS, su aplicación debe escuchar en un puerto especificado por la variable de entorno PORT, disponible en Node.js con process.env.PORT.

Un nombre de dominio se pone a su disposición en el momento de la creación de la instancia, con fines de prueba. Además, puede enlazar muchos dominios y subdominios a su aplicación Node.js.

Arrancando su instancia (Boot)

La plataforma de Simple Hosting intenta arrancar su aplicación usando la siguiente secuencia:

  1. Usando un «script de inicio» especificado en package.json.
  2. Usando el punto de entrada por defecto definido en el campo principal main en package.json.
  3. Usar un archivo server.js, si existe en la raíz de la aplicación

Por favor, consulte a continuación para obtener más información sobre cada una de estas opciones.

Usando package.json (recomendado)

La forma estándar de arrancar una aplicación Node.js es usar la configuración del fichero package.json de npm. Simple Hosting no soportaba esta característica antes, pero ahora es la forma recomendada de arrancar su aplicación.

El archivo package.json necesita ser colocado en la raíz de su proyecto. Debe contener una propiedad package.json["main"] que defina el punto de entrada de la aplicación (el archivo a ejecutar al arrancar), o un comando de arranque específico definido en package.json[“scripts”][“start”].

La mayoría de las aplicaciones preempaquetadas de Node.js, como Ghost, ya utilizarán esta convención, haciendo más fácil su instalación.

Definición de un punto de entrada

Puede definir un punto de entrada utilizando el campo principal main. Simplemente introduzca el nombre del archivo desde el que desea arrancar, y Simple Hosting usará node para ejecutarlo.

Por ejemplo, para arrancar desde el archivo index.js:

package.json

{
  "name" : "foo",
  "version" : "1.2.3",
  "description" : "Un foo empaquetado, para ejemplo",
  "main" : "index.js",
}

Ejecutando un comando personalizado

También puede definir el comando completo a ejecutar configurando el campo ['scripts']['start']. Simple Hosting simplemente ejecutará este comando para arrancar la aplicación.

El siguiente ejemplo es el equivalente al uso de la técnica del «punto de entrada» descrita anteriormente.

package.json

{
  "name" : "foo",
  "version" : "1.2.3",
  "description" : "Un foo empaquetado, para ejemplo",
  "scripts": {
    "start": "node index.js"
  }
}

El script de inicio es muy flexible y proporciona una variedad de funciones para personalizar la forma en que se ejecuta la aplicación. Por ejemplo, puede soportar ES6 ejecutándose en modo armonía (harmony).

package.json

{
  "name" : "foo-ecma-script",
  "version" : "6",
  "description" : "ES6 en Simple Hosting",
  "engines": {
    "node": "6"
  },
  "scripts": {
    "start": "node --harmony index.js"
  }
}

Combinado con variables de entorno, puede utilizar esta característica para lanzar su aplicación con un gestor de procesos como pm2 y controlar manualmente el ciclo de vida de su proceso. O incluso probar algunas cosas más interesantes con hilos (threads) y libuv.

Usando server.js

La forma más sencilla de iniciar una aplicación Node.js para Simple Hosting es crear un archivo llamado server.js en la raíz de su proyecto. En ausencia de cualquiera de las configuraciones especificadas en la sección anterior, la instancia intentará arrancar su aplicación ejecutando este archivo.

Variables de entorno

Su aplicación puede contar con las variables de entorno para varias opciones de configuración, establecidas por la plataforma o por usted mismo en el momento del lanzamiento.

A continuación se muestran algunos ejemplos de variables de entorno establecidas por la plataforma antes de que se inicie la aplicación:

PORT=8080
NODE_ENV=production
WEB_MEMORY=128
WEB_CONCURRENCY=2

Nota

Los valores WEB_MEMORY y WEB_CONCURRENCY dependen del tipo de instancia (S, M, L, XL, XXL). La primera siempre se fija en el máximo para su tipo de instancia. Y la segunda es nuestra recomendación basada en el tamaño de la instancia, pero puede adaptarla a sus necesidades.

Accediendo a las variables del entorno

Puede extraer variables de entorno de su aplicación de forma normal, accediendo a process.env. Por ejemplo:

var port = process.env.PORT;
console.log(process.env.PORT);
// => 8080

Configuración de variables de entorno

Puede establecer o anular variables de entorno desde dentro de su aplicación o en el momento del arranque utilizando el script de inicio.

Desde dentro de la aplicación, puede simplemente establecer el valor de una variable de entorno con process.env. Por ejemplo:

process.env.NODE_ENV = "staging";
console.log(process.env.NODE_ENV); // => "staging"

En el momento del arranque, utilice package.json['scripts']['start'] para establecer una o más variables de entorno en estilo shell. Por ejemplo:

package.json

{
...
  "scripts": {
    "start": "NODE_ENV=staging node index"
  }
}

Asegúrese de que no esté anulando la variable de entorno PORT, ya que es posible que no pueda acceder a su aplicación después. En general, asegúrese de que no esté anulando ninguna configuración importante antes de iniciar su aplicación con un comando personalizado.

Gestión de dependencias

La plataforma Node.js Simple Hosting se encarga de instalar sus dependencias e iniciar su aplicación durante el proceso de implementación de git+SSH. Simplemente especifique las dependencias en el archivo package.json en la raíz de su proyecto:

package.json

{
  "name": "website",
  "version": "0.0.1",
  "dependencies": {
    "express": "3.x"
  }
}

Selección de la versión de Node.js

Puede utilizar cualquier versión de Node.js y npm distribuida por el gestor de versiones de nodos (nvm).

Simplemente especifique las versiones que desea utilizar en el archivo package.json de su proyecto. Por ejemplo:

package.json

{
  "engines": {
    "node": "6",
    "npm": "*"
  }
}

El ejemplo anterior forzará el uso de Node.js 6.x. Para más información sobre el campo engines puede ver https://docs.npmjs.com/files/package.json#engines.

Visite el sitio web oficial de Node.js para obtener más información sobre las versiones actuales.

Websockets

Websockets no está actualmente soportado en la plataforma de Simple Hosting. Si desea ver esta función en Simple Hosting, no dude mostrarnos su apoyo enviándonos un mensaje a feedback@gandi.net.

Logs (Registros)

La salida estándar y los errores de su sitio web se envían a un archivo de registro en su disco, al que puede acceder para depurar su aplicación.

  • a través de la consola SSH: /srv/data/var/log/www/nodejs.log
  • a través de SFTP: /lamp0/var/log/www/nodejs.log.

Este archivo de registro también contiene la salida del programa NPM que está a cargo de las dependencias de su aplicación.

Además, puede ver el historial de las acciones realizadas por el programa encargado de lanzar su aplicación:

  • a través de la consola SSH: /srv/data/var/log/www/nodejs-watchd.log
  • a través de SFTP: /lamp0/var/log/www/nodejs-watchd.log.

También puede ver si su aplicación Node.js ha arrancado correctamente en este archivo.

Base de datos

MySQL

MySQL 5.7 (Percona) está disponible para usar con instancias de Node.js con Simple Hosting.

Puede conectarse al servicio de base de datos MySQL a través de su socket Unix, disponible en /srv/run/mysqld/mysqld.sock. El usuario por defecto es root y no se requiere ninguna contraseña por defecto. Sin embargo, debe crear credenciales seguras para su uso real. También puede utilizar la base de datos default_db para realizar configuraciones rápidas y pruebas, ya que se configura automáticamente cuando se crea la instancia.

Puede crear tantas bases de datos y usuarios de bases de datos como necesite; sólo estará limitado por el espacio de su disco, que puede aumentar en cualquier momento hasta 1 TB.

Puede administrar su base de datos MySQL con las herramientas estándar de shell (mysql, mysqldump, etc.) a través de la consola SSH, o desde la consola de administración web con PHPMyAdmin. Consulte el artículo de referencia sobre la administración de MySQL en Simple Hosting para obtener más información.

A continuación se muestra un ejemplo de código minimalista de Node.js para probar la conexión de la base de datos en Simple Hosting:

index.js

var http = require('http'),
    mysql = require('mysql');

var mysql_conn = mysql.createConnection({
  socketPath: '/srv/run/mysqld/mysqld.sock',
  database: 'default_db',
  user: 'root',
  password: ''
});

var test_mysql_conn = function(callback) {
  mysql_conn.connect(function(err) {
    if (err) {
      console.log(err.code);
      if (callback) callback("NOT WORKING");
    } else {
      console.log('connected...');
      if (callback) callback("OK");
    }
  });
  mysql_conn.end();
};

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hello Node.js!\n');
  test_mysql_conn(function(mysql_status) {
    res.write('MySQL connection: ' + mysql_status + '\n');
    res.end();
  });
}).listen(process.env.PORT);

package.json

{
  "name": "sample-nodejs-mysql-app",
  "version": "1.0.0",
  "description": "Ejemplo Node.js MySQL app para Simple Hosting",
  "main": "index.js",
  "engines": {
    "node": "4"
  },
  "dependencies": {
    "mysql": "*"
  }
}

PostgreSQL

La versión 9.6 de PostgreSQL está disponible en Simple Hosting con Node.js.

El servicio PostgreSQL de su instancia será accesible en localhost en el puerto 5432.

Por defecto, puede usar el usuario hosting-db sin contraseña para conectarte a la base de datos por defecto, llamada postgres. Le recomendamos que cree credenciales seguras para su uso real.

Puedes crear tantos usuarios y bases de datos como necesite; sólo está limitado por su espacio en el disco, el que se puede aumentar en cualquier momento hasta 1 TB.

Puede administrar su base de datos PostgreSQL con los comandos estándar de shell a través de la consola SSH (psql, pg_dump, etc.), o desde el panel de administración Web con phpPgAdmin. Consulte el artículo de referencia sobre la administración de PostgreSQL en Simple Hosting para obtener más información.

Abajo hay un ejemplo de código minimalista de Node.js para probar la conexión de la base de datos en Simple Hosting:

index.js

var http = require('http'),
    pg = require('pg');

var pg_url = "tcp://hosting-db@localhost/postgres";
var pg_conn = new pg.Client(pg_url);

var test_pg_conn = function(callback) {
  pg_conn.connect(function(err) {
    if (err) {
      console.log(err);
      if (callback) callback("NOT WORKING");
    } else {
      console.log('Connected to PostgreSQL');
      if (callback) callback("OK");
    }
  });
};

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hello Node.js!\n');
  test_pg_conn(function(pg_status) {
    res.write('PostgreSQL connection: ' + pg_status + '\n');
    res.end();
  });
}).listen(process.env.PORT);

package.json

{
  "name": "sample-nodejs-pgsql-app",
  "version": "1.0.0",
  "description": "Ejemplo Node.js PostgreSQL app para Simple Hosting",
  "main": "index.js",
  "engines": {
    "node": "4"
  },
  "dependencies": {
    "pg": "*"
  }
}

MongoDB

MongoDB 3.2 es la versión disponible actualmente para instancias de Node.js en Simple Hosting.

El servicio de base de datos MongoDB está disponible en localhost en el puerto 27017. No se requiere ningún usuario ni contraseña por defecto, pero debe crear credenciales seguras para su uso real.

Puede crear tantos usuarios y bases de datos como necesite; sólo está limitado por su espacio en el disco, el que puede aumentar en cualquier momento hasta 1 TB.

Puede administrar su base de datos MongoDB desde el shell mongo estándar a través de la consola SSH, o desde el panel de administración Web con Adminer. Consulte el artículo de referencia sobre la gestión de MongoDB en Simple Hosting para obtener más información.

Abajo se muestra un ejemplo de código minimalista de Node.js para probar la conexión de la base de datos en Simple Hosting:

index.js

var http = require ("http"),
    mongo = require("mongodb");

var mongo_url = "mongodb://localhost:27017/sample";
var mongo_conn = mongo.MongoClient;

var test_mongo_conn = function(callback) {
  mongo_conn.connect(mongo_url, function(err, db) {
    if (err) {
      console.log(err);
      if (callback) callback("NOT WORKING");
    } else {
      console.log("Conectado al servidor.");
      if (callback) callback("OK");
    }
    if (db) db.close();
  });
};

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hola Node.js!\n');
  test_mongo_conn(function(status) {
    res.write('MongoDB connection: ' + status + '\n');
    res.end();
  });
}).listen(process.env.PORT);

package.json

{
  "name": "sample-nodejs-mongodb-app",
  "version": "1.0.0",
  "description": "Ejemplo Node.js MongoDB app para Simple Hosting",
  "main": "index.js",
  "engines": {
    "node": "4"
  },
  "dependencies": {
    "mongodb": "*"
  }
}

Encontrará documentación detallada sobre cómo empezar a usar MongoDB con Node.js en el sitio web oficial: https://docs.mongodb.org/getting-started/node/