Va en vivo con nodo

En mi artículo anterior hablé sobre mi alegría de descubrir el marco Express. Express es lo que me hace sentir que realmente podría construir algo con Node y divertirme haciéndolo. Y de hecho, ¡hice eso! Construí algunas aplicaciones web de muestra y me divertí mucho. Pero, finalmente, decidí que era hora de ceder y ponerme serio. Me gustó Node, me encantó Express, y si realmente iba a comprometerme a aprenderlo, ¿por qué no dar el paso final y crear un real sitio web usándolo.

Otra cosa que aprendí al principio de mi educación en Node (¿Nodacation?) Fue que tener que detener y reiniciar una aplicación de Node era un verdadero dolor en la retaguardia. Tuve un gran éxito usando Nodemon de Remy Sharp. Notará actualizaciones en su código y reiniciará su aplicación Node automáticamente..

Esto suena trivial, supongo, pero para mí toda mi experiencia con Node fue en la línea de comandos. Simplemente correría aplicación de nodo y realice pruebas fuera de servicio en el puerto 3000. Realmente no sabía lo que implicaba tener esa misma aplicación en funcionamiento en un servidor real y responder a un dominio. En este artículo describiré dos intentos diferentes que hice para mover una aplicación Node a producción. Obviamente hay más formas (¡y busque más artículos aquí en Nettuts +!), Así que tenga en cuenta que esto es lo que probé y tuve éxito con.


Intento Uno: Apache FTW!

Mi proceso típico para impulsar un nuevo sitio de ColdFusion fue simplemente subir mis archivos a través de FTP y editar manualmente mi Apache httpd.conf Archivo para agregar el nuevo servidor virtual.

Una de las cosas que mencioné en mi artículo anterior es que la mayor parte de mi experiencia con el desarrollo del lado del servidor involucra a Adobe ColdFusion. Si nunca lo ha utilizado, entonces una de sus características principales es la integración con su servidor web (como PHP). Lo que eso significa es que puedo decirle al servidor de aplicaciones que le permita a Apache (o IIS, etc.) saber que cualquier solicitud de un archivo de una cierta extensión se debe entregar al servidor de ColdFusion.

Obviamente, Node es un poco diferente: básicamente ya estás asumiendo el papel de un servidor web. Así que no sabía cómo tomaría una aplicación Node y la publicaría en mi servidor de producción existente. Mi proceso típico para impulsar un nuevo sitio de ColdFusion fue simplemente subir mis archivos a través de FTP y editar manualmente mi Apache httpd.conf Archivo para agregar el nuevo servidor virtual. (Si usara IIS sería prácticamente lo mismo, excepto que usaría su herramienta gráfica).

