start servidor produccion node javascript node.js express cloud9-ide joyent

javascript - servidor - Verificar si mi instancia de node.js es dev o producción



npm start (3)

Creo que la manera más fácil de configurar el entorno es pasar un argumento de línea de comandos a su aplicación.

node ./server.js dev

En su secuencia de comandos debe manejar este argumento y configurar la configuración que necesita para ello.

var env = process.argv[2] || ''dev''; switch (env) { case ''dev'': // Setup development config break; case ''prod'': // Setup production config break; }

Además, me crearon el module que hace que el proceso de configuración sea un poco más fácil. Tal vez te ayude.

En este momento, cada vez que deseo implementar un servidor node.js en mi servidor de producción, necesito cambiar toda la IP / DNS / nombre de usuario / contraseña para mi conexión múltiple a mis bases de datos y API externas.

Este proceso es molesto, ¿hay alguna manera de verificar si la instancia actualmente en ejecución node.js está en cloud9ide o en realidad es my producción joyent smartmachine?

Si soy capaz de detectar (en mi código de ejecución) en qué servidor se está ejecutando mi instancia node.js, agregaré una condición que establezca los valores en el prod o dev.

Gracias


En realidad, no recomendaría almacenar valores de configuración como información de conexión de base de datos, contraseñas, tokens de acceso y tal dentro del código de la aplicación real por las siguientes razones:

  1. La codificación rígida de esos valores hace que sea difícil cambiarlos más adelante. Deberá lanzar una nueva versión de la aplicación para cambiar esos valores.

  2. Esta es una violación de seguridad grave, porque los datos de configuración de nivel de producción y las contraseñas no deben almacenarse en el código. Es muy fácil filtrar esta información confidencial.

El mejor enfoque sería externalizar estos datos y pasarlos a su aplicación durante la ejecución. Esto normalmente se hace por medio de variables de entorno. Solo necesita definir una variable de entorno única para cada paz de datos que debe poder cambiarse entre diferentes entornos.

Por ejemplo: DB_HOST , DB_USER , DB_PASSWORD . Entonces podría pasar esos valores a su aplicación en producción de esta manera:

$ NODE_ENV=production DB_HOST=1.2.3.4 DB_USER=someusername DB_PASSWORD=somerandompassword /bin/node app.js

De hecho, estos valores podrían ser encriptados y agregados a la base de código y luego descifrados durante la implementación. Sin embargo, asegúrese de que la clave de descifrado esté almacenada de forma segura en el sistema de implementación o que el ingeniero de versiones la proporcione de forma interactiva. Enviable permite hacer esto de la caja.

En el entorno de desarrollo se vuelve más simple, porque puede usar el módulo dotenv muy conveniente. Simplemente crea un archivo .env en el directorio raíz de tu proyecto y .env todas las variables:

DB_HOST=1.2.3.4 DB_USER=someusername DB_PASSWORD=somerandompassword

Pero asegúrese de excluirlo de su VCS, ya que cada desarrollador probablemente desee tener una configuración personal. Puede crear un archivo .env.dist para que contenga la configuración predeterminada, que luego se podría usar como plantilla: cp .env.dist .env .

Además, he implementado un módulo reutilizable, que permite detectar el entorno automáticamente mediante el análisis de los argumentos CLI y la variable NODE_ENV. Esto podría ser útil en su máquina de desarrollo, porque puede cambiar fácilmente el entorno pasando un argumento CLI a su programa Node.js de la siguiente manera: $ node app.js --prod . También es bueno usarlo con Gulp: $ gulp build --prod .

Por favor, vea más detalles y casos de uso en la página de detect-environment .


Normalmente, deberías ejecutar una aplicación de nodo en producción como esta:

NODE_ENV=production node app.js

Las aplicaciones con Express, Socket.IO y otras usan process.env.NODE_ENV para descubrir el entorno.

En desarrollo, puede omitir eso y simplemente ejecutar la aplicación normalmente con el node app.js

Puede detectar el entorno en su código de esta manera:

var env = process.env.NODE_ENV || ''dev''; loadConfigFile(env + ''.json'', doStuff);

Recursos:

¿Cómo se detecta el entorno en una aplicación express.js?