Hapi.js es un marco Node.js rico, robusto y poderoso diseñado para crear aplicaciones web en el ecosistema Node.js. Su diseño sencillo hace que sea fácil comenzar. Hapi utiliza muchas de las últimas funciones de JavaScript ES6 en su núcleo, como las promesas de ES6. Para aquellos de ustedes que han usado Express antes, Hapi les permite probar algo nuevo y experimentar las últimas funciones de JavaScript.
En este tutorial, nuestro objetivo será configurar una página web básica de Hapi.js, alojada desde nuestro Vultr VPS, en Ubuntu 16.04 LTS. Para aquellos que tienen un dominio para su sitio, utilizaremos un proxy inverso para vincular nuestro dominio a nuestro sitio web. Finalmente, aprenderemos cómo administrarlo con un administrador de procesos. Ahora que lo hemos eliminado, comencemos.
Instalando Node.js
Necesitaremos instalar Node.js. Para hacerlo en Ubuntu 16.04 LTS, siga estas instrucciones.
Agregar el repositorio
Tendremos que agregar el repositorio NodeSource APT, que contiene la última versión LTS de Node.js.
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
Estamos descargando un script que usaremos para agregar el repositorio a nuestra lista de fuentes, así como para instalar Node.js desde el repositorio NodeSource.
Instalar herramientas de compilación
Además de instalar Node.js en sí, también tendremos que instalar algunas herramientas de compilación necesarias, que ayudarán a compilar cualquier módulo que necesitemos instalar.
sudo apt-get install -y build-essential
Esto simplemente descarga e instala las herramientas de compilación del repositorio.
Configurar el directorio de la aplicación
Es una buena práctica designar una carpeta que usaremos para nuestra aplicación, que contendrá todos los datos de nuestra aplicación, como archivos de configuración y scripts de inicio. Crea una carpeta y nómbrala como quieras. Por el bien de este tutorial, supondré que lo nombraste site
.
mkdir site
Una vez que haya creado la carpeta, ahora podemos cambiarla. Asegurándose de estar en el directorio que acaba de crear, inicie el asistente de paquetes NPM.
npm init
Le pedirá que ingrese algunas cosas diferentes, como el nombre de su aplicación, el archivo de inicio, la licencia, etc. Puede dejar la mayoría de los campos predeterminados, excepto los campos más obvios, como el nombre de su aplicación. Al final, se verá así:
{
"name": "site",
"version": "1.0.0",
"description": "Hapi.js site",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "rich",
"license": "MIT"
}
Una vez que esté satisfecho con el resultado, haga clic ENTERpara guardar el archivo.
Instalar Hapi.js
Ahora que su directorio se ha construido correctamente, ahora podemos proceder a instalar Hapi.js. Como se mencionó anteriormente, utilizaremos NPM para descargar Hapi.js, así como sus dependencias, para nuestro proyecto. En el directorio del proyecto, ejecute lo siguiente.
npm install hapi.js
Esto descarga Hapi.js de NPM y lo instala en nuestro directorio de proyectos. En la misma ejecución, cualquier dependencia en la que Hapi.js pueda confiar también se descarga para nuestra conveniencia.
Configurar nuestra aplicación de muestra
Ahora es el momento de configurar nuestro archivo de aplicación base Hapi.js. Esto contendrá todo nuestro código para la aplicación. Más adelante, podemos ampliar nuestro código de aplicación y agregarle más cosas, como mejor nos parezca.
A continuación, crearemos nuestro archivo de inicio. Consulte la main
sección de su package.json
archivo para determinar exactamente cómo nombrar el archivo. Como utilicé el esquema de nomenclatura predeterminado, se llamará a nuestro archivo index.js
.
nano index.js
Una vez que esté dentro del editor de nano texto, cree su código de aplicación base, así.
const Hapi=require('hapi');
const server=Hapi.server({
host:'localhost',
port: 3000
});
server.route({
method:'GET',
path:'/',
handler:((request,h)) => {
return 'Sample Hapi.js Application';
}
});
async function start() {
try {
await server.start();
} catch (err) {
console.log(err);
process.exit(1);
}
console.log(`Our server is running! ${server.info.uri}`);
};
start();
Primero, importamos el módulo Hapi. Luego, inicializamos nuestro constructor de servidor, que contiene el host en el que queremos ejecutar el servidor, así como el puerto, que es 3000
para este tutorial. A continuación, configuramos un enrutador básico, que indica que cada vez que alguien visita el sitio, recibirá un simple mensaje. Para colmo, tenemos una función asíncrona, para iniciar nuestro servidor, que registrará en la consola que nuestro servidor está ejecutando. Cuando haya terminado, guarde y cierre el archivo ( CTRL+ X)
Ahora que nuestro archivo principal está configurado, estamos listos para iniciar nuestra aplicación.
node index.js
Si ve " Our server is running!
" en la consola, el servidor se inició correctamente.
Instalar Nginx
Dado que Nginx está disponible en los repositorios predeterminados de Ubuntu, la instalación es sencilla. Simplemente actualice sus listas de paquetes e instálelo.
sudo apt update
sudo apt install nginx -y
Después de actualizar las listas de paquetes, se instalarán Nginx y sus dependencias.
Para que Nginx invierta el proxy de nuestra aplicación, necesitaremos crear un archivo de configuración. Este archivo de configuración contendrá información sobre nuestra aplicación, que Nginx usará para el proxy inverso.
Elimine la configuración predeterminada que creó Nginx, ya que la reemplazaremos por la nuestra más adelante.
sudo rm /etc/nginx/sites-enabled/default
Crea un nuevo archivo en la sites-available
carpeta. En cuanto a los nombres, podemos seguir simplemente site
, por simplicidad.
sudo nano /etc/nginx/sites-available/site
En el archivo, pegue lo siguiente y guárdelo.
server {
listen 80;
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://127.0.0.1:3000/;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade
$http_upgrade;
proxy_set_header Connection
"upgrade";
proxy_redirect off;
proxy_set_header
X-Forwarded-Proto $scheme;
}
}
En este archivo, le estamos diciendo a Nginx que escuche en el puerto 80
. También estamos configurando el paso de proxy a la localhost
dirección y al puerto 3000
, que es el mismo puerto que nuestra aplicación Hapi.
Ahora puede volver a su directorio de aplicaciones e iniciar el sitio. Una vez que el sitio ha comenzado, simplemente navegue hasta http://yourdomain.com
o http://yourip
, y verá el texto " Hello World
".
Instalar PM2
PM2 se puede encontrar en el repositorio de NPM, y puede instalarlo globalmente para que sea accesible desde cualquier lugar, así.
sudo npm install pm2 -g
La -g
bandera al final indica que queremos instalar el módulo en la carpeta global de módulos, lo que nos permitirá usarlo fuera de nuestro directorio de proyectos. Esto se utiliza para que nuestro proyecto se comporte como una aplicación normal del sistema.
Iniciando nuestra aplicación con PM2
Una vez que haya instalado PM2, vuelva al directorio de su proyecto. La sintaxis para iniciar nuestra aplicación será ligeramente diferente ahora. Así es como lo haremos con PM2.
pm2 start index.js --name site
Utilizamos la función de inicio PM2, que básicamente crea un perfil para nuestra aplicación, bajo el nombre site
. Después de ejecutar ese comando, su sitio web se iniciará, pero notará que los registros no se mostrarán. Eso es porque la forma en que vemos los registros ahora es diferente.
pm2 logs site
Incluso puede especificar cuántas líneas de registros desea ver, con el --lines
argumento.
Conclusión
Ha configurado con éxito un servidor web Hapi.js, lo ha proxy inverso con Nginx y ha aprendido cómo administrarlo mejor con PM2. Con este conocimiento, puede ampliar aún más este tutorial y crear una aplicación Hapi.js muy avanzada. Para obtener más información sobre las posibilidades de Hapi, visite su documentación oficial . Si desea obtener más información sobre las posibilidades de PM2, consulte su guía de inicio rápido .