¿Qué son y cómo se usan las variables de entorno?

Uno de los temas que es sumamente importante de abordar para el desarrollo de software y parte de la seguridad que tenemos que tener en cuenta cuando trabajemos con código que guardemos en un repositorio en Internet, son las variables de entorno, así que en este post abordaremos qué son, para qué sirven y qué alternativas tenemos para usarlas.

Trabajar con el gestor de versiones Git, es una tecnología indispensable que debes saber utilizar para poder trabajar en la industria del desarrollo de software, este nos permite guardar las versiones de nuestro código, y cuando hablamos de nuestro código, es todo lo que escribamos, obviamente, de los archivos que seleccionemos, pero en general se guarda todo en un repositorio de Git, esto en un ambiente local, pero también tenemos herramientas como GitHub, GitLab o Bitbucket que nos permiten subir las versiones de nuestro código a Internet, compartir con otros desarrolladores y descargarlo desde prácticamente cualquier parte del mundo.

Logo de GitHub
Logo de GitHub
Logo de GitLab
Logo de GitLab
Logo de BitBucket
Bitbucket

Y este es la cuestión, todo el código que subamos a GitHub va a poder ser visto por cualquier persona, cuando el repositorio sea público o por el equipo de desarrollo cuando el repositorio sea privado, pero el punto es que el código va a estar disponible para que cualquier persona o pueda usar, pero esto incluye un problema, imagina que estamos desarrollando un proyecto backend y tenemos conectarnos a una base de datos, este simple hecho hace que si la URL, la contraseña y usuarios están en este código, es decir van a quedar expuestos estos datos en Internet

Esto crea un problema de seguridad gravísimo, ya que ningún usuario debería tener acceso a esa información, normalmente debería ser alguien del equipo que se encargue del despliegue de nuestras aplicaciones, que realizará la tarea de mantener seguras estas variables. Por lo que no deberíamos nunca subir esta información sensible a un repositorio.

Antes de continuar, si alguno de estos datos o la propia herramienta Git se te han hechos desconocidos te recomendamos tomar el curso de Git que tenemos en la Academia Hola Mundo

Logo de Git
Logo de Git

¿Qué son y que utilidad tienen las variables de entorno?

Lo que haríamos para evitar subir estos datos sería usar las variables de entorno, las cuales definidas y guardadas normalmente en nuestro equipo local o a través de herramientas que leerán lo el archivo .env, archivo en el cual se guardan estas variables.

El código debe ser escrito para utilizarlas, vamos a poner un ejemplo, en el que tengamos las variables con la base de datos, el usuario y la contraseña.

const database = https://baseDeDatosSuperSegura.com:4275
const databaseUser = chanchitofeliz
const databasePassword = contraseña

Como ves la contraseña del usuario «chanchito feliz» no es la más segura del mundo, pero eso no es el punto, si esto se encuentra guardado en tu repositorio, tenemos un problema.

Y esto no es todo, en algún momento trabajé en un proyecto donde tenían algunos de estos datos en el código, pero a alguien se le ocurrió borrarlos en enviar un nuevo commit, adivina que, gracias a que git guarda todos los cambios, esos datos aún se encontraban en el repositorio, por lo que si alguien quería acceder a estos no habría ningún problema para encontrarlos.

Esto es algo en lo que hay que tener mucho cuidado, pero ahora si vamos a ver que opciones tienes para lograr que tus aplicaciones funcionen, porque claro, si no tienes todos estos datos sería imposible acceder a la base de datos.

Vamos a ver entonces cómo podríamos hacer el mismo código, pero usando variables de entorno, primero en el lenguaje JavaScript:

const database = process.env.DATABASE
const databaseUser = process.env.DATABASE_USER
const databasePassword = process.env.DATABASE_PASSWORD

o en Python

import os

database = os.environ.get('DATABASE')
database_user = os.environ.get('DATABASE_USER')
database_password = os.environ.get('DATABASE_PASSWORD')

¿Pero de donde tomaran estos valores?

Las variables de entorno son guardadas en el sistema operativo, estas las podemos definir con la terminal de comandos, primero, vamos a ver un tema importante, identificar qué terminal de comandos estás usando.

Si estás usando Linux o MacOS no deberías tener mayor problema, ya que los comandos son los mismos y no debemos preocuparnos por eso, sin embargo, en Windows esto sí depende y debemos identificar nuestra terminal para saber qué comandos usar.

