Breaking

Post Top Ad

Your Ad Spot

viernes, 14 de junio de 2019

Gestión de variables de entorno en Node.js con dotenv

Introducción

La implementación de una aplicación requiere que los desarrolladores pongan atención y consideración en cómo se configura. Muchas aplicaciones se implementan en un entorno de desarrollo antes de implementarse en el entorno de producción. Necesitamos asegurarnos de que cada entorno esté configurado correctamente, podría ser desastroso si nuestra aplicación de producción estuviera utilizando nuestra base de datos de desarrollo, por ejemplo.
Las variables de entorno nos permiten administrar la configuración de nuestras aplicaciones por separado de nuestro código base. Las configuraciones separadas facilitan la implementación de nuestra aplicación en diferentes entornos.
Las aplicaciones grandes tienden a tener muchas variables de entorno. Para gestionarlos mejor podemos usar la biblioteca dotenv , que nos permite cargar variables de entorno desde un archivo.

¿Qué son las variables de entorno?

De la programación sabemos que las variables son valores almacenados que pueden ser cambiados. Son mutables y pueden variar, de ahí las variables de nombre .
Las variables de entorno son variables externas a nuestra aplicación que residen en el sistema operativo o el contenedor de la aplicación se está ejecutando. Una variable de entorno es simplemente un nombre asignado a un valor.
Por convención, el nombre se escribe con mayúscula, por ejemplo SENDER_EMAIL_ADDRESS=me@thisemail.comLos valores son cadenas.
Si abre el terminal o la aplicación de línea de comandos en Linux, Mac OS o Windows e ingresa set, verá una lista de todas las variables de entorno para su usuario.

¿Por qué usar variables de entorno?

Las variables de entorno son excelentes para desacoplar las configuraciones de aplicaciones. Normalmente, nuestras aplicaciones requieren que se establezcan muchas variables para que funcionen. Al confiar en configuraciones externas, su aplicación se puede implementar fácilmente en diferentes entornos. Estos cambios son independientes de los cambios en el código, por lo que no requieren que su aplicación sea reconstruida para cambiar.
Los datos que cambian según el entorno en el que se ejecuta su aplicación deben configurarse como variables de entorno. Algunos ejemplos comunes son:
  • Puerto HTTP y dirección
  • Base de datos, caché y otra información de conexión de almacenamiento
  • Ubicación de archivos / carpetas estáticos
  • Puntos extremos de servicios externos.
    • Por ejemplo, en un entorno de desarrollo, su aplicación apuntará a una URL de prueba de la API, mientras que en un entorno de producción su aplicación apuntará a la URL de la API en vivo.
Los datos confidenciales, como las claves de API, no deben estar en el código fuente, ni deben ser conocidos por las personas que no necesitan acceso a esos servicios externos.

Variables de entorno en Node.js

Considere una aplicación hello world Node.js con variables de entorno para el host y el puerto en el que se ejecuta la aplicación.
Cree un nuevo archivo llamado hello.jsen el área de trabajo que elija y agregue lo siguiente:
const http = require('http');

// Read the host address and the port from the environment
const hostname = process.env.HOST;  
const port = process.env.PORT;

// Return JSON regardless of HTTP method or route our web app is reached by
const server = http.createServer((req, res) => {  
    res.statusCode = 200;
    res.setHeader('Content-Type', 'application/json');
    res.end(`{"message": "Hello World"}`);
});

// Start a TCP server listening for connections on the given port and host
server.listen(port, hostname, () => {  
    console.log(`Server running at http://${hostname}:${port}/`);
});
Node.js proporciona una variable global process.env, un objeto que contiene todas las variables de entorno disponibles para el usuario que ejecuta la aplicación. Se espera que el entorno y el nombre del host en el que se ejecutará la aplicación estén definidos.
Puede ejecutar esta aplicación ingresando este comando en el terminal, HOST=localhost PORT=3000 node hello.jssi tiene instalado Node.js. Notarás el siguiente mensaje en tu consola:
Server running at http://localhost:3000/  
Crear y leer variables de entorno es así de fácil. Digamos que estamos escribiendo un microservicio que se comunica con una instancia de MySQL y Redis , nos gustaría tener los detalles de conexión disponibles también en nuestras variables de entorno.
Podríamos terminar con un comando como este:
$ DB_HOST=localhost DB_PORT=3306 DB_USER=test DB_PASSWORD=verySecret123!$ DB_MAX_CONNECTIONS=15 CACHE_ADDR=localhost CACHE_PORT= 6379 HOST=localhost PORT=3000 node hello.js
El desarrollo con múltiples variables de entorno se vuelve rápidamente inmanejable. Sería mejor si las variables de entorno que debíamos configurar estuvieran almacenadas en un lugar central para la aplicación, como un archivo.

La biblioteca dotenv

Esta biblioteca realiza una tarea simple: carga las variables de entorno de un .envarchivo en la process.envvariable en Node.js. Vamos a utilizar dotenvpara el ejemplo anterior.
Primero, necesitamos instalarlo a través de npm:
$ npm init # Optional, creates a local package.json that prevents global installs
$ npm install dotenv --save
Y luego hacemos un cambio de código mínimo, agregue esta línea en la parte superior de hello.js:
require('dotenv').config()  
Ahora, en el mismo directorio de su aplicación, cree un nuevo archivo llamado .envy agregue lo siguiente:
HOST=localhost  
PORT=3000  
Las variables de entorno se declaran como si las estuviera ingresando en el shell antes de ejecutar el comando de nodo. En lugar de separar cada asignación de variable por un espacio, las separamos por una nueva línea . Ahora, en su shell, si ingresa node hello.js, la aplicación se ejecutará en el puerto 3000en su localhost!
Incluso si dotenvse utiliza en la aplicación, es completamente opcional. Si no .envse encuentra ningún archivo, la biblioteca falla silenciosamente. Puede seguir utilizando las variables de entorno definidas fuera del archivo.
Nota : También hay muchas variaciones de dotenvotros lenguajes de programación y marcos. Una guía muy popular para crear aplicaciones web modernas es la aplicación Twelve-Factor . El documento fue creado por muchos desarrolladores que crearon aplicaciones de Software-as-a-Service. Una de las 12 consideraciones de una aplicación moderna y escalable es la configuración, específicamente el uso de variables de entorno para almacenar la configuración. La popularidad de esta metodología ha ayudado a impulsar la creación y popularidad de dotenvmódulos similares.

Uso de producción

El almacenamiento de sus variables de entorno en un archivo viene con una regla de oro: nunca lo comprometa con el repositorio de código fuente. No desea que personas externas obtengan acceso a secretos, como las claves de API. Si está utilizando dotenvpara ayudar a administrar sus variables de entorno, asegúrese de incluir el .envarchivo en su .gitignorelista negra o la adecuada para su herramienta de control de versiones.
Si no puede enviar el .envarchivo, es necesario que el desarrollador sepa cómo se requieren las variables de entorno para ejecutar el software. Es común que los desarrolladores enumeren las variables de entorno necesarias para ejecutar el programa en una READMEdocumentación interna similar.
Algunos desarrolladores crean y mantienen un .sample-envarchivo en el repositorio de código fuente. Este archivo de muestra enumera todas las variables de entorno utilizadas por la aplicación, por ejemplo:
HOST=  
PORT=  
Un desarrollador luego clonaría el repositorio, copiaría el .sample-envarchivo en un nuevo .envarchivo y completaría los valores.
Si su aplicación se ejecuta en una máquina física o en una máquina virtual (por ejemplo, gotitas de Digital Ocean , Amazon EC2 y Azure Virtual Machines ), puede crear un .envtiempo de inicio de sesión en el servidor y se ejecutará tal como se hace en su máquina local.
Si su aplicación se ejecuta en un contenedor de la ventana acoplable o en un proveedor de Plataforma como servicio como Heroku o Openshift , entonces podrá configurar las variables de entorno sin tener que usar el .envarchivo.
Recuerde que falla de forma silenciosa, por lo que no afectaría el funcionamiento de la aplicación si falta el archivo.

Conclusión

Las variables de entorno existen fuera del código de nuestra aplicación, están disponibles donde se ejecuta nuestra aplicación. Se pueden usar para desacoplar la configuración de nuestra aplicación de su código, lo que permite que nuestras aplicaciones se implementen fácilmente en diferentes entornos.
Con las aplicaciones Node.js, las variables de entorno están disponibles a través de la process.envvariable global. Podemos establecer las variables de entorno antes de ejecutar el nodecomando, o podemos usar la dotenvbiblioteca que nos permite definir nuestras variables de entorno en un .envarchivo.
El .envarchivo nunca debe estar en el repositorio de código fuente.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas