Introducción
Contenido
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.
Te puede interesar:Git: agregar todos los archivos a un repositorioPor 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.
Te puede interesar:Zsh contra BashVariables 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.
Te puede interesar:Introducción a BashPodrí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.