Cómo distinguir entre distintos entornos donde se ejecuta una aplicación y cómo definir variables para cada uno de ellos.
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.
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.
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=3000CLAVE_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 .envrequire('dotenv').config()
// Acceder a las variables de entornoconst puerto = process.env.PUERTO || 3000const claveApi = process.env.CLAVE_API
// Utilizar las variables de entorno en la aplicaciónconsole.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.
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.