Administrar variables de entorno en Node.js con dotenv

    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.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *