En aquest manual veurem com instal·lar NodeJS en un Cloud amb SWPanel. A més, aprendràs a crear un servei d'arrencada perquè el servidor NodeJS es mantingui sempre actiu com un servei més del servidor i iniciï automàticament en cas de reiniciar el Cloud.
Primerament, necessitaràs un servidor amb SWPanel com a panell de gestió, per això, pots seguir el 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 Crear un Hosting Web al meu Cloud.
Totes les accions que farem 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 o a través de la consola d'SWPanel.
info Abans d'instal·lar cap paquet, et recomanem que facis un 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: Com crear i gestionar SnapShots del teu Servidor Cloud.
Primer de tot, actualitzarem el servidor a través de la següent ordre:
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 pel qual escoltarà el teu servidor NodeJS, nosaltres utilitzarem el codi següent com a exemple. En el nostre cas, el fitxer es troba al directori /var/www/nodejs.swmanuales.com/datos/web/server.js.
Com podts 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 al mateix cloud, el port ha de ser diferent per a cadascun.
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 al fitxer de configuració de Nginx perquè interactuï amb el port 3000 (en aquest cas) del servidor NodeJS.
Editarem el fitxer de vhost de Nginx mitjançant nano /etc/nginx/swhosting/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 configuració següent just a 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 De nou, 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 al fitxer del servidor NodeJS
Guarda 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 aquesta sigui correcta:
nginx -t
Si és correcta, reiniciarem el servei Nginx:
systemctl restart nginx
Un cop arribats a aquest punt, podem arrencar 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 carrega el contingut.
info Per aturar el servidor utilitza la combinació "Ctrl + C"
En cas que el servidor NodeJS hagi d'estar iniciat permanentment, és interessant crear un servei d'arrencada; així, el servidor NodeJS estarà corrent en segon pla com un servei més del Cloud.
Cal revisar alguns punts abans de crear el servei d'arrencada:
1 - El fitxer principal del servidor ha de contenir #!/usr/bin/env node a la primera línia, en cas contrari, el servei no arrencarà.
2 - El fitxer principal del servidor ha de tenir permís d'execució per a l'usuari propietari, per a això, executa la següent ordre:
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 la següent ordre:
stat -c '%U' /var/www/nodejs.swmanuales.com/datos/web
La resposta serà un usuari semblant al següent:
SW002NO432
Per modificar l'usuari i el grup propietari del fitxer, utilitza aquesta ordre:
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'arrencada. Per això, 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 d'acabar en ".service"
En aquest nou fitxer, hauràs d'especificar la configuració següent:
[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, perquè 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 la comanda 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 l'ordre journalctl -u nodejs_swmanuales.service per comprovar els errors.
Si tens qualsevol consulta, no dubtis en contactar-nos a través de l'Ajuda Immediata