Node.js: Comenzando
Aprenda a desplegar un servicio Node.js en Stackhero de manera rápida y segura
👋 ¡Bienvenido a la documentación de Stackhero!
Stackhero ofrece una solución nube de Node.js lista para usar que proporciona una serie de beneficios, incluyendo:
- Despliegue su aplicación en segundos con un simple
git push.- Use su propio nombre de dominio y benefíciese de la configuración automática de certificados HTTPS para una mayor seguridad.
- Disfrute de la tranquilidad con copias de seguridad automáticas, actualizaciones con un clic, y precios sencillos, transparentes y predecibles.
- Obtenga un rendimiento óptimo y una seguridad robusta gracias a una VM privada y dedicada.
Ahorre tiempo y simplifique su vida: ¡solo toma 5 minutos probar la solución de alojamiento en la nube de Node.js de Stackhero!
Desplegar un servicio Node.js en Stackhero es rápido, eficiente y confiable. Esta guía le guiará a través de los pasos esenciales para desplegar su aplicación en segundos, asegurando la máxima seguridad y rendimiento.
Iniciar un servicio Node.js
Comience creando un servicio Node.js en Stackhero. Este paso sienta las bases para el despliegue de su aplicación y le prepara para explorar todos los beneficios de la solución de alojamiento en la nube de Stackhero.
Requisitos previos
Antes de desplegar en Stackhero, asegúrese de tener instaladas las siguientes herramientas:
- Git. Puede descargarlo desde https://git-scm.com/downloads.
- Para los usuarios de Windows, sugerimos usar Windows Terminal disponible a través de Microsoft Store para una mejor experiencia.
Configurar su servicio
La única configuración necesaria es actualizar su clave pública SSH. Esta clave permite a Stackhero acceder de manera segura a su repositorio de código.
Para localizar su clave pública, ejecute uno de estos comandos:
cat ~/.ssh/id_rsa.pub
o
cat ~/.ssh/id_ed25519.pub
Si aún no tiene un par de claves SSH, puede generar una ejecutando ssh-keygen en Linux o macOS o ssh-keygen.exe en Windows.
Después de recuperar su clave pública, inicie sesión en el panel de Stackhero, seleccione su servicio Node.js, navegue a su configuración y pegue su clave.
Consejo: Puede establecer su clave pública SSH globalmente para que todos los futuros servicios la incluyan automáticamente. Para hacerlo, vaya al panel de Stackhero, haga clic en su foto de perfil (ubicada en la esquina superior derecha), navegue a 'Su perfil' y pegue su clave pública SSH.
Clonar el ejemplo
Se proporciona una aplicación de ejemplo de Node.js para ilustrar el proceso de despliegue en Stackhero. Puede clonar el repositorio con los siguientes comandos:
git clone https://github.com/stackhero-io/nodejsGettingStarted.git stackhero-nodejs-getting-started
cd stackhero-nodejs-getting-started
Configurar el servidor de repositorio remoto
Desplegar su aplicación a través de git es rápido, confiable y sencillo en Stackhero. En la página principal de su servicio, encontrará un comando para agregar un remoto git. Podría verse así:
git remote add stackhero ssh://stackhero@XXXXX.stackhero-network.com:222/project.git
Simplemente copie y pegue el comando en su terminal.
Desplegar su aplicación Node.js
Empuje su código a Stackhero usando el siguiente comando:
git push stackhero main
La primera vez que empuje, se le pedirá que agregue la huella digital de la clave. Escriba "yes" para continuar.
Después de unos momentos, su aplicación estará en línea. Puede verificar su estado visitando la URL del sitio proporcionada en el panel de Stackhero (por ejemplo, https://XXXXX.stackhero-network.com).
Eso es todo. ¡Su aplicación ya está desplegada!
Si realiza cambios en el archivo app.js, simplemente confirme y empuje sus modificaciones:
git add -A .
git commit -m "Update app.js"
git push stackhero main
Desplegar una aplicación existente
Para aplicaciones existentes, agregue el repositorio remoto como se describió anteriormente en Configurar el servidor de repositorio remoto. Luego, despliegue sus cambios con:
git push stackhero main
Manejar el error "failed to push some refs to '[...]'"
Si encuentra el siguiente error:
error: failed to push some refs to '[...]'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
(e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Este error indica que su repositorio local no está sincronizado con el repositorio remoto. En este caso, puede forzar el empuje ejecutando:
git push -f stackhero main
Manejar el error "src refspec main does not match any"
Si ve este error al ejecutar git push stackhero main:
error: src refspec main does not match any
error: failed to push some refs to 'ssh://<XXXXXX>.stackhero-network.com:222/project.git'
Indica que la rama main no existe. Puede intentar empujar la rama master en su lugar:
git push stackhero master
Manejar el error "Everything up-to-date" al empujar
Si git responde con "Everything up-to-date" pero sus cambios no están desplegados, puede ser porque olvidó confirmar sus cambios. En tales casos, ejecute:
git add -A .
git commit -m "Your commit message"
git push stackhero main
Si no se han realizado cambios pero aún desea forzar un despliegue, puede forzar un commit vacío:
git commit --allow-empty -m "Force update"
git push stackhero main
Desplegar una rama distinta de main
Si desea desplegar una rama distinta de main, como production, puede usar el siguiente comando:
git push stackhero production:main
Desplegar una etiqueta
Si trabaja con etiquetas y desea desplegar una etiqueta específica (por ejemplo, v1.0), ejecute:
git push stackhero 'v1.0^{}:main'
Aquí, ^{} asegura que el commit asociado con la etiqueta sea empujado.
Revertir o desplegar un commit específico
Si necesita desplegar un commit específico, primero identifique el hash del commit usando git log. Luego despliegue con:
git push -f stackhero <HASH>:main
Desplegar en múltiples entornos
Puede configurar múltiples servicios Node.js para diferentes entornos, como producción y staging. Para renombrar el remoto actual de stackhero a stackhero-staging, ejecute:
git remote rename stackhero stackhero-staging
A continuación, cree un nuevo servicio Node.js en el panel de Stackhero y agréguelo como stackhero-production:
git remote add stackhero-production ssh://stackhero@XXXXX.stackhero-network.com:222/project.git
Despliegue en producción o staging usando los comandos respectivos:
git push stackhero-production main
o
git push stackhero-staging main
Guardar la contraseña de su clave privada SSH en el llavero de macOS
En macOS, es posible que se le pida la contraseña de su clave SSH cada vez que empuje su código. Para mayor comodidad y seguridad (sin eliminar la contraseña de su clave), puede guardarla en el llavero de macOS ejecutando:
/usr/bin/ssh-add --apple-use-keychain ~/.ssh/id_rsa
Este comando guarda la contraseña de su clave en el llavero para que no se le pida nuevamente durante futuros despliegues.
Manejar secretos
Para entornos de staging y producción, gestionar de manera segura secretos como tokens o contraseñas es esencial. En lugar de almacenar estos secretos directamente en su repositorio, use variables de entorno para una mayor seguridad.
Puede agregar variables de entorno a través del panel de Stackhero y acceder a ellas en su código Node.js. Por ejemplo, si define una variable llamada mySecret, puede acceder a ella en su aplicación de la siguiente manera:
process.env.mySecret
Abrir otros puertos de red
Si su aplicación no utiliza HTTP, es posible que necesite abrir puertos TCP y UDP adicionales a través del panel de Stackhero. Simplemente especifique el puerto de entrada público, el puerto de destino en su servicio Node.js y el protocolo (TCP o UDP) para asegurar una conectividad adecuada.
Almacenar archivos
Para almacenar archivos como fotos de usuarios, es mejor usar una solución de almacenamiento de objetos. Este enfoque permite compartir archivos entre múltiples servicios e instancias mientras mantiene su código separado de sus datos. Recomendamos MinIO como una solución sencilla, rápida y poderosa compatible con el protocolo Amazon S3.
Si prefiere el almacenamiento local, puede usar el almacenamiento persistente disponible con su instancia de Node.js. Este almacenamiento se encuentra en /persistent/storage/.
PRECAUCIÓN: ¡Nunca almacene datos fuera de la carpeta
/persistent/storage/!Los datos almacenados fuera de esta carpeta pueden perderse si su instancia se reinicia o si empuja cambios de código.
Apagado elegante
Al desplegar una nueva versión de su aplicación, la versión antigua recibe una señal de terminación por adelantado. Esto le da tiempo para cerrar de manera elegante las conexiones a la base de datos y detener otros servicios.
Se emite la señal de terminación SIGTERM. Puede capturar esta señal en su código de la siguiente manera:
process.on('SIGTERM', () => {
// Este log aparece en el panel de Stackhero en la pestaña 'logs'
console.info('😯 Señal SIGTERM recibida.');
// Cierre aquí las conexiones a la base de datos u otros servicios
// ...
});
Ejecutar su código en múltiples núcleos de CPU
Por defecto, Node.js se ejecuta en un solo núcleo usando un solo hilo. Para aprovechar al máximo todos los núcleos de CPU disponibles, considere usar la API cluster de Node.js. Puede revisar la documentación oficial aquí: https://nodejs.org/api/cluster.html.
A continuación se muestra un ejemplo simple que crea un servidor HTTP utilizando todos los CPUs disponibles:
const cluster = require('cluster');
const http = require('http');
const cpusCount = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers
for (let i = 0; i < cpusCount; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died`);
});
} else {
// Los workers comparten cualquier conexión TCP; en este caso, un servidor HTTP
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
console.log(`Worker ${process.pid} started`);
}