En nuestro post ¿Qué es una terminal de comandos y cuál utilizar para programar?, vimos las diferentes terminales de comandos que puedes elegir si utilizas Windows, las cuales eran CMD, PowerShell, Git Bash y WSL 2.


Si estás utilizando Git Bash y WSL 2 con una terminal Linux, usarás los mismos comandos que se utilizan en MacOs y Linux, mientras que CMD y PowerShell utilizando los de Windows, pero con unas cuantas diferencias entre ambas.

¿Cómo identificó mi terminal de comandos con VsCode?

Si estás utilizando VsCode al momento de abrir la terminal integrada, con el atajo:

ctrl + ñ o ctrl + `

Abrirás la terminal de comandos y puedes ver qué tipo de terminal estás usando, como en la siguiente imagen

Terminal de comandos usando zsh en VsCode
Terminal de comandos usando zsh en VsCode

En este caso, se trata de una terminal zsh en un equipo Windows usando WSL 2, esta terminal es una que utiliza comandos Linux.

La siguiente es una terminal Windows usando el intérprete de comandos PowerShell:

Terminal de comandos usando PowerShell en VsCode
Terminal de comandos usando PowerShell en VsCode

Y esta es una terminal Windows usando el intérprete de comandos CMD:

Terminal de comandos usando CMD en VsCode
Terminal de comandos usando CMD en VsCode

Si estás usando una terminal aparte de la que tiene por defecto el editor VsCode, normalmente habrás abierto la terminal buscando la aplicación CMD, powershell o la terminal por defecto que estás usando, por lo que deberías saber con esto y el nombre del software cuál es la terminal, pero si no das con ello te dejaré un par de comandos que podrás usar para identificar tu terminal:

Si, tu terminal es CMD podrías usar el comando:

echo %COMSPEC% , 

Con esto, la terminal te dará la ruta de la terminal y su archivo ejecutable cmd.exe:

Verificando si la terminal es CMD
Verificando si la terminal es CMD

Sí, tu terminal es PowerShell el comando:

echo $PSVersionTable.PSEdition  

Con el que vas a poder confirmar, aquí te saldrán dos opciones como resultado “Desktop” o “Core”, esto te dirá que utilizas PowerShell.

Verificando si la terminal es PowerShell
Verificando si la terminal es PowerShell

Y para terminales que usen comandos Linux es un tanto más fácil, con el comando:  

echo $0 

Y con este té saldrá la ruta de donde se está utilizando el recurso, podría salirte también la opción bash adicional a la zsh como yo la tengo configurada.

Verificando si la terminal usa comandos Linux
Verificando si la terminal usa comandos Linux

Como defino variables de entorno en mi terminal

Aqui te colocaré un par de ejemplos de cómo definir variables de entorno para un proyecto de Flask, en concreto la variable de entorno FLASK_APP, estos proyectos los puedes seguir en el curso Python: HTML, CSS, Flask y MySQL, vamos a continuar a ver los diferentes comandos que podemos usar para definirlas:

Terminales que usan comandos Linux

Para esta terminal tendremos que usar la siguiente sintaxis con el comando:

export =

En el caso de esta variable para flask tendremos que definirla de la siguiente manera:

export FLASK_APP=todo

Si queremos ver qué variables tenemos guardadas, vamos a usar el comando env, este comando nos dará la lista de variables de entorno que tiene nuestro sistema operativo guardadas, hasta el final de la lista normalmente veremos las que hayamos guardado nosotros con los comandos, pero si quieres ver una variable de entorno específica puedes usar:

echo $

Por ejemplo:

echo $FLASK_APP
Verificando el valor de la variable de entorno
Verificando el valor de la variable de entorno en terminales con comandos Linux

Si la variable existe veremos su valor, si esta no está guardada simplemente no veremos nada en la terminal después de este comando.

Terminales Powershell

Para la terminal Powershell, podremos guardar las variables de entorno con la siguiente sintaxis, aquí vamos a guardar la variable de entorno MI_VARIABLE, esta seria la sintaxis:

$env: =  

Y vamos a definir nuestro ejemplo asi:

$env:MI_VARIABLE = "valor"

Con el siguiente comando veremos si se guardó correctamente:

echo $env:MI_VARIABLE 

Si la variable fue guardada correctamente, veremos su valor en la consola

Verificando el valor de la variable de entorno en terminales con comandos PowerShell
Verificando el valor de la variable de entorno en terminales con comandos PowerShell

Terminales CMD

Por último, vamos a ver las terminales CMD, la sintaxis seria:

set MI_VARIABLE=mi_valor

Y se ven de esta manera:

echo %MI_VARIABLE%
Verificando el valor de la variable de entorno en terminales con comandos CMD
Verificando el valor de la variable de entorno en terminales con comandos CMD

Usando el archivo .env

Con lo anterior que hemos visto, podemos definir variables de entorno, sin embargo, definirlas de esta manera nos traerá un problema, y es que cada que cerremos nuestro entorno de desarrollo, en mi caso la terminal y el editor de texto, cuando necesite volver a usar el proyecto, tendré que definir todas las variables de entorno de nuevo, ya que su valor se guarda temporalmente en nuestro equipo.

Pero si quieres evitarte esto, podremos guardar todas estas variables en un archivo .env en la raiz de tu proyecto, de este archivo podremos leer todas las variables, haciendo uso de algún módulo/biblioteca externa de nuestro proyecto, el cual tendremos que instalar, en JS he usado a dotenv y en python a python-dotenv

Como mencionamos, por convención y ya es un hecho en muchas herramientas que utilizarás, que en el archivo .env es donde guardamos todas las variables de entorno y tiene normalmente esta estructura:

DATABASE=https://baseDeDatosSuperSegura.com
DATABASE_USER=chanchitofeliz
DATABASE_PASSWORD=contraseña

Este archivo, por supuesto, para que no aparezca en nuestro repositorio de Git con todos los valores, tendremos que agregarlo a nuestro archivo .gitignore. Pero tendremos un nuevo problema, los desarrolladores que trabajen con nosotros no tendrán estos valores por lo que el código podría no funcionar correctamente, ya que estas variables no existen.

Para esto tenemos que generar un nuevo archivo, este será lo podemos nombrar como: .env.example, hay algunas variaciones para nombrar a este archivo, pero lo común es verle con este nombre. Con este archivo lo que haremos es proporcionar a nuestro equipo un ejemplo de las variables que tienen que tener definidas para que el proyecto funcione, te dejaré un ejemplo de cómo podrías colocarlo, recuerda que tiene que ser una representación de los valores reales en caso de que sea un valor muy específico:

DATABASE=https://baseDeDatosChanchitoFeliz.com
DATABASE_USER=usuario
DATABASE_PASSWORD=1s23@d45f6

Aqui hemos visto los comandos y opciones que tenemos para definir y usar las variables de entorno, pero si quieres ver su uso en proyectos puedes optar por tomar los cursos:

Igualmente, hemos visto cómo definir variables de entorno con diferentes sistemas operativos en usando la terminal de comandos, de los más conocidos tenemos a Windows, MacOS y Linux, para poder ver las ventajas de usar cada uno también te dejaremos los post que tenemos sobre este tema:

Los comandos Linux son los que posiblemente encuentres en muchos más recursos que hay disponibles, por lo que si usas Windows, te dejaremos el link al curso gratuito de máquinas virtuales, para que aprendas a tener un entorno Linux corriendo dentro del sistema operativo Windows.


Igualmente te dejaremos el enlace a todos nuestros cursos de programación, los cuales los encontrarás disponibles en la academia Hola Mundo y puedes optar por adquirir los cursos de manera individual en el siguiente link: todos los cursos de Hola Mundo, si prefieres acceso a todo, también puedes elegir un plan de suscripción mensual o anual, o tambien puedes optar por cada curso de manera individual en Udemy.

Y esto ha sido todo de este post, si te ha encantado, ¡golpea al botón de me gusta!, dejanos un comentario, y para no perderte nada, no olvides suscribirte a este blog, seguirnos en todas las redes como Youtube, Twitter, Instagram y Tiktok, y por último, te invitamos a escuchar nuestra música «Hola Beats«, diseñada para ayudarte a concentrarte y acompañarte en tu aprendizaje o trabajo, la puedes encontrar en Spotify, Apple Music, Amazon Music, Youtube Music y Deezer.

¡Hasta la próxima!, y chao mundo

Gabriel Hernández

Soy desarrollador fullstack autodidacta y estudié administración en la universidad. Mi stack es principalmente con JavaScript, haciendo frontend con React y Next, y backend con Node y Express. Otras herramientas con las que he trabajado son Python para backend y Solidity para desarrollo de contratos inteligentes.

Comments (1)

Deja un comentario

Press ESC to close

Descubre más desde Hola Mundo

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo