Per defecte HestiaCP no inclou suport per publicar aplicacions desenvolupades amb NodeJS, però amb uns senzills passos tindràs el teu servidor llest. A continuació, et mostrem detalladament els passos a seguir per publicar amb HestiaCP una aplicació sota app.sock o escoltant pel port 3000.
Instal·lació de NodeJS
Per defecte, la imatge preinstal·lada de HestiaCP no té NodeJS instal·lat, així que hauràs d’instal·lar "npm" (que també instal·la NodeJS com a dependència).
Per fer-ho, executa la següent comanda:
# apt update && apt install npm -y
A continuació instal·la "pm2" per gestionar l’arrencada de les aplicacions:
# npm install pm2 -g
Creació de plantilles per a Nginx utilitzant el port 3000
En aquesta secció explicarem com publicar aplicacions NodeJS utilitzant Nginx com a proxy per redirigir les peticions que arribin al port 80 al port 3000 de NodeJS.
En primer lloc crea els següents fitxers i estableix els permisos adequats:
# 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
Afegeix el següent codi al fitxer 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"
Afegeix el següent codi al fitxer 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*;
}Afegeix el següent codi al fitxer 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ó de plantilles per a Nginx utilitzant el socket app.sock
En aquesta secció explicarem com configurar una plantilla en el cas que la teva aplicació NodeJS necessiti escoltar per un socket unix. En aquest cas redirigiràs les peticions que arribin al port 80 a NodeJS utilitzant el socket creat a app.sock.
Per això crea els següents fitxers i estableix els permisos adequats:
# 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
Afegeix el següent codi al fitxer nodejssock.sh:
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*;
}
Afegeix el següent codi al fitxer 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_*;
}
Utilitzar plantilles creades al panell d’HestiaCP
Connecta’t al panell d’Hestia accedint a la url https://nombre_host:8083 amb l’usuari "admin" i la contrasenya que veuràs al panell de client.
Dins del panell d’Hestia accedeix a "WEB" i fes clic damunt del domini on vulguis utilitzar la plantilla de NodeJS.
A l’apartat "Suport Proxy NGINX" fes clic al desplegable que per defecte mostra "default" i selecciona "nodejs3000" o "nodejssock" depenent dels requisits del teu projecte.
Important
L’exemple que es mostra a continuació està obsolet i no funciona correctament actualment. Estem treballant per mostrar un exemple més actualitzat.
Exemple d’inici d’un projecte NodeJS a HestiaCP
Per a l’exemple utilitzarem un projecte de mostra de "contentful.com" que podem trobar a github.
Al panell d’HestiaCP editem el nostre domini web i seleccionem la plantilla nodejs3000 i guardem la configuració. Automàticament establirà la configuració per a Nginx i crearà el directori "/home/admin/web/nom_domini/nodeapp"
Per posar en marxa el projecte de mostra executarem les següents comandes:
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/nom_domini/nodeapp
chown -R admin.admin /home/admin/web/nom_domini/nodeapp
find /home/admin/web/nom_domini/nodeapp -type f -exec chmod 644 {} ";"
find /home/admin/web/nom_domini/nodeapp -type d -exec chmod 755 {} ";"
cd /home/admin/web/nom_domini/nodeapp
npm install
npm run start:dev
Ara ja tenim l’aplicació funcionant pel port 3000 i si accedim al domini que hem configurat veurem el resultat següent:
Si tens dubtes sobre la configuració del teu servidor cloud o sobre qualsevol altra qüestió, escriu-nos a soporte@clouding.io. El nostre equip de Suport Tècnic estarà encantat d’ajudar-te en el que necessitis.