node.js web-applications installation webfaction

Configurando Node.js en Webfaction



web-applications installation (3)

Introducción

El resultado de las siguientes instrucciones es una aplicación Node.js que se ejecuta de manera continua, produce archivos de registro y se reinicia incluso después del reinicio de la máquina del servidor. Las instrucciones están especialmente dirigidas a las cuentas de host compartidas en Webfaction pero también pueden usarse para fines generales.

Instala Node.js

Aunque la página de descarga de Node.js ofrece binarios de Linux, sería más robusto instalar Node.js desde la fuente. Descargue los códigos fuente más recientes y extráigalos a ~/src/ .

(log in to your webfaction console) > mkdir -p ~/src/ > cd src/ > wget http://nodejs.org/dist/v0.10.18/node-v0.10.18.tar.gz > tar -xzf node-v0.10.18.tar.gz

El siguiente paso es compilar e instalar el código. Para esto se utiliza Python. Debido a que la versión de python predeterminada es 2.4 (al menos en mi servidor Webfaction web223) y debido a que la instalación de Node.js requiere una de las versiones 2.6+, debe configurar temporalmente una versión más nueva como predeterminada. Vea el siguiente fragmento de código (también vea este artículo para más detalles). Nota --prefix=$HOME que se requiere debido a las restricciones del entorno de Webfaction (solo tiene acceso a su directorio de inicio).

> cd node-v0.10.18/ > alias python=python2.7 > python configure --prefix=$HOME > make > make install

Node.js instalado. Verificar el éxito por

> node -v v0.10.18

Eso también instaló el gestor de paquetes del nodo npm

> npm -v 1.3.8

Instalar para siempre

Para que la aplicación Node.js se ejecute siempre que se ejecute y se registre la salida para el mantenimiento, necesita Forever . Por conveniencia, instálalo globalmente (para ti) usando flag -g .

> cd ~ > npm install -g forever > forever --version v0.10.8

Más tarde puede actualizar para siempre por

> npm update -g forever

Iniciar la aplicación

Primero, cree una aplicación personalizada a través del Panel de control de Webfaction (Aplicación personalizada (escucha en el puerto)). Nómbrelo , por ejemplo, foonode . También puede crear un dominio y un sitio web para la aplicación.

En segundo lugar, anote el número de puerto de socket que Webfaction le dio a la aplicación. Sea el ejemplo 48888 .

En tercer lugar, copie el código de su aplicación en el directorio de la aplicación, es decir, ~/webapps/foonode/ . Después de eso, los contenidos del directorio serían, por ejemplo, los siguientes.

> cd ~/webapps/foonode/ > ls node_modules/ index.js

Index.js sería algo como el fragmento a continuación. El punto clave es usar el número de puerto dado para la aplicación.

