Desplegando nuestro API REST Node/IO.js en la nube con Digital Ocean

1 de julio de 20155 min lectura·nodejsgittutorialweb
Aprende a desplegar tu API REST con Node.js e IO.js en DigitalOcean. Configuración del servidor en producción paso a paso con Git y ECMAScript 6.

Despues de haber creado nuestra API RESTful en Node/IO.js, nos gustaría tenerla desplegada en un servidor para que pueda ser accesible desde cualquier cliente.

En éste artículo veremos como desplegarla en producción, con Git y DigitalOcean como infraestructura.

El código fuente utilizado lo tienes en el siguiente respositorio de GitHub, úsalo :)

  1. Registro en DigitalOcean
  2. Instalación del Entorno
  3. Descarga del proyecto desde GitHub
  4. Corriendo el servidor

Registro en DigitalOcean

Vamos a utilizar Digital Ocean como IaaS (Infrastructure as a Service) por su facilidad de uso y configuración. Además si te registras con este link, consigues 10$ gratis, lo que suponen 2 meses de uso continuado de la instancia más pequeña.

Despues de registrarnos, creamos un Droplet. Pantalla de creación de un Droplet en el panel de control de DigitalOcean

Si tienes problemas a la hora de configurar DigitalOcean, puedes seguir éste post que escribí hace un tiempo.

Le ponemos un nombre, por ejemplo iojs-api y elegimos el tamaño más pequeño (5$ al mes) que para este ejemplo nos sirve más que de sobra.

Captura del panel de Digital Ocean seleccionando el plan de 5$ para crear un Droplet

vamos a elegir Ubuntu 14.04 como distribución del sistema y en la región por defecto que es Nueva York:

Selección de Ubuntu 14.04 como sistema operativo y región Nueva York en DigitalOcean

No se te olvide crear una clave SSH para poder acceder al servidor desde la terminal sin tener que usar una contraseña. Así es más seguro y más cómodo. Aquí y aquí puedes ver como generar una clave RSA para SSH.

Captura de pantalla del proceso de generación de claves SSH RSA en terminal


Instalación del entorno

Una vez esté creado el droplet podemos acceder desde la terminal vía SSH, donde 45.55.66.47 es la IP de nuestro servidor Terminal SSH conectada a un droplet de Digital Ocean mostrando la IP del servidor

shell
$ ssh [email protected]

Una vez dentro podemos actualizar los paquetes del sistema operativo e instalar nuestro entorno. En este post explico como se instala node, pero IO.js sería de manera similar eligiendo la versión iojs-v.2.3.1 ya que nuestro API lo hemos programado bajo ese entorno en local.

shell
root@iojs-api:~# nvm install iojs-v2.3.1

También instalamos MongoDB, que será nuestra base de datos para almacenar los registros. En este enlace puedes ver como instalar MongoDB en Ubuntu

Por último no nos olvidemos de instalar git ya que es nuestro sistema de actualización del proyecto. Descargaremos el repositorio desde GitHub a DigitalOcean.


Descarga del proyecto desde GitHub

Con el entorno instalado (Node/IO, MongoDB y Git) ya podemos instalar las dependencias de nuestro proyecto. Necesitaremos babel para traducir el código ES6 que IO.js todavía no entiende. Lo instalamos de forma global

shell
root@iojs-api:~# npm install -g babel

También vamos a instalar PM2. Es un gestor de procesos que nos sirve para correr Node de una forma muy robusta frente a errores y actualizaciones.

shell
root@iojs-api:~# npm install -g pm2

Por útimo creamos una clave privada en el servidor para poder comunicarnos con el repositorio de GitHub y poder hacer así el despliegue.

shell
root@iojs-api:~# cd .ssh
root@iojs-api:~# ssh-keygen -t rsa
root@iojs-api:~# cat id_rsa.pub
ssh-rsa AAAAB3N[...]lGEr root@iojs-api

la copiamos en GitHub, en las preferencias del repositorio. Ya entonces podremos hacer pulls e incluso cambios al repositorio. La imagen no está disponible (404), pero por el contexto —root@iojs-api, SSH key copiada a las pre

Clonamos el proyecto. En mi caso lo tengo en la url: [email protected]:carlosazaustre/iojs-api-example.git Y posteriormente hacemos npm install para instalar las dependencias definidas en el package.json del proyecto

shell
root@iojs-api:~# git clone [email protected]:carlosazaustre/iojs-api-example.git
root@iojs-api:~# cd iojs-api-example
root@iojs-api:~# npm install

Corriendo el servidor

Ya solo tenemos que correr el API en el servidor con PM2, para que una vez salgamos de la terminal, el proceso siga funcionando. El comando sería el siguiente:

shell
root@iojs-api:~# cd iojs-api-example
root@iojs-api:~# pm2 start index.js -i 0 ---next-gen-js --interpreter iojs --watch

con start index.js iniciamos el API, y con --next-gen-js --interpreter iojs le indicamos que tienes que hacer una transformación de ECMAScript 6 a 5 o a lo que entienda IO.js. --watch nos sirve para que esté atento a si se producen cambios para que se reinicie. Y por último -i 0 le indicamos que se inicie en modo cluster.

Si ahora vamos a un navegador a la URL http://45.55.66.47:3000/employees o a la IP que te haya asignado Digital Ocean, podemos ver el siguiente resultado.

Respuesta JSON del endpoint /employees en el navegador con IP de Digital Ocean

Si hacemos pruebas, como un POST con un objeto empleado y luego de nuevo un GET tendríamos un resultado como el siguiente:

Resultado de pruebas POST y GET en la API REST desplegada en Digital Ocean

Y con un GET específico Respuesta de petición GET específica a la API REST en Digital Ocean

Ya tenemos nuestro API disponible, si queremos camuflar el puerto y la IP de nuestro servidor, podemos utilizar un dominio propio o un subdominio (por ejemplo: api.midominio.com) y seguir este post de cómo configurar un proxy inverso con Nginx.

Recuerda que en éste enlace de GitHub tienes el repositorio del proyecto para hacer pruebas y mejorarlo si quieres :)

← Todos los artículos
Compartir en XCompartir en LinkedIn
También te puede interesar

Artículos relacionados

nodejsweb

Cómo lanzar una aplicación web en Google Cloud Run con Cloud Build

jul 20198 min
nodejsjavascript

Cómo crear un API REST usando Node.js, Express y MongoDB

sept 201713 min
nodejsjavascript

WebSockets: Cómo utilizar Socket.io en tus aplicaciones web

sept 20158 min
Newsletter · AprendiendoDEV

Aprende más cada semana.

Noticias de JavaScript, arquitectura de software e IA, directas a tu bandeja de entrada. Sin spam, puedes darte de baja cuando quieras.

Powered by Substack · Sin spam · Baja cuando quieras