Por defecto HestiaCP no incluye soporte para publicar aplicaciones desarrolladas bajo NodeJS, pero con unos sencillos pasos tendrás listo tu servidor. A continuación, te mostramos detalladamente los pasos a seguir para publicar con HestiaCP una aplicación bajo app.sock o escuchando por el puerto 3000.
Instalación de NodeJS
Por defecto la imagen preinstalada de HestiaCP no tiene NodeJS instalado con lo que tendrás que instalar "npm" (que también instala NodeJS como dependencia).
Para ello ejecuta el siguiente comando:
# apt update && apt install npm -y
A continuación instala "pm2" para gestionar el arranque de las aplicaciones:
# npm install pm2 -g
Creación de plantillas para Nginx usando el puerto 3000
En esta sección explicaremos cómo publicar aplicaciones NodeJS utilizando Nginx cómo proxy para redireccionar las peticiones que lleguen al puerto 80 al puerto 3000 de NodeJS.
En primer lugar crea los siguientes ficheros y establece los permisos adecuados:
# touch /usr/local/hestia/data/templates/web/nginx/nodejs3000.sh # touch /usr/local/hestia/data/templates/web/nginx/nodejs3000.tpl # touch /usr/local/hestia/data/templates/web/nginx/nodejs3000.stpl # chmod 755 /usr/local/hestia/data/templates/web/nginx/nodejs3000.sh
Añade el siguiente código en el fichero nodejs3000.sh:
#!/bin/bash
user=$1
domain=$2
ip=$3
home=$4
docroot=$5
mkdir "$home/$user/web/$domain/nodeapp"
chown -R $user:$user "$home/$user/web/$domain/nodeapp"
rm "$home/$user/web/$domain/nodeapp/app.sock"
runuser -l $user -c "pm2 start $home/$user/web/$domain/nodeapp/app.js"
sleep 5
chmod 777 "$home/$user/web/$domain/nodeapp/app.sock"
Añade el siguiente código en el fichero nodejs3000.tpl:
server {
listen %ip%:%proxy_port%;
server_name %domain_idn% %alias_idn%;
error_log /var/log/%web_system%/domains/%domain%.error.log error;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /error/ {
alias %home%/%user%/web/%domain%/document_errors/;
}
location @fallback {
proxy_pass http://127.0.0.1:3000:/$1;
}
location ~ /\.ht {return 404;}
location ~ /\.svn/ {return 404;}
location ~ /\.git/ {return 404;}
location ~ /\.hg/ {return 404;}
location ~ /\.bzr/ {return 404;}
include %home%/%user%/conf/web/nginx.%domain%.conf*;
}
Añade el siguiente código en el fichero nodejs3000.stpl:
server {
listen %ip%:%proxy_port%;
server_name %domain_idn% %alias_idn%;
return 301 https://%domain_idn%$request_uri;
}
server {
listen %ip%:%proxy_ssl_port% http2 ssl;
server_name %domain_idn% %alias_idn%;
ssl_certificate %ssl_pem%;
ssl_certificate_key %ssl_key%;
error_log /var/log/%web_system%/domains/%domain%.error.log error;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types image/svg+xml svg svgz text/plain application/x-javascript text/xml text/css;
gzip_vary on;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /error/ {
alias %home%/%user%/web/%domain%/document_errors/;
}
location @fallback {
proxy_pass https://127.0.0.1:3000:/$1;
}
location ~ /\.ht {return 404;}
location ~ /\.svn/ {return 404;}
location ~ /\.git/ {return 404;}
location ~ /\.hg/ {return 404;}
location ~ /\.bzr/ {return 404;}
include %home%/%user%/conf/web/%domain%/nginx.ssl.conf_*;
}
Creación de plantillas para Nginx usando el socket app.sock
En esta sección explicaremos cómo configurar una plantilla en el caso que tu aplicación NodeJS necesite escuchar por un socket unix. En este caso redireccionarás las peticiones que lleguen al puerto 80 a NodeJS utilizando el socket creado en app.sock.
Para ello crea los siguientes ficheros y establece los permisos adecuados:
# touch /usr/local/hestia/data/templates/web/nginx/nodejssock.sh
# touch /usr/local/hestia/data/templates/web/nginx/nodejssock.tpl
# touch /usr/local/hestia/data/templates/web/nginx/nodejssock.stpl
# chmod 755 /usr/local/hestia/data/templates/web/nginx/nodejssock.sh
Añade el siguiente código en el fichero nodejssock.sh:
#!/bin/bash
user=$1
domain=$2
ip=$3
home=$4
docroot=$5
mkdir "$home/$user/web/$domain/nodeapp"
chown -R $user:$user "$home/$user/web/$domain/nodeapp"
rm "$home/$user/web/$domain/nodeapp/app.sock"
runuser -l $user -c "pm2 start $home/$user/web/$domain/nodeapp/app.js"
sleep 5
chmod 777 "$home/$user/web/$domain/nodeapp/app.sock"
Añade el siguiente código en el fichero nodejssock.tpl:
server {
listen %ip%:%proxy_port%;
server_name %domain_idn% %alias_idn%;
error_log /var/log/%web_system%/domains/%domain%.error.log error;
location / {
proxy_pass http://unix:%home%/%user%/web/%domain%/nodeapp/app.sock:$request_uri;
location ~* ^.+\.(%proxy_extensions%)$ {
root %docroot%;
access_log /var/log/%web_system%/domains/%domain%.log combined;
access_log /var/log/%web_system%/domains/%domain%.bytes bytes;
expires max;
try_files $uri @fallback;
}
location /error/ {
alias %home%/%user%/web/%domain%/document_errors/;
}
location @fallback {
proxy_pass http://unix:%home%/%user%/web/%domain%/nodeapp/app.sock:/$1;
}
location ~ /\.ht {return 404;}
location ~ /\.svn/ {return 404;}
location ~ /\.git/ {return 404;}
location ~ /\.hg/ {return 404;}
location ~ /\.bzr/ {return 404;}
include %home%/%user%/conf/web/nginx.%domain%.conf*;
}
Añade el siguiente código en el fichero nodejssock.stpl:
server {
listen %ip%:%proxy_port%;
server_name %domain_idn% %alias_idn%;
return 301 https://%domain_idn%$request_uri;
}
server {
listen %ip%:%proxy_ssl_port% http2 ssl;
server_name %domain_idn% %alias_idn%;
ssl_certificate %ssl_pem%;
ssl_certificate_key %ssl_key%;
error_log /var/log/%web_system%/domains/%domain%.error.log error;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types image/svg+xml svg svgz text/plain application/x-javascript text/xml text/css;
gzip_vary on;
location / {proxy_pass http://unix:%home%/%user%/web/%domain%/nodeapp/app.sock:$request_uri;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-NginX-Proxy true;
location ~* ^.+\.(%proxy_extensions%)$ {root %sdocroot%;
access_log /var/log/%web_system%/domains/%domain%.log combined;
access_log /var/log/%web_system%/domains/%domain%.bytes bytes;
expires max;
try_files $uri @fallback;
add_header Pragma public;
add_header Cache-Control "public";
}
location /error/ {
alias %home%/%user%/web/%domain%/document_errors/;
}
location @fallback {
proxy_pass http://unix:%home%/%user%/web/%domain%/nodeapp/app.sock:/$1;
}
location ~ /\.ht {return 404;}
location ~ /\.svn/ {return 404;}
location ~ /\.git/ {return 404;}
location ~ /\.hg/ {return 404;}
location ~ /\.bzr/ {return 404;}
include %home%/%user%/conf/web/%domain%/nginx.ssl.conf_*;
}
Utilizar plantillas creadas en el panel de HestiaCP
Conéctate al panel de Hestia accediendo a la url https://nombre_host:8083 con el usuario "admin" y la contraseña que verás en el panel de cliente.
Dentro del panel de Hestia accede a "WEB" y haz clic encima del dominio que quieras utilizar la plantilla de NodeJS.
En el apartado "Soporte Proxy NGINX" haz clic en el desplegable que por defecto muestra "default" y selecciona "nodejs3000" o "nodejssock" dependiendo de los requisitos de tu proyecto.
Importante
El ejemplo que se muestra a continuación está obsoleto y no funciona correctamente actualmente. Estamos trabajando para mostrar un ejemplo más actualizado.
Ejemplo iniciar proyecto NodeJS en HestiaCP
Para el ejemplo utilizaremos un proyecto de ejemplo de "contentful.com" que podemos encontrar en github.
En el panel de HestiaCP editamos nuestro dominio web y seleccionamos la plantilla nodejs3000 y guardamos la configuración. Automáticamente establecerá la configuración para Nginx y creará el directorio "/home/admin/web/nombre_dominio/nodeapp"
Para poner en marcha el proyecto de ejemplo ejecutaremos los siguientes comandos:
git clone https://github.com/contentful/the-example-app.nodejs.git /tmp/the-example-app.nodejs
mv -f /tmp/the-example-app.nodejs/* /home/admin/web/nombre_dominio/nodeapp
chown -R admin.admin /home/admin/web/nombre_dominio/nodeapp
find /home/admin/web/nombre_dominio/nodeapp -type f -exec chmod 644 {} ";"
find /home/admin/web/nombre_dominio/nodeapp -type d -exec chmod 755 {} ";"
cd /home/admin/web/nombre_dominio/nodeapp
npm install
npm run start:dev
Ahora ya tenemos la aplicación corriendo por el puerto 3000 y si accedemos al dominio que hemos configurado veremos el siguiente resultado:
Si tienes dudas sobre la configuración de tu servidor cloud o sobre cualquier otra cuestión, escríbenos a soporte@clouding.io Nuestro equipo de Soporte Técnico estará encantado de ayudarte en lo que necesites.