var http = require(''http''); http.createServer(function (req, res) { res.writeHead(200, {''Content-Type'': ''text/plain''}); res.end(''Hello Universe./n''); }).listen(48888, ''127.0.0.1''); console.log(''Listening at http://127.0.0.1:48888/'');

Ahora puedes ejecutar la aplicación por node index.js . Sin embargo, hay un problema: al salir del shell, también se cierra la aplicación. Por lo tanto, debe ejecutar Node.js como un demonio . Eso es algo donde Forever hace mucho por ti. Iniciar nodo con para siempre:

> cd ~/webapps/foonode/ > forever start index.js

Ahora la aplicación continúa ejecutándose después de que cierre la sesión y, como cosa muy agradable de tener, se reinicia rápidamente si se bloquea. Esto es mucho pero aún no es suficiente. ¿Qué pasa si el servidor se reinicia? ¿A dónde va la salida de la aplicación? ¿Qué pasa si el script se bloquea continuamente? ¿Qué sucede si tiene varios scripts con el nombre index.js ? Sigue leyendo.

Utilice los caminos absolutos con Forever

Forever identifica el proceso por el nombre de archivo del script alimentado forever start <filename_of_script> . Surge un problema cuando tiene varias aplicaciones con el mismo nombre de archivo para el script.

Por ejemplo, considere que tiene dos aplicaciones /home/foouser/webapps/foonode/index.js y /home/foouser/webapps/barnode/index.js . Si ahora inicia ambos con forever start index.js dentro de los directorios de las aplicaciones y luego ejecuta forever stop index.js solo una vez , el resultado es que ambas aplicaciones se detienen. Esto sucede porque ambos tenían la misma identidad index.js

La solución es utilizar las rutas de archivo absolutas al especificar el script.

> forever start /home/foouser/webapps/foonode/index.js

Y para detener la ejecución:

> forever stop /home/foouser/webapps/foonode/index.js

Esto garantiza que solo se detenga la aplicación deseada. Este hábito de usar caminos absolutos también tiene efectos positivos forever list para forever list . Vea este tema para más detalles.

Explotación florestal

Para almacenar el resultado de la aplicación en algún lugar, especifique los siguientes argumentos.

-l <logfile> = stream all output to this file. Relative to ~/.forever/ -o <logfile> = stream script''s stdout to this file. Relative to current dir. -e <logfile> = stream script''s stderr to this file. Relative to current dir. -a = append to the files instead of overwriting them.

Parece conveniente tener un subdirectorio para los registros, por ejemplo, logs/ . Con los argumentos, la ruta absoluta y los registros del subdirectorio / el comando se convierte en lo siguiente:

> cd ~/webapps/foonode/ > mkdir -p logs/ > forever start -a -l forever.log -o logs/out.log -e logs/err.log /home/foouser/webapps/foonode/index.js

Detectar y reiniciar un proceso de hilatura

Forever tiene los parámetros --minUptime y --spinSleepTime que no están tan bien documentados actualmente. El significado de los parámetros es controlar la situación en la que el script se bloquea y casi inmediatamente se bloquea de nuevo después del reinicio. Como siempre intenta reiniciar el script tan pronto como sea posible después de la caída, esto puede llevar a un bucle ocupado que puede consumir muchos recursos del servidor.

--minUptime especifica la cantidad de milisegundos que el script debe estar en funcionamiento y sin bloqueos para reiniciarse inmediatamente. Si el tiempo de actividad del script bloqueado es inferior a minUptime, entonces el script se considera giratorio, es decir, problemático. Si el tiempo de actividad es mayor, el script se considera no giratorio .

Si una secuencia de comandos de giro falla, es decir, el tiempo de actividad de la secuencia de comandos es menor que --minUptime entonces siempre espera --spinSleepTime número de milisegundos antes de reiniciar la secuencia de comandos. De lo contrario, el script se reinicia lo antes posible. Esto evita el bucle que consume recursos. Vea esta respuesta para más discusión.

Personalmente uso 5000 para --minUptime para asegurarme de que Node esté completamente iniciado antes de declararlo como no giratorio. 2000 sería una buena --spinSleepTime para --spinSleepTime para evitar el bucle pero seguir intentando iniciar el script rápidamente después de que se resuelva la situación problemática.

> forever start -a -l forever.log -o logs/out.log -e logs/err.log --minUptime=5000 --spinSleepTime=2000 /home/foouser/webapps/foonode/index.js

Administrar la aplicación

A medida que los comandos crecen, memorizarlos y escribirlos se vuelve cada vez más engorroso. Por lo tanto, es conveniente copiarlos en un Makefile. El archivo make también se vuelve útil más adelante cuando necesita especificar un comando para ejecutarse después de que el servidor se reinicie.

> cd ~/webapps/foonode/ > cat Makefile foreverstart: # Run server forever (until reboot) mkdir -p logs forever start -a -l forever.log -o logs/out.log -e logs/err.log --minUptime 5000 --spinSleepTime 2000 /home/foouser/webapps/foonode/index.js foreverstop: forever stop /home/foouser/webapps/foonode/index.js

Mantener la aplicación en ejecución

Forever no cubre el caso donde el servidor se reinicia. Para eso necesitas especificar un cronjob con la regla @reboot que inicie para siempre después de reiniciar.

> export EDITOR=nano # Editor to use to edit crontab. A matter of taste. > crontab -e

Agrega la siguiente línea y guarda.

@reboot make -C ~/webapps/foonode/ -f ~/webapps/foonode/Makefile foreverstart

La línea garantiza que el foonode se inicie inmediatamente después del reinicio del servidor. La bandera -C especifica el directorio para ejecutar el makefile desde y -f la ubicación real del makefile. Vea esta respuesta para obtener detalles sobre el uso de @reboot .

Conclusión

Ahora tiene un proceso de nodo ejecutándose realmente para siempre o al menos mientras haya gente de mantenimiento alimentando el servidor con electricidad. Muchas cosas hechas, pero tal vez vendrán más. Las cosas que le gustaría hacer en el futuro que no se trataron aquí incluyen lo siguiente.

  • Observando cambios en los archivos y reiniciando automáticamente cuando se detectan (ver --watch in forever --help )
  • Usar Grunt.js en lugar de Make (ver bustardcelly/grunt-forever )
  • Copia de seguridad de la aplicación de vez en cuando.

Ver también

  • Configurando Redis en Webfaction

¿Alguna idea, comentario o corrección?

¿Cuáles son los pasos necesarios para configurar una aplicación Node.js en la cuenta de alojamiento compartido Webfaction ?


Bueno, es probable que ya hayas seguido todos los pasos en la otra respuesta (¡qué detalles, ¡qué gran detalle!), Pero ahora es mucho más fácil: now tienen un instalador de un solo clic para node.js.


Otra opción es instalar nvm (Administrador de versiones de nodos) y escribir:

nvm install node

No solo es válido para Webfaction.