Comencé por buscar en Google sobre el tema y encontré algunas respuestas. El que más ayudó fue un artículo de Davy Brion, "Alojar un sitio Node.js a través de Apache". (Para ver cómo se puede hacer esto con IIS, consulte el artículo en profundidad de Scott Hanselman). Su artículo lo divide en dos aspectos: garantizar que su secuencia de comandos de Nodo se ejecute cuando el servidor arranque y configure Apache. Ignoré el aspecto de inicio del script ya que su solución involucraba a Linux y mi servidor de producción usaba Windows. (Soy un gran fan de OS X, pero por alguna razón siempre me he sentido más cómodo alojando en Windows. No sé por qué, pero funciona para mí. Esencialmente, su solución se reduce a tener las solicitudes de proxy Apache (atrás y cuarto) entre él y su aplicación Node. Este es un ejemplo que utilicé para probar:

  ServerName nodetest.dev ProxyRequests Off ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/ 

Tenga en cuenta que esto es ligeramente diferente al ejemplo de Davy. Quieres asegurarte de que has habilitado mod_proxy y mod_proxy_http lo que debería ser tan simple como asegurarse de que no estén comentados en su archivo conf. Finalmente, reinicié Apache y agregué una entrada a mi archivo de hosts locales para el dominio que especifiqué anteriormente. Y funcionó!

Ahora, mientras esto funcionó, señalaré que muchos de los resultados que obtendrá de Google sobre este tema analizarán cómo la gente no cree que esta sea una solución muy eficaz. Para ser honesto, esperaba alojar un sitio que recibiría, en el mejor de los casos, mil visitas diarias, por lo que realmente no me preocupaba. Lo que me preocupaba era configurar mi aplicación para que se iniciara y reiniciara automáticamente en Windows. Vi algunas soluciones, pero antes de desconectar y lanzar mi sitio, decidí investigar un poco y ver si otra opción podría funcionar mejor para mí..


Intento de dos: descubriendo AppFog


Descubrí AppFog después de leer acerca de un compañero mío. AppFog es un servicio basado en la nube (lo que no es hoy en día) que facilita el alojamiento de aplicaciones utilizando una variedad de motores populares. Desde PHP hasta Grails hasta Ruby y, por supuesto, Node. Junto con el soporte para varios motores, también se integra bien con varias bases de datos y proveedores de SCM. Tiene un gran soporte de línea de comandos, pero lo que realmente me vendió fue que podía probarlo gratis. AppFog tiene una variedad de niveles de servicio, pero puedes probar con una URL pública algo fea de forma gratuita, de inmediato. Echemos un vistazo a la rapidez con la que puedes ir en vivo usando AppFog.

Primero, querrás registrarte. Una vez que haya completado el registro y la verificación, se colocará en la consola de AppFog:


Hay mucho aquí que no cubriremos en el artículo, pero por ahora, simplemente haga clic en Aplicaciones.


Para tu primera aplicación, simplemente pulsa el brillo Nueva aplicación botón. Ahora tienes que tomar una decisión. ¿Con cuál de las muchas aplicaciones iniciales verás tu aplicación? Tenga en cuenta que para cada una de las aplicaciones de inicio, puede echar un vistazo al código que se utilizará para inicializar su aplicación. Para que quede claro, si tiene una aplicación Node existente, como lo hice yo, el código que se usa aquí no interferirá. Simplemente lo volarás más tarde. Seleccioné Node Express.


A continuación, deberá seleccionar cómo se alojará su aplicación. Seré honesto aquí y diré que cuando jugué por primera vez con AppFog realmente no sabía qué seleccionar aquí. Fui con AWS US East porque estaba más familiarizado con AWS que con las soluciones de HP o de Microsoft..


Finalmente, se le pedirá que seleccione un nombre de dominio. Tenga en cuenta que solo está seleccionando una parte del nombre de dominio. Una vez que actualice a un nivel de pago, puede agregar dominios "reales" a sus aplicaciones. Pero para la prueba, esto está bien. Fui con nettutshelloworld.


Haga clic en el Crear aplicación botón y retroceder como AppFog va a la ciudad ...


Después de que todo esté listo, se colocará en la consola de administración principal de su aplicación. Hay bastantes opciones disponibles aquí, incluida la posibilidad de agregar elementos como soporte de base de datos y paquetes de registro. También puede iniciar, detener y reiniciar su aplicación desde aquí..


Como paso final, siga adelante y haga clic en el Visita el sitio en vivo botón para confirmar que, sí, en aproximadamente un minuto, ha implementado una aplicación Node en la web sin sudar:


Woot! Ok, así que las partes duras hechas. ¿Cómo conseguimos nuestra aplicación en la plataforma AppFog? Es posible que haya notado un botón "Descargar código fuente". Eso le da una copia de la aplicación "semilla" Node Express, pero queremos implementar nuestra aplicación en su lugar. Si lees mi artículo anterior, recordarás que terminamos con una aplicación de blog simple. Tenía dos vistas (una lista de entradas y una entrada particular) basadas en una lista estática de datos de blog. En el archivo zip que puedes descargar de ese artículo, estaré trabajando con la carpeta "blog4"..

Para implementar el código en AppFog, utiliza un programa de línea de comandos simple, af. Esta herramienta se puede instalar en Windows, OS X y Linux. Las instrucciones de instalación se detallan aquí (https://docs.appfog.com/getting-started/af-cli) pero esencialmente se reduce a:

 gema de instalar af

Una vez que haya instalado una aplicación, casi siempre puede olvidarse de la consola AppFog. Ciertamente, tendrá que regresar allí eventualmente, pero para mi sitio de producción lo he usado rara vez. La herramienta af admite, por lo que puedo decir, todo lo que la consola también admite. Para empezar, primero necesitas iniciar sesión..


Este inicio de sesión parece persistir por un tiempo, pero en general, primero siempre inicio sesión cuando comienzo a trabajar con mi aplicación. Ahora voy a pasar a la carpeta que contiene mi aplicación..


Ahora para la parte fresca. Insertar su código en AppFog es tan simple como emitir un comando de actualización, así:


La captura de pantalla anterior no le da una idea de cuánto tarda el proceso. Cada una de esas líneas fueron escupidas a medida que ocurrían. En mi prueba, este proceso dura unos 10 segundos. Mis aplicaciones son pequeñas, por lo que su kilometraje puede variar. En caso de que tenga curiosidad, sí, mi solicitud se ha caído durante este proceso. En el proceso de actualización de 10 segundos, el tiempo de inactividad ascendió a aproximadamente 2 segundos. Creo que está bien, pero si esto te molesta, entonces hay una excelente solución descrita en el blog de AppFog: Cómo actualizar tu aplicación de AppFog con CERO tiempo de inactividad.

¿Funcionó? Ver por ti mismo. Abre tu navegador en http://nettutshelloworld.aws.af.cm/ y deberías ver el maravilloso blog, aunque estático, que construí:



Es eso realmente?

La primera vez que pasé por este proceso casi grité de alegría. No podía creer lo simple que era. Para mí, esta fue realmente la "conexión final" entre escribir aplicaciones de Nodo y realmente compartirlas con el mundo. Por supuesto, hubo algunas advertencias que me encontré. La primera es que mientras mi aplicación funcionó como está en AppFog, se supone que debe enlazar el puerto que escucha a través de una variable de entorno. Así que tuve que cambiar esta línea:

 app.listen (3000);

A esto:

 app.listen (process.env.VCAP_APP_PORT || 3000);

Como dije, mi aplicación funcionó tal como está, pero supongo que 3000 no siempre estará disponible, así que querrás asegurarte de hacer este pequeño retoque. Si utiliza otros servicios, como MySQL o Mongo, deberá realizar modificaciones similares. (Aunque en mi aplicación de producción, todavía tengo que actualizar la conexión de Mongo y no ha sido un problema todavía. ¡Pero está en mi lista de tareas!)

Entonces, ¿cómo me ha funcionado? En su mayor parte - perfecto. Ahora he lanzado dos sitios en AppFog, el JavaScript Cookbook y CajunIpsum. Si tuviera que hacer una crítica, sería la primera y única vez que tuve que contactar al soporte, no estaba contento con el tiempo que tardó en obtener una respuesta. Hasta ahora solo he recibido una solicitud de asistencia, por lo que estoy dispuesto a apostar (o esperar) a que sea una situación inusual..

.