Gestionar variables de entorno con dotenv

Cómo distinguir entre distintos entornos donde se ejecuta una aplicación y cómo definir variables para cada uno de ellos

Sistema de coordenadas 2d

Introducción

Imagina que estás desarrollando una aplicación web y necesitas configurar distintas fuentes de datos como claves de API, conexiones de bases de datos, tokens de autenticación, etc. Por motivos de seguridad no nos interesará guardar estas configuraciones sensibles dentro de nuestro código y tal vez, ni siquiera queramos conectar con las mismas fuentes si estamos en un entorno local que si estamos ejecutando la aplicación en producción para el público. Es por eso que existen las variables de entorno: valores dinámicos que pueden ser accedidos por el sistema operativo o por el entorno de ejecución.

Al utilizar variables de entorno, podemos:

  • Mantener la portabilidad: Al separar la configuración de la aplicación de su código fuente, facilitamos la migración entre diferentes entornos y la colaboración entre equipos de desarrollo.

  • Mejorar la seguridad: Al evitar la exposición de información sensible en el código fuente, reducimos el riesgo de fugas de información y ataques maliciosos.

  • Facilitar la configuración: Cambiar la configuración de una aplicación en diferentes entornos es tan simple como modificar las variables de entorno correspondientes, sin necesidad de cambiar el código fuente.

Instalación de dotenv

Para simplificar la gestión de variables de entorno en aplicaciones Node.js, podemos utilizar la biblioteca dotenv. Esta biblioteca nos permite cargar automáticamente variables de entorno desde un archivo .env en el directorio raíz de nuestro proyecto durante el proceso de arranque de la aplicación.

Para instalar dotenv, simplemente ejecutamos el siguiente comando en la terminal dentro del directorio de nuestro proyecto:

npm install dotenv

o

yarn add dotenv

Una vez instalado, podemos comenzar a utilizarlo para cargar nuestras variables de entorno.

Ejemplo de una aplicación Node.js utilizando dotenv

Supongamos que tenemos una aplicación Node.js simple que necesita acceder a variables de entorno, como el puerto en el que se ejecutará el servidor o una clave de API. A continuación, vamos a ver cómo podemos integrar dotenv en nuestra aplicación.

Primero, creamos un archivo .env en el directorio raíz de nuestro proyecto. En este archivo, definimos nuestras variables de entorno en el formato NOMBRE_VARIABLE=valor.

PUERTO=3000
CLAVE_API=mi_clave_secreta

Luego, en nuestro archivo JavaScript principal, usualmente index.js o app.js, cargamos las variables de entorno utilizando dotenv antes de acceder a ellas.

// Importar dotenv y cargar variables de entorno desde .env
require('dotenv').config();

// Acceder a las variables de entorno
const puerto = process.env.PUERTO || 3000;
const claveApi = process.env.CLAVE_API;

// Utilizar las variables de entorno en la aplicación
console.log(`El servidor se está ejecutando en el puerto ${puerto}`);
console.log(`La clave de API es: ${claveApi}`);

Con esta configuración, nuestra aplicación Node.js podrá acceder a las variables de entorno definidas en el archivo .env, lo que nos brinda flexibilidad y seguridad en la gestión de la configuración de nuestra aplicación.

Varios entornos

Si tenemos varios entornos podemos crear un archivo para cada uno de ellos, por ejemplo:

.env.development
.env.preproduction
.env.production

Luego podemos llamar la aplicación con el parámetro NODE_ENV=entorno para que cargue el archivo adecuado al entorno:

NODE_ENV=production node app.js

Y luego dentro del script:

require('dotenv').config({ path: `.env.${process.env.NODE_ENV}` })

Como ves dotenv es una herramienta muy útil para usar distintas variables de entorno según lo que necesitemos.