Com instal·lar NodeJS en un Cloud amb SWPanel
En aquest manual veurem com instal·lar NodeJS en un Cloud amb SWPanel. A més, aprendràs a crear un servei d'arranque per a que el servidor NodeJS es mantingui sempre actiu com un servei més del servidor i s'iniciï automàticament en cas de reiniciar el Cloud.
Primer, necessitaràs un servidor amb SWPanel com a panell de gestió; per a ello, pots seguir el manual: Manual: Com crear un Cloud amb SWPanel com a panell de gestió.
També, necessitaràs crear un servei de Hosting dins d'aquest servidor; d'aquesta manera, el teu servidor NodeJS respondrà a les peticions a través del domini. Pots seguir el manual Manual: Crear un Hosting Web al meu Cloud.
Totes les accions que durarem a terme seran a través de la consola del servidor mitjançant un usuari amb privilegis d'administrador, per això, necessitaràs connectar-te a través d'un client SSH Manual: Connectar-te al teu Cloud per consola mitjançant PuTTY o a través de la consola de SWPanel Manual: Com accedo al meu Cloud utilitzant la consola a través de SWPanel.
info Abans d'instal·lar cap paquet, et recomanem que realitzis una Snapshot del servidor; d'aquesta manera, si hi hagués alguna incompatibilitat entre NodeJS i alguna de les webs que ja tens al servidor, podries desfer les accions i tot tornaria a funcionar: Manual: Com crear i gestionar SnapShots del teu Servidor Cloud.
Instal·lació i configuració del servidor NodeJS
Primer de tot, actualitzarem el servidor a través del següent comand:
apt update -y && apt upgrade -y
A continuació, haurem d'instal·lar el paquet de nodejs:
apt install nodejs -y
Per al següent punt, necessitaràs conèixer el port per on escoltarà el teu servidor NodeJS, nosaltres utilitzarem el següent codi com a exemple. En el nostre cas, el fitxer es troba al directori /var/www/nodejs.swmanuales.com/datos/web/server.js.
Com pots comprovar, el servidor escolta pel port 3000:
#!/usr/bin/env node
const { createServer } = require('node:http');
const hostname = '127.0.0.1';
const port = 3000;
const server = createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('¡Hola mundo desde SWPanel!');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
danger Si tens múltiples servidors NodeJS en el mateix cloud, el port ha de ser diferent per a cadascun d'ells.
Atès que els serveis de Hosting desplegats automàticament per SWPanel estan configurats per funcionar conjuntament amb Apache2 i Nginx, haurem de fer un canvi en el fitxer de configuració de Nginx per a que interactuei amb el port 3000 (en aquest cas) del servidor NodeJS.
Editarem el fitxer de vhost de Nginx mitjançant nano /etc/nginx/swpanel/vhosts/dominio.com.conf i comentarem el següent bloc afegint # al principi de cada línia o directament, esborrant aquest bloc:
# location / {
# proxy_pass http://127.0.0.1:8080;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto $scheme;
# access_log off;
# proxy_cache_key '$scheme$request_method$host$request_uri';
# proxy_no_cache $no_cache $http_pragma $http_authorization $arg_nocache;
# proxy_cache_bypass $no_cache $http_pragma $http_authorization $arg_nocache;
# proxy_cache nodejs.swmanuales.com_proxy;
# proxy_cache_valid '5';
# proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504 updating;
# }
info Si el teu servei té instal·lat un certificat SSL, aquest bloc apareixerà tant per al port 80 (part superior del fitxer de configuració) com per al 443 (part inferior del fitxer de configuració), per la qual cosa hauràs de fer aquest pas, i el següent, dues vegades.
A continuació, afegeix la següent configuració just per sota del bloc comentat:
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_set_header X-Real-IP $remote_addr;
proxy_set_header X-Fowarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Fowarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
try_files $uri $uri/ =404;
}
info Novament, si el teu servei de Hosting té certificat SSL, hauràs de fer aquest pas també per al bloc de configuració per al port 443.
info Recorda canviar el port pel mateix que està configurat en el fitxer del servidor NodeJS
Desa els canvis mitjançant 'Ctrl + O' i surt de l'editor amb 'Ctrl + X'.
Un cop modificada la configuració del VirtualHost de Nginx, comprovarem que sigui correcta:
nginx -t
Si és correcta, reiniciarem el servei Nginx:
systemctl restart nginx
Un cop arribats a aquest punt, podem arrancar el servidor NodeJS de forma manual per comprovar que funciona correctament:
node /var/www/nodejs.swmanuales.com/datos/web/server.js
Accedim al domini a través del navegador i veiem com s'està carregant el contingut.
info Per aturar el servidor utilitza la combinació 'Ctrl + C'
Creació del servei
En el cas que el servidor NodeJS hagi d'estar iniciat permanentment, és interessant crear un servei d'arranque; d'aquesta manera, el servidor NodeJS estarà executant-se en segon pla com un servei més del Cloud.
Cal revisar alguns punts abans de crear el servei d'arranque:
1 - El fitxer principal del servidor ha de contenir #!/usr/bin/env node en la primera línia; si no, el servei no arrancarà.
2 - El fitxer principal del servidor ha de tenir permís d'execució per a l'usuari propietari, per a ello, executa el següent comand:
chmod u+x /var/www/nodejs.swmanuales.com/datos/web/server.js
3 - El fitxer principal ha de tenir com a usuari propietari i grup propietari l'usuari CHROOT assignat al servei de Hosting. Per saber l'usuari i el grup propietari del servei pots executar el següent comand:
stat -c '%U' /var/www/nodejs.swmanuales.com/datos/web
La resposta serà un usuari similar al següent:
SW002NO432
Per modificar l'usuari i el grup propietari del fitxer, utilitza aquest comand:
chown SW002NO432:SW002NO432 /var/www/nodejs.swmanuales.com/datos/web/server.js
info Recorda canviar nodejs.swmanuales.com pel nom del teu domini i SW002NO432 per l'usuari propietari del teu directori.
Un cop revisats els punts anteriors, podem crear el servei d'arranque. Per a ello, hauràs de crear i editar un fitxer al directori /etc/systemd/system/, en aquest directori es troben els serveis del sistema:
nano /etc/systemd/system/nodejs_swmanuales.service
info Tria el nom de la teva preferència per substituir nodejs_swmanuales
danger El fitxer ha de acabar en '.service'
En aquest nou fitxer, hauràs d'especificar la següent configuració:
[Unit]
Description=NodeJS SWManuales
[Service]
ExecStart=/var/www/nodejs.swmanuales.com/datos/web/server.js
Restart=always
User=SW002NO432
Group=SW002NO432
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/nodejs.swmanuales.com/datos/web/
[Install]
WantedBy=multi-user.target
info Realitza els canvis a la configuració: Description, ExecStart, User, Group i WorkingDirectory, per a que s'adapti al teu entorn de treball.
Un cop fet això, podem iniciar el servei i habilitar-lo perquè s'iniciï automàticament:
systemctl daemon-reload
systemctl enable nodejs_swmanuales.service
systemctl start nodejs_swmanuales.service
systemctl status nodejs_swmanuales.service
Si el comand systemctl status nodejs_swmanuales.service indica que el servidor està iniciat, ja podràs accedir des del navegador i visualitzar la teva web.
En cas contrari, pots utilitzar el comand journalctl -u nodejs_swmanuales.service per comprovar els errors.
Si tens qualsevol consulta, no dubtes a contactar-nos a través de l'Ajuda Immediata Manual: Conversar amb el suport amb Ajuda immediata.