Administrar variables de entorno en Node.js con dotenv

A

Introducción

La implementación de una aplicación requiere que los desarrolladores piensen y consideren cómo está configurada. 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 usando 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. La separación de configuraciones facilita la implementación de nuestra aplicación en diferentes entornos.

Las aplicaciones grandes tienden a tener muchas variables de entorno. Para gestionarlos mejor podemos utilizar el dotenv biblioteca, que nos permite cargar variables de entorno desde un archivo.

¿Qué son las variables de entorno?

Por programación sabemos que las variables son valores almacenados que se pueden cambiar. Son mutables y pueden variar, de ahí el nombre de variables.

Las variables de entorno son variables externas a nuestra aplicación que residen en el sistema operativo o en el que se ejecuta el contenedor de la aplicación. Una variable de entorno es simplemente un nombre asignado a un valor.

Por convención, el nombre se escribe en mayúsculas, por ejemplo [email protected]. Los 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é utilizar variables de entorno?

Las variables de entorno son excelentes para desacoplar 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 de 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 establecerse como variables de entorno. Algunos ejemplos comunes son:

  • Dirección y puerto HTTP
  • Base de datos, caché y otra información de conexión de almacenamiento
  • Ubicación de carpetas / archivos estáticos
  • Puntos finales de servicios externos
    • Por ejemplo, en un entorno de desarrollo, su aplicación apuntará a una URL de API de prueba, mientras que en un entorno de producción su aplicación apuntará a la URL de API activa.

Los datos confidenciales, como las claves API, no deben estar en el código fuente ni ser conocidos por personas que no necesitan acceso a esos servicios externos.

Variables de entorno en Node.js

Considere un hola mundo Node.js aplicación con variables de entorno para el host y el puerto en el que se ejecuta la aplicación.

Crea un nuevo archivo llamado hello.js en un espacio de trabajo de su elección 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 defina el nombre de host y el puerto en el que se ejecutará la aplicación.

Puede ejecutar esta aplicación ingresando este comando en la terminal, HOST=localhost PORT=3000 node hello.js, dado que tiene Node.js instalado. 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 un MySQL y Redis Por ejemplo, también nos gustaría tener los detalles de conexión disponibles 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

Desarrollar con múltiples variables de entorno rápidamente se vuelve difícil de manejar. Sería mejor si las variables de entorno que tuvimos que configurar estuvieran almacenadas en un lugar central de la aplicación, como un archivo.

La biblioteca dotenv

Esta biblioteca realiza una tarea simple: carga las variables de entorno desde un .env archivar en el process.env variable en Node.js. Usemos dotenv para 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 mínimo de código, agregamos esta línea a la parte superior de hello.js:

require('dotenv').config()

Ahora en el mismo directorio de su aplicación, cree un nuevo archivo llamado .env y agregue lo siguiente:

HOST=localhost
PORT=3000

Sus variables de entorno se declaran como si las estuviera ingresando en el shell antes de ejecutar el comando de node. En lugar de separar cada asignación de variable por un espacio, las separamos por una nueva línea. Ahora en tu caparazón, si entras node hello.js, la aplicación se ejecutará en el puerto 3000 en tu localhost!

Aunque dotenv se utiliza en la aplicación, es completamente opcional. Si no .env se encuentra el archivo, la biblioteca falla silenciosamente. Puede seguir utilizando variables de entorno definidas fuera del archivo.

Nota: También hay muchas variaciones de dotenv en otros lenguajes de programación y marcos. Una pauta muy popular para la creación de aplicaciones web modernas es La aplicación de doce factores. El documento fue creado por muchos desarrolladores que crearon aplicaciones de software como servicio. 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 contribuido a impulsar la creación y popularidad de dotenv y módulos similares.

Uso de producción

El almacenamiento de las variables de entorno en un archivo viene con una regla de oro: nunca lo envíe al repositorio de código fuente. No desea que personas externas obtengan acceso a secretos, como claves API. Si esta usando dotenv para ayudar a administrar sus variables de entorno, asegúrese de incluir el .env archivo en su .gitignore o la lista negra apropiada para su herramienta de control de versiones.

Si no puede cometer el .env , entonces debe haber alguna forma para que un desarrollador sepa qué variables de entorno se requieren para ejecutar el software. Es común que los desarrolladores enumeren las variables de entorno necesarias para ejecutar el programa en un README o documentación interna similar.

Algunos desarrolladores crean y mantienen .sample-env archivo en el repositorio de código fuente. Este archivo de muestra enumeraría todas las variables de entorno utilizadas por la aplicación, por ejemplo:

HOST=
PORT=

Luego, un desarrollador clonaría el repositorio, copiaría el .sample-env archivar en un nuevo .env archivo y complete los valores.

Si su aplicación se ejecuta en una máquina física o virtual (por ejemplo, Gotas oceánicas digitales, Amazon EC2 y Máquinas virtuales de Azure), entonces puede crear un .env mientras está conectado al servidor y se ejecutará tal como se hace en su máquina local.

Si su aplicación se ejecuta en un contenedor Docker o un proveedor de plataforma como servicio como Heroku o Openshift, entonces podrá configurar variables de entorno sin tener que utilizar el .env archivo.

ReString, falla silenciosamente por lo que no afectará la ejecución 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 de Node.js, las variables de entorno están disponibles a través de process.env variable global. Podemos establecer las variables de entorno antes de ejecutar el node comando, o podemos usar el dotenv biblioteca que nos permite definir nuestras variables de entorno en una .env archivo.

los .env El archivo nunca debe estar en el repositorio de código fuente.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad