{"id":43798,"date":"2024-03-29T07:00:00","date_gmt":"2024-03-29T14:00:00","guid":{"rendered":"https:\/\/dhblog.dream.press\/blog\/?p=43798"},"modified":"2025-01-07T05:32:41","modified_gmt":"2025-01-07T13:32:41","slug":"variables-entorno-guia-principiantes","status":"publish","type":"post","link":"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/","title":{"rendered":"Qu\u00e9 Son las Variables de Entorno: Una Gu\u00eda Completa Para Principiantes"},"content":{"rendered":"\n<p>Las variables de entorno permiten configurar aplicaciones sin necesidad de cambiar el c\u00f3digo. Separan los datos externos de la l\u00f3gica de la aplicaci\u00f3n, lo cual puede resultar bastante misterioso para los desarrolladores novatos (incluso para algunos experimentados).<\/p>\n\n\n\n<p>A trav\u00e9s de esta gu\u00eda pr\u00e1ctica, levantaremos el velo alrededor de las variables de entorno para que puedas entender qu\u00e9 implican, por qu\u00e9 son importantes y c\u00f3mo aprovecharlas con confianza.<\/p>\n\n\n\n<p>Trae tu bebida favorita (y tal vez algunas galletas) porque estamos a punto de sumergirnos en ello. Vamos a desentra\u00f1ar los conceptos de variables de entorno desde cero.<\/p>\n\n\n\n<h2 id=\"h-que-son-las-variables-de-entorno\" class=\"wp-block-heading\"><strong>\u00bfQu\u00e9 Son las Variables de Entorno?<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"545\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/01-Analogia-variables-1-1024x545.jpg\" alt=\"\" class=\"wp-image-43816 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/01-Analogia-variables-1-1024x545.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/01-Analogia-variables-1-300x160.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/01-Analogia-variables-1-768x408.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/01-Analogia-variables-1-1536x817.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-Analogia-variables-1-600x319.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-Analogia-variables-1-1200x638.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-Analogia-variables-1-730x388.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-Analogia-variables-1-1460x777.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-Analogia-variables-1-784x417.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-Analogia-variables-1-1568x834.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-Analogia-variables-1-877x466.jpg.webp 877w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-Analogia-variables-1.jpg.webp 1600w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/545;\" \/><\/figure>\n\n\n\n<p>Las variables de entorno son valores nombrados din\u00e1micos que pueden afectar c\u00f3mo se comportan los procesos en ejecuci\u00f3n en una computadora. Algunas propiedades clave de las variables de entorno son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Nombradas:<\/strong> Tienen nombres descriptivos como <strong>APP_MODE<\/strong> y <strong>DB_URL<\/strong>.<\/li>\n\n\n\n<li><strong>Externas:<\/strong> Los valores se establecen fuera del c\u00f3digo de la aplicaci\u00f3n a trav\u00e9s de archivos, l\u00edneas de comandos y sistemas.<\/li>\n\n\n\n<li><strong>Din\u00e1micas:<\/strong> Pueden actualizar variables sin reiniciar aplicaciones.<\/li>\n\n\n\n<li><strong>Configuradas:<\/strong> El c\u00f3digo depende de variables, pero no las define.<\/li>\n\n\n\n<li><strong>Desacopladas:<\/strong> No es necesario modificar las configuraciones de c\u00f3digo una vez que se establecen las variables.<\/li>\n<\/ul>\n\n\n\n<p>Aqu\u00ed tienes una analog\u00eda. Imagina que est\u00e1s siguiendo una receta de galletas con chispas de chocolate. La receta podr\u00eda decir:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregar 1 taza de az\u00facar<\/li>\n\n\n\n<li>Agregar 1 barra de mantequilla ablandada<\/li>\n\n\n\n<li>Agregar 2 huevos<\/li>\n<\/ul>\n\n\n\n<p>En lugar de esos valores codificados directamente, podr\u00edas usar variables de entorno en su lugar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregar $AZ\u00daCAR taza de az\u00facar<\/li>\n\n\n\n<li>Agregar $MANTEQUILLA barras de mantequilla ablandada<\/li>\n\n\n\n<li>Agregar $HUEVOS huevos<\/li>\n<\/ul>\n\n\n\n<p>Antes de hacer las galletas, configurar\u00edas esos nombres de variables de entorno con valores de tu elecci\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-white-color has-black-background-color has-text-color has-background\"><tbody><tr><td>AZUCAR=1                                                         <br>MANTEQUILLA=1                                                 <br>HUEVOS=2                                                   <\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Entonces, al seguir la receta, tus ingredientes se resolver\u00edan como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agregar 1 taza de az\u00facar<\/li>\n\n\n\n<li>Agregar 1 barra de mantequilla ablandada<\/li>\n\n\n\n<li>Agregar 2 huevos<\/li>\n<\/ul>\n\n\n\n<p>Esto te permite configurar la receta de galletas sin cambiar el c\u00f3digo de la receta.<\/p>\n\n\n\n<p>El mismo concepto se aplica a la inform\u00e1tica y al desarrollo. Las variables de entorno te permiten alterar el entorno en el que se ejecuta un proceso sin cambiar el c\u00f3digo subyacente. Aqu\u00ed tienes algunos ejemplos comunes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Establecer el entorno como &#8220;desarrollo&#8221; o &#8220;producci\u00f3n&#8221;<\/li>\n\n\n\n<li>Configurar claves de API para servicios externos<\/li>\n\n\n\n<li>Pasar claves secretas o credenciales<\/li>\n\n\n\n<li>Activar o desactivar ciertas caracter\u00edsticas<\/li>\n<\/ul>\n\n\n\n<p>Las variables de entorno proporcionan una gran flexibilidad. Puedes implementar el mismo c\u00f3digo en m\u00faltiples entornos sin cambiar el c\u00f3digo en s\u00ed mismo. Pero vamos a entender m\u00e1s a fondo por qu\u00e9 son valiosas.<\/p>\n\n\n\n<h2 id=\"h-por-que-son-valiosas-las-variables-de-entorno\" class=\"wp-block-heading\"><strong>\u00bfPor Qu\u00e9 Son Valiosas las Variables de Entorno?<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"672\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/02-Variables-entorno-valiosas-1024x672.jpg\" alt=\"Razones por las que una variable de entorno es importante\" class=\"wp-image-43807 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/02-Variables-entorno-valiosas-1024x672.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/02-Variables-entorno-valiosas-300x197.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/02-Variables-entorno-valiosas-768x504.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/02-Variables-entorno-valiosas-1536x1008.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Variables-entorno-valiosas-600x394.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Variables-entorno-valiosas-1200x788.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Variables-entorno-valiosas-730x479.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Variables-entorno-valiosas-1460x958.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Variables-entorno-valiosas-784x515.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Variables-entorno-valiosas-1568x1029.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Variables-entorno-valiosas-877x576.jpg.webp 877w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Variables-entorno-valiosas.jpg.webp 1600w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/672;\" \/><\/figure>\n\n\n\n<p>Considera las variables de entorno como perillas de aplicaci\u00f3n utilizadas para ajustar preferencias. Exploraremos excelentes casos de uso en breve.<\/p>\n\n\n\n<p>\u00a1Solidifiquemos la intuici\u00f3n sobre por qu\u00e9 las variables de entorno son importantes!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-razon-1-separan-el-codigo-de-la-aplicacion-de-las-configuraciones\"><strong>Raz\u00f3n #1: Separan el C\u00f3digo de la Aplicaci\u00f3n de las Configuraciones<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"454\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/03-Separacion-codigo-cofinguraciones-1024x454.jpg\" alt=\" Separan el C\u00f3digo de la Aplicaci\u00f3n de las Configuraciones\" class=\"wp-image-43808 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/03-Separacion-codigo-cofinguraciones-1024x454.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/03-Separacion-codigo-cofinguraciones-300x133.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/03-Separacion-codigo-cofinguraciones-768x341.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/03-Separacion-codigo-cofinguraciones-1536x682.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-Separacion-codigo-cofinguraciones-600x266.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-Separacion-codigo-cofinguraciones-1200x533.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-Separacion-codigo-cofinguraciones-730x324.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-Separacion-codigo-cofinguraciones-1460x648.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-Separacion-codigo-cofinguraciones-784x348.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-Separacion-codigo-cofinguraciones-1568x696.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-Separacion-codigo-cofinguraciones-877x389.jpg.webp 877w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-Separacion-codigo-cofinguraciones.jpg.webp 1600w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/454;\" \/><\/figure>\n\n\n\n<p>Codificar directamente configuraciones y credenciales en tu c\u00f3digo puede causar todo tipo de problemas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Commit accidental al control de origen<\/li>\n\n\n\n<li>Reconstrucci\u00f3n y redespliegue de c\u00f3digo solo para cambiar un valor<\/li>\n\n\n\n<li>Problemas de configuraci\u00f3n al promover a trav\u00e9s de entornos<\/li>\n<\/ul>\n\n\n\n<p>Tambi\u00e9n conduce a un c\u00f3digo desordenado:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-regular\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>import os<br><br># Hard-coded configuration<br>DB_USER = &#8216;appuser&#8217;<br>DB_PASS = &#8216;password123&#8217;<br>DB_HOST = &#8216;localhost&#8217;<br>DB_NAME = &#8216;myappdb&#8217;<br><br>def connect_to_db():<br>&nbsp; print(f&#8221;Connecting to {DB_USER}:{DB_PASS}@{DB_HOST}\/{DB_NAME}&#8221;)&nbsp;                                                <br><br>connect_to_db()                                         <\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Esto enreda la l\u00f3gica del negocio con detalles de configuraci\u00f3n. El acoplamiento estrecho hace que el mantenimiento sea arduo con el tiempo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Los cambios requieren modificar el c\u00f3digo fuente<\/li>\n\n\n\n<li>Riesgo de filtrar secretos en el control de origen<\/li>\n<\/ul>\n\n\n\n<p>El uso de variables de entorno reduce estos problemas. Por ejemplo, puedes configurar las variables de entorno DB_USER y DB_NAME.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td># .env file<br>DB_USER=appuser<br>DB_PASS=password123&nbsp;<br>DB_HOST=localhost<br>DB_NAME=myappdb<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>El c\u00f3digo de la aplicaci\u00f3n puede acceder a las variables de entorno cuando sea necesario, manteniendo el c\u00f3digo limpio y simple.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>import os<br><br># Load config from environment<br>DB_USER = os.environ[&#8216;DB_USER&#8217;]<br>DB_PASS = os.environ[&#8216;DB_PASS&#8217;]<br>DB_HOST = os.environ[&#8216;DB_HOST&#8217;]<br>DB_NAME = os.environ[&#8216;DB_NAME&#8217;]<br><br>def connect_to_db():<br>&nbsp; print(f&#8221;Connecting to {DB_USER}:{DB_PASS}@{DB_HOST}\/{DB_NAME}&#8221;)<br>&nbsp;<br>connect_to_db()<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Las variables de entorno separan de manera limpia la configuraci\u00f3n del c\u00f3digo, manteniendo los valores sensibles abstractos en el entorno.<\/p>\n\n\n\n<p>Puedes implementar el mismo c\u00f3digo desde desarrollo hasta producci\u00f3n sin cambiar nada. Las variables de entorno pueden diferir entre entornos sin afectar en absoluto al c\u00f3digo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-razon-2-simplifican-la-configuracion-de-las-aplicaciones\"><strong>Raz\u00f3n #2: Simplifican la Configuraci\u00f3n de las Aplicaciones<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"497\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/04-Simplificacion-configuracion-aplicaciones-1024x497.jpg\" alt=\"Simplifican la Configuraci\u00f3n de las Aplicaciones\" class=\"wp-image-43809 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/04-Simplificacion-configuracion-aplicaciones-1024x497.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/04-Simplificacion-configuracion-aplicaciones-300x146.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/04-Simplificacion-configuracion-aplicaciones-768x373.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/04-Simplificacion-configuracion-aplicaciones-1536x746.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-Simplificacion-configuracion-aplicaciones-600x291.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-Simplificacion-configuracion-aplicaciones-1200x583.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-Simplificacion-configuracion-aplicaciones-730x355.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-Simplificacion-configuracion-aplicaciones-1460x709.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-Simplificacion-configuracion-aplicaciones-784x381.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-Simplificacion-configuracion-aplicaciones-1568x761.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-Simplificacion-configuracion-aplicaciones-877x426.jpg.webp 877w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-Simplificacion-configuracion-aplicaciones.jpg.webp 1600w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/497;\" \/><\/figure>\n\n\n\n<p>Las variables de entorno simplifican el ajuste de las configuraciones sin necesidad de modificar el c\u00f3digo:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td># .env file:<br>DEBUG=true<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>As\u00ed es como podr\u00edamos usarlo dentro del archivo de script:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td># Script <strong>content<\/strong>:<br>import os<br><br>DEBUG = os.environ.get(&#8216;DEBUG&#8217;) == &#8216;true&#8217;<br><br>if <strong>DEBUG<\/strong>:<br>&nbsp; print(&#8220;In DEBUG mode&#8221;)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Cambiar el modo de depuraci\u00f3n solo requiere actualizar el archivo .env, sin necesidad de cambiar el c\u00f3digo, reconstruir o implementar de nuevo. Las variables de entorno tambi\u00e9n ayudan a implementar de manera fluida a trav\u00e9s de los entornos:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>import os<br><br># Retrieve environment variable to determine the current environment (production or staging)<br>current_env = os.getenv(&#8216;APP_ENV&#8217;, &#8216;staging&#8217;)&nbsp; # Default to &#8216;staging&#8217; if not set<br><br># Production API key<br>PROD_API_KEY = os.environ[&#8216;PROD_API_KEY&#8217;]<br><br># Staging API key<br>STG_API_KEY = os.environ[&#8216;STG_API_KEY&#8217;]<br><br># Logic that sets api_key based on the current environment<br>if current_env == &#8216;production&#8217;:<br>&nbsp; &nbsp; api_key = PROD_API_KEY<br>else:<br>&nbsp; &nbsp; api_key = STG_API_KEY<br><br># Initialize API client with the appropriate API key<br>api = ApiClient(api_key)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>El mismo c\u00f3digo puede usar claves API separadas para producci\u00f3n versus preparaci\u00f3n sin realizar cambios.<\/p>\n\n\n\n<p>Y por \u00faltimo, permiten alternar funcionalidades sin nuevas implementaciones:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>NEW_FEATURE = os.environ[&#8216;NEW_FEATURE&#8217;] == &#8216;true&#8217;<br><br>if NEW_FEATURE:<br>&nbsp; enableNewFeature()<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Cambiar la variable NEW_FEATURE activa la funcionalidad instant\u00e1neamente dentro de nuestro c\u00f3digo. La interfaz para actualizar configuraciones depende de los sistemas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Las plataformas en la <a href=\"https:\/\/www.dreamhost.com\/blog\/es\/entornos-desarrollo-en-la-nube-guia-definitiva\/\" target=\"_blank\" rel=\"noopener\">nube<\/a> como Heroku utilizan paneles web<\/li>\n\n\n\n<li>Los servidores utilizan herramientas de comando del sistema operativo<\/li>\n\n\n\n<li>El desarrollo local puede utilizar archivos .env<\/li>\n<\/ul>\n\n\n\n<p>Las variables de entorno son beneficiosas al crear aplicaciones, permitiendo a los usuarios configurar elementos seg\u00fan sus requisitos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-razon-3-ayudan-a-gestionar-secretos-y-credenciales\"><strong>Raz\u00f3n #3: Ayudan a Gestionar Secretos y Credenciales<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"497\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/05-Administran-secretos-credenciales-1024x497.jpg\" alt=\"Ayudan a Gestionar Secretos y Credenciales\n\" class=\"wp-image-43810 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/05-Administran-secretos-credenciales-1024x497.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/05-Administran-secretos-credenciales-300x146.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/05-Administran-secretos-credenciales-768x373.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/05-Administran-secretos-credenciales-1536x746.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-Administran-secretos-credenciales-600x291.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-Administran-secretos-credenciales-1200x583.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-Administran-secretos-credenciales-730x355.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-Administran-secretos-credenciales-1460x709.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-Administran-secretos-credenciales-784x381.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-Administran-secretos-credenciales-1568x761.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-Administran-secretos-credenciales-877x426.jpg.webp 877w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-Administran-secretos-credenciales.jpg.webp 1600w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/497;\" \/><\/figure>\n\n\n\n<p>Incluir secretos como claves API, contrase\u00f1as y claves privadas directamente en el c\u00f3digo fuente plantea <a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/es\/consejos-seguridad-nube\/\" rel=\"noopener\">riesgos de seguridad<\/a> sustanciales:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td># Avoid exposing secrets in code!<br>STRIPE_KEY = &#8216;sk_live_1234abc&#8217;<br>DB_PASSWORD = &#8216;password123&#8217;<br><br>stripe.api_key = STRIPE_KEY<br>db.connect(DB_PASSWORD)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u00a1Esos credenciales ahora est\u00e1n expuestos si este c\u00f3digo se compromete en un <a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/es\/como-usar-wordpress-con-github\/\" rel=\"noopener\">repositorio p\u00fablico de GitHub<\/a>!<\/p>\n\n\n\n<p>Las variables de entorno evitan la fuga al externalizar los secretos:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>import os<br><br>STRIPE_KEY = os.environ.get(&#8216;STRIPE_KEY&#8217;)&nbsp;<br>DB_PASS = os.environ.get(&#8216;DB_PASS&#8217;) &nbsp;<br><br>stripe.api_key = STRIPE_KEY&nbsp;<br>db.connect(DB_PASS)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Los valores de los secretos reales se establecen en un archivo .env local.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td># .env file<br><br>STRIPE_KEY=sk_live_1234abc<br>DB_PASS=password123<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>No olvides agregar al archivo .gitignore el archivo .env para mantener los secretos fuera del control de origen. Esto implica definir el archivo .env en un archivo .gitignore en cualquier directorio ra\u00edz del repositorio, lo que le indica a git que ignore el archivo durante la creaci\u00f3n de confirmaciones.<\/p>\n\n\n\n<p>Esto separa las definiciones de secretos del c\u00f3digo de la aplicaci\u00f3n, carg\u00e1ndolos de manera segura desde entornos protegidos durante el tiempo de ejecuci\u00f3n. El riesgo de exponer accidentalmente credenciales se reduce dr\u00e1sticamente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-razon-4-promueven-la-consistencia\"><strong>Raz\u00f3n #4: Promueven la Consistencia<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"497\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/06-Promueven-consistencia-1024x497.jpg\" alt=\"Las variables de entorno Promueven la Consistencia\" class=\"wp-image-43811 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/06-Promueven-consistencia-1024x497.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/06-Promueven-consistencia-300x146.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/06-Promueven-consistencia-768x373.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/06-Promueven-consistencia-1536x746.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-Promueven-consistencia-600x291.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-Promueven-consistencia-1200x583.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-Promueven-consistencia-730x355.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-Promueven-consistencia-1460x709.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-Promueven-consistencia-784x381.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-Promueven-consistencia-1568x761.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-Promueven-consistencia-877x426.jpg.webp 877w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-Promueven-consistencia.jpg.webp 1600w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/497;\" \/><\/figure>\n\n\n\n<p>Imagina tener diferentes archivos de configuraci\u00f3n para los entornos de desarrollo, QA y producci\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a1fe\"><tbody><tr><td># Development<br>DB_HOST = &#8216;localhost&#8217;<br>DB_NAME = &#8216;appdb_dev&#8217;<br><br># Production<br>DB_HOST = &#8216;db.myapp.com&#8217;<br>DB_NAME = &#8216;appdb_prod&#8217;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Esta discrepancia introduce errores sutiles que son dif\u00edciles de detectar. El c\u00f3digo que funciona perfectamente en desarrollo podr\u00eda romperse repentinamente en producci\u00f3n debido a configuraciones desiguales.<\/p>\n\n\n\n<p>Las variables de entorno resuelven esto al centralizar la configuraci\u00f3n en un solo lugar:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>DB_HOST=db.myapp.comDB_NAME=appdb_prod<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Ahora, las mismas variables se utilizan de manera consistente en todos los entornos. Ya no tienes que preocuparte por configuraciones aleatorias o incorrectas que se activen.<\/p>\n\n\n\n<p><strong>El c\u00f3digo de la aplicaci\u00f3n simplemente hace referencia a las variables:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>import os<br><br>db_host = os.environ[&#8216;DB_HOST&#8217;]<br>db_name = os.environ[&#8216;DB_NAME&#8217;]<br><br>db.connect(db_host, db_name)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Ya sea que la aplicaci\u00f3n se ejecute localmente o en un servidor de producci\u00f3n, siempre utiliza el host y el nombre de la base de datos correctos.<\/p>\n\n\n\n<p>Esta uniformidad reduce los errores, mejora la previsibilidad y hace que la aplicaci\u00f3n sea m\u00e1s robusta en general. Los desarrolladores pueden tener la confianza de que el c\u00f3digo se comportar\u00e1 de manera id\u00e9ntica en cada entorno.<\/p>\n\n\n\n<div class=\"article-newsletter article-newsletter--gradient\">\n\n\n<h2>Get Content Delivered Straight to Your Inbox<\/h2><p>Subscribe now to receive all the latest updates, delivered directly to your inbox.<\/p><form class=\"nwsl-form\" id=\"newsletter_block_\" novalidate><div class=\"messages\"><\/div><div class=\"form-group\"><label for=\"input_newsletter_block_\"><input type=\"email\"name=\"email\"id=\"input_newsletter_block_\"placeholder=\"Enter your email address\"novalidatedisabled=\"disabled\"\/><\/label><button type=\"submit\"class=\"btn btn--brand\"disabled=\"disabled\"><span>Sign Me Up!<\/span><svg width=\"21\" height=\"14\" viewBox=\"0 0 21 14\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<path d=\"M13.8523 0.42524L12.9323 1.34521C12.7095 1.56801 12.7132 1.9304 12.9404 2.14865L16.7241 5.7823H0.5625C0.251859 5.7823 0 6.03416 0 6.3448V7.6573C0 7.96794 0.251859 8.2198 0.5625 8.2198H16.7241L12.9405 11.8535C12.7132 12.0717 12.7095 12.4341 12.9323 12.6569L13.8523 13.5769C14.072 13.7965 14.4281 13.7965 14.6478 13.5769L20.8259 7.39879C21.0456 7.17913 21.0456 6.82298 20.8259 6.60327L14.6477 0.42524C14.4281 0.205584 14.0719 0.205584 13.8523 0.42524Z\" fill=\"white\"\/>\n<\/svg>\n<\/button><\/div><\/form><\/div>\n\n\n<h2 id=\"h-como-puedes-definir-variables-de-entorno\" class=\"wp-block-heading\"><strong>C\u00f3mo Puedes Definir Variables de Entorno<\/strong><\/h2>\n\n\n\n<p>Las variables de entorno pueden definirse en varios lugares, lo que permite flexibilidad para establecerlas y acceder a ellas en todos los procesos y sistemas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-1-variables-de-entorno-del-sistema-operativo\"><strong>1. Variables de Entorno del Sistema Operativo<\/strong><\/h3>\n\n\n\n<p>La mayor\u00eda de los sistemas operativos proporcionan mecanismos integrados para definir variables globales. Esto hace que las variables sean accesibles en todo el sistema para todos los usuarios, aplicaciones, etc.<\/p>\n\n\n\n<p>En sistemas Linux\/Unix, las variables pueden definirse en scripts de inicio de shell.<\/p>\n\n\n\n<p>Por ejemplo, <strong>~\/.bashrc<\/strong> se puede utilizar para establecer variables a nivel de usuario, mientras que <strong>\/etc\/environment<\/strong> es para variables a nivel de sistema que todos los usuarios pueden acceder.<\/p>\n\n\n\n<p>Las variables tambi\u00e9n pueden establecerse en l\u00ednea antes de ejecutar comandos utilizando el comando export o directamente a trav\u00e9s del comando env en bash:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td># In ~\/.bashrc<br>export DB_URL=localhost<br>export APP_PORT=3000<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#009ef9\"><tbody><tr><td># In \/etc\/environment<br>DB_HOST=localhost<br>DB_NAME=mydatabase<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Las variables tambi\u00e9n pueden establecerse en l\u00ednea antes de ejecutar comandos:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#009ffb\"><tbody><tr><td>export TOKEN=abcdef<br>python app.py<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Definir variables a nivel del sistema operativo las hace globalmente disponibles, lo cual es bastante \u00fatil cuando quieres ejecutar la aplicaci\u00f3n sin depender de valores internos.<\/p>\n\n\n\n<p>Tambi\u00e9n puedes hacer referencia a las variables definidas en scripts o argumentos de l\u00ednea de comandos.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#009ffb\"><tbody><tr><td>python app.py &#8211;db-name $DB_NAME &#8211;db-host $DB_HOST &#8211;batch-size $BATCH_SIZE<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-2-definicion-de-variables-de-entorno-en-el-codigo-de-la-aplicacion\"><strong>2. Definici\u00f3n de Variables de Entorno en el C\u00f3digo de la Aplicaci\u00f3n<\/strong><\/h3>\n\n\n\n<p>Adem\u00e1s de las variables a nivel del sistema operativo, las variables de entorno pueden definirse y accederse directamente dentro del c\u00f3digo de la aplicaci\u00f3n mientras se ejecuta.<\/p>\n\n\n\n<p>El diccionario <strong>os.environ<\/strong> en Python contiene todas las variables de entorno actualmente definidas. Podemos establecer nuevas simplemente agregando pares de clave-valor:<\/p>\n\n\n\n<p>Las variables de entorno tambi\u00e9n pueden definirse y accederse directamente dentro del c\u00f3digo de la aplicaci\u00f3n. En Python, el diccionario os.environ contiene todas las variables de entorno definidas:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>import os<br>os.environ[&#8220;API_KEY&#8221;] = &#8220;123456&#8221;<br>api_key = os.environ.get(&#8220;API_KEY&#8221;)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Entonces, el diccionario os.environ permite establecer y obtener din\u00e1micamente variables de entorno desde el c\u00f3digo Python.<\/p>\n\n\n\n<p>La mayor\u00eda de los lenguajes vienen con sus bibliotecas, ofreciendo acceso a las variables de entorno durante la ejecuci\u00f3n.<\/p>\n\n\n\n<p>Tambi\u00e9n puedes usar frameworks como Express, Django y Laravel para tener integraciones m\u00e1s profundas, como la carga autom\u00e1tica de archivos .env que contienen variables de entorno.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-3-creacion-de-archivos-de-configuracion-local-para-variables-de-entorno\"><strong>3. Creaci\u00f3n de Archivos de Configuraci\u00f3n Local para Variables de Entorno<\/strong><\/h3>\n\n\n\n<p>Adem\u00e1s de las variables a nivel del sistema, las variables de entorno pueden cargarse desde archivos de configuraci\u00f3n locales de una aplicaci\u00f3n. Esto mantiene los detalles de configuraci\u00f3n separados del c\u00f3digo, incluso para el desarrollo y prueba locales.<\/p>\n\n\n\n<p>Algunos enfoques populares:<\/p>\n\n\n\n<p><strong>Archivos .env<\/strong><\/p>\n\n\n\n<p>El formato de archivo .env, popularizado por Node.js, proporciona una forma conveniente de especificar variables de entorno en un formato clave-valor:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td># .env<br>DB_URL=localhost<br>API_KEY=123456<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Frameworks web como Django y Laravel cargan autom\u00e1ticamente variables definidas en archivos .env en el entorno de la aplicaci\u00f3n. Para otros lenguajes como Python, bibliotecas como python-dotenv se encargan de importar archivos .env:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>from dotenv import load_dotenv<br>load_dotenv() # Loads .env variables<br><br>print(os.environ[&#8216;DB_URL&#8217;]) # localhost<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>El beneficio de usar archivos .env es que mantienen la configuraci\u00f3n limpia y separada sin hacer cambios en el c\u00f3digo.<\/p>\n\n\n\n<p><strong>Archivos de Configuraci\u00f3n JSON<\/strong><\/p>\n\n\n\n<p>Para necesidades de configuraci\u00f3n m\u00e1s complejas que involucren m\u00faltiples variables de entorno, usar archivos JSON o YAML ayuda a organizar las variables juntas:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>\/\/ config.json<br>{<br>&nbsp; &#8220;api_url&#8221;: &#8220;https:\/\/api.example.com&#8221;,<br>&nbsp; &#8220;api_key&#8221;: &#8220;123456&#8221;,<br>&nbsp; &#8220;port&#8221;: 3000<br>}<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>El c\u00f3digo de la aplicaci\u00f3n puede cargar r\u00e1pidamente estos datos JSON como un diccionario para acceder a las variables configuradas:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>import json<br><br>config = json.load(&#8216;config.json&#8217;)&nbsp;<br><br>api_url = config[&#8216;api_url&#8217;]<br>api_key = config[&#8216;api_key&#8217;]<br>port = config[&#8216;port&#8217;] # 3000<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Esto evita archivos .env desordenados cuando se trata con m\u00faltiples configuraciones de aplicaciones.<\/p>\n\n\n\n<h2 id=\"h-como-acceder-a-las-variables-de-entorno-en-diferentes-lenguajes-de-programacion\" class=\"wp-block-heading\"><strong>\u00bfC\u00f3mo Acceder a las Variables de Entorno en Diferentes Lenguajes de Programaci\u00f3n?<\/strong><\/h2>\n\n\n\n<p>Sin importar c\u00f3mo elijamos definir las variables de entorno, nuestras aplicaciones necesitan una forma consistente de buscar valores durante la ejecuci\u00f3n.<\/p>\n\n\n\n<p>Si bien existen varias formas de definir variables de entorno, el c\u00f3digo de la aplicaci\u00f3n necesita una manera est\u00e1ndar de acceder a ellas durante la ejecuci\u00f3n, independientemente del lenguaje. Aqu\u00ed hay una descripci\u00f3n general de las t\u00e9cnicas para acceder a las variables de entorno en diferentes lenguajes de programaci\u00f3n populares:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-python\"><strong>Python<\/strong><\/h3>\n\n\n\n<p>Python proporciona el diccionario os.environ para acceder a las variables de entorno definidas:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>import os<br><br>db = os.environ.get(&#8216;DB_NAME&#8217;)<br><br>print(db)&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Podemos obtener una variable usando os.environ.get(), que devuelve None si no est\u00e1 definida. O acceder directamente a trav\u00e9s de os.environ(), lo que generar\u00e1 un KeyError si no est\u00e1 presente.<\/p>\n\n\n\n<p>M\u00e9todos adicionales como os.getenv() y os.environ.get() permiten especificar valores predeterminados si no est\u00e1n definidos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-javascript-node-js\"><strong>JavaScript (Node.js)<\/strong><\/h3>\n\n\n\n<p>En el c\u00f3digo JavaScript de <a target=\"_blank\" href=\"http:\/\/node.js\" rel=\"noopener\">Node.js<\/a>, las variables de entorno est\u00e1n disponibles en el objeto global process.env:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>\/\/ Get env var<br>const db = process.env.DB_NAME;<br><br>console.log(db);<br><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Si no est\u00e1 definido, process.env contendr\u00e1 undefined. Tambi\u00e9n podemos proporcionar valores predeterminados como:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>const db = process.env.DB_NAME || &#8216;defaultdb&#8217;;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-ruby\"><strong>Ruby<\/strong><\/h3>\n\n\n\n<p>Las aplicaciones Ruby acceden a las variables de entorno a trav\u00e9s del hash ENV:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td># Access variable<br>db = ENV[&#8216;DB_NAME&#8217;]&nbsp;<br><br>puts db<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Tambi\u00e9n podemos pasar un valor predeterminado si la clave deseada no existe:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>db = ENV.fetch(&#8216;DB_NAME&#8217;, &#8216;defaultdb&#8217;)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-php\"><strong>PHP<\/strong><\/h3>\n\n\n\n<p>PHP proporciona m\u00e9todos globales <strong>getenv(), $_ENV y $_SERVER<\/strong> para acceder a las variables de entorno:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>\/\/ Get env var<br>$db_name = getenv(&#8216;DB_NAME&#8217;);<br><br>\/\/ Or access $_ENV or $_SERVER arrays<br>$db_name = $_ENV[&#8216;DB_NAME&#8217;];&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Dependiendo de la fuente de la variable, pueden estar disponibles en diferentes globales.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-java\"><strong>Java<\/strong><\/h3>\n\n\n\n<p>En Java, el m\u00e9todo <strong>System.getenv()<\/strong> devuelve variables de entorno que se pueden acceder:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-vivid-cyan-blue-color has-black-background-color has-text-color has-background\"><tbody><tr><td>String dbName = System.getenv(&#8220;DB_NAME&#8221;);&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Esto permite el acceso a variables definidas a nivel del sistema de forma global en Java.<\/p>\n\n\n\n<p>Por ahora, algunas mejores pr\u00e1cticas en torno a la higiene de las variables de entorno.<\/p>\n\n\n\n<h2 id=\"h-guia-de-seguridad-de-las-variables-de-entorno\" class=\"wp-block-heading\"><strong>Gu\u00eda de Seguridad de las Variables de Entorno<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"512\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/07-Variables-de-entorno-1024x512.jpg\" alt=\"Gu\u00eda de Seguridad de las Variables de Entorno\" class=\"wp-image-43812 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/07-Variables-de-entorno-1024x512.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/07-Variables-de-entorno-300x150.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/07-Variables-de-entorno-768x384.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/07-Variables-de-entorno-1536x768.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Variables-de-entorno-600x300.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Variables-de-entorno-1200x600.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Variables-de-entorno-730x365.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Variables-de-entorno-1460x730.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Variables-de-entorno-784x392.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Variables-de-entorno-1568x784.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Variables-de-entorno-877x439.jpg.webp 877w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Variables-de-entorno.jpg.webp 1600w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/512;\" \/><\/figure>\n\n\n\n<p>Cuando se trata de gestionar las variables de entorno de forma segura, debemos tener en cuenta varias mejores pr\u00e1cticas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-nunca-almacenes-informacion-sensible-en-el-codigo\"><strong>Nunca Almacenes Informaci\u00f3n Sensible en el C\u00f3digo<\/strong><\/h3>\n\n\n\n<p>Primero y m\u00e1s importante, nunca almacenes informaci\u00f3n sensible como contrase\u00f1as, claves de API o tokens directamente en tu c\u00f3digo.<\/p>\n\n\n\n<p>Puede ser tentador simplemente codificar una contrase\u00f1a de base de datos o una clave de cifrado en tu c\u00f3digo fuente para un acceso r\u00e1pido, \u00a1pero resiste esa tentaci\u00f3n!<\/p>\n\n\n\n<p>Si accidentalmente confirmas ese c\u00f3digo en un repositorio p\u00fablico en GitHub, b\u00e1sicamente est\u00e1s difundiendo tus secretos al mundo entero. Imagina si un hacker obtuviera tus credenciales de base de datos de producci\u00f3n solo porque estaban en texto plano en tu base de c\u00f3digo. Pensamiento aterrador, \u00bfverdad?<\/p>\n\n\n\n<p>En su lugar, siempre utiliza variables de entorno para almacenar cualquier tipo de configuraci\u00f3n sensible. Mant\u00e9n tus secretos en un lugar seguro como un archivo .env o una herramienta de gesti\u00f3n de secretos, y haz referencia a ellos en tu c\u00f3digo mediante variables de entorno. Por ejemplo, en lugar de hacer algo como esto en tu c\u00f3digo Python:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>db_password = &#8220;supers3cr3tpassw0rd&#8221;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Almacenar\u00edas esa contrase\u00f1a en una variable de entorno de esta manera:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td># .env file<br>DB_PASSWORD=supers3cr3tpassw0rd<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Y luego acceder\u00edas a ella en tu c\u00f3digo as\u00ed:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td>import os<br>db_password = os.environ.get(&#8216;DB_PASSWORD&#8217;)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>De esta manera, tus secretos a\u00fan est\u00e1n seguros, incluso si tu c\u00f3digo fuente se ve comprometido. Las variables de entorno act\u00faan como una capa de abstracci\u00f3n segura.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-usa-variables-especificas-del-entorno\"><strong>Usa Variables Espec\u00edficas del Entorno<\/strong><\/h3>\n\n\n\n<p>Otra pr\u00e1ctica es usar diferentes variables de entorno para cada entorno de la aplicaci\u00f3n, como desarrollo, preproducci\u00f3n y producci\u00f3n.<\/p>\n\n\n\n<p>No querr\u00e1s conectarte accidentalmente a tu base de datos de producci\u00f3n mientras desarrollas localmente solo porque olvidaste actualizar una variable de configuraci\u00f3n. Nomina tus variables de entorno para cada entorno:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-black-background-color has-text-color has-background\" style=\"color:#00a2ff\"><tbody><tr><td># Dev<br>DEV_API_KEY=abc123<br>DEV_DB_URL=localhost<br><br># Production<br>PROD_API_KEY=xyz789<br>PROD_DB_URL=proddb.amazonaws.com<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Luego, haz referencia a las variables apropiadas en tu c\u00f3digo dependiendo del entorno actual. Muchos frameworks como Rails proporcionan archivos de configuraci\u00f3n espec\u00edficos del entorno para este prop\u00f3sito.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-manten-los-secretos-fuera-del-control-de-versiones\"><strong>Mant\u00e9n los Secretos Fuera del Control de Versiones<\/strong><\/h3>\n\n\n\n<p>Tambi\u00e9n es crucial mantener tus archivos <strong>.env<\/strong> y de configuraci\u00f3n que contienen secretos fuera del control de versiones. Agrega .env a tu archivo <strong>.gitignore<\/strong> para no comprometerlo accidentalmente en tu repositorio.<\/p>\n\n\n\n<p>Puedes usar git-secrets para escanear informaci\u00f3n sensible antes de cada commit. Para mayor seguridad, cifra tu archivo de secretos antes de almacenarlo. Herramientas como Ansible Vault y BlackBox pueden ayudar con esto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-asegura-los-secrets-en-los-servidores-de-produccion\"><strong>Asegura los Secrets en los Servidores de Producci\u00f3n<\/strong><\/h3>\n\n\n\n<p>Cuando administres variables de entorno en tus servidores de producci\u00f3n, evita establecerlas utilizando argumentos de l\u00ednea de comandos, que pueden ser inspeccionados a trav\u00e9s de la tabla de procesos.<\/p>\n\n\n\n<p>En su lugar, usa las herramientas de gesti\u00f3n de entorno de tu sistema operativo o plataforma de orquestaci\u00f3n de contenedores. Por ejemplo, puedes usar Kubernetes Secrets para almacenar y exponer secretos de forma segura a tus pods de aplicaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-utiliza-algoritmos-de-encriptacion-fuertes\"><strong>Utiliza Algoritmos de Encriptaci\u00f3n Fuertes<\/strong><\/h3>\n\n\n\n<p>Utiliza algoritmos de encriptaci\u00f3n robustos y modernos al encriptar tus secretos, ya sea en tr\u00e1nsito o en reposo. Evita algoritmos obsoletos como DES o MD5, que tienen vulnerabilidades conocidas. En su lugar, opta por algoritmos est\u00e1ndar de la industria como AES-256 para encriptaci\u00f3n sim\u00e9trica y RSA-2048 o ECDSA para encriptaci\u00f3n asim\u00e9trica.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-rota-los-secrets-regularmente\"><strong>Rota los Secrets Regularmente<\/strong><\/h3>\n\n\n\n<p>Rota tus secretos regularmente, especialmente si sospechas que pueden haber sido comprometidos. Trata los secretos como lo har\u00edas con una contrase\u00f1a, actualiz\u00e1ndolos cada pocos meses. Una herramienta de gesti\u00f3n de secretos como Hashicorp Vault o AWS Secrets Manager puede ayudar a automatizar este proceso.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-ten-cuidado-con-el-registro-y-la-informacion-de-errores\"><strong>Ten Cuidado con el Registro y la Informaci\u00f3n de Errores<\/strong><\/h3>\n\n\n\n<p>Ten cuidado con el registro y la informaci\u00f3n de errores. Aseg\u00farate de no registrar ninguna variable de entorno que contenga valores sensibles. Si est\u00e1s utilizando una herramienta de seguimiento de errores de terceros, config\u00farala para sanitizar datos sensibles. \u00a1Lo \u00faltimo que quieres es que tus secretos aparezcan en un seguimiento de stack en un panel de informes de excepciones!<\/p>\n\n\n\n<h2 id=\"h-cuando-evitar-las-variables-de-entorno\" class=\"wp-block-heading\"><strong>\u00bfCu\u00e1ndo Evitar las Variables de Entorno?<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"497\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/08-cuando-evitar-variables-entorno-1024x497.jpg\" alt=\"\u00bfCu\u00e1ndo Evitar las Variables de Entorno?\" class=\"wp-image-43813 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/08-cuando-evitar-variables-entorno-1024x497.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/08-cuando-evitar-variables-entorno-300x146.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/08-cuando-evitar-variables-entorno-768x373.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/08-cuando-evitar-variables-entorno-1536x746.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-cuando-evitar-variables-entorno-600x291.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-cuando-evitar-variables-entorno-1200x583.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-cuando-evitar-variables-entorno-730x355.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-cuando-evitar-variables-entorno-1460x709.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-cuando-evitar-variables-entorno-784x381.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-cuando-evitar-variables-entorno-1568x761.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-cuando-evitar-variables-entorno-877x426.jpg.webp 877w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-cuando-evitar-variables-entorno.jpg.webp 1600w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/497;\" \/><\/figure>\n\n\n\n<p>Hay varios casos en los que se deben evitar las variables de entorno:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-gestion-de-configuraciones-complejas\"><strong>Gesti\u00f3n de Configuraciones Complejas<\/strong><\/h3>\n\n\n\n<p>El uso de variables de entorno para gestionar la configuraci\u00f3n de sistemas de software complejos puede volverse desordenado y propenso a errores. A medida que aumenta el n\u00famero de par\u00e1metros de configuraci\u00f3n, terminas con nombres de variables de entorno largos que pueden chocar accidentalmente. Adem\u00e1s, no hay una forma f\u00e1cil de organizar valores de configuraci\u00f3n relacionados juntos.<\/p>\n\n\n\n<p>En lugar de variables de entorno, considera usar archivos de configuraci\u00f3n en un formato como JSON o YAML. Estos te permiten:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agrupar par\u00e1metros de configuraci\u00f3n relacionados juntos en una estructura anidada.<\/li>\n\n\n\n<li>Evitar colisiones de nombres encapsulando la configuraci\u00f3n en \u00e1mbitos y espacios de nombres.<\/li>\n\n\n\n<li>Definir tipos de datos personalizados en lugar de solo cadenas.<\/li>\n\n\n\n<li>Ver y modificar r\u00e1pidamente las configuraciones utilizando un editor de texto.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-almacenamiento-de-informacion-sensible\"><strong>Almacenamiento de Informaci\u00f3n Sensible<\/strong><\/h3>\n\n\n\n<p>Si bien las variables de entorno parecen f\u00e1ciles de inyectar configuraciones externas como claves de API, contrase\u00f1as de bases de datos, etc., esto puede causar problemas de seguridad.<\/p>\n\n\n\n<p>El problema es que las variables de entorno son accesibles globalmente en un proceso. Entonces, si existe una vulnerabilidad en parte de tu aplicaci\u00f3n, podr\u00eda comprometer los secretos almacenados en las variables de entorno.<\/p>\n\n\n\n<p>Un enfoque m\u00e1s seguro es utilizar un servicio de gesti\u00f3n de secretos que maneje el cifrado y el control de acceso. Estos servicios permiten almacenar datos sensibles externamente y proporcionan SDK para recuperar valores de aplicaci\u00f3n.<\/p>\n\n\n\n<p>Por lo tanto, considera usar una soluci\u00f3n de gesti\u00f3n de secretos dedicada en lugar de variables de entorno para credenciales y claves privadas. Esto reduce el riesgo de exponer accidentalmente datos sensibles a trav\u00e9s de vulnerabilidades o registros no deseados.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-trabajar-con-multiples-entornos\"><strong>Trabajar Con M\u00faltiples Entornos<\/strong><\/h3>\n\n\n\n<p>La gesti\u00f3n de variables de entorno puede volverse tediosa a medida que las aplicaciones crecen y se implementan en m\u00faltiples entornos (desarrollo, pruebas, pruebas, producci\u00f3n). Puede que tengas datos de configuraci\u00f3n fragmentados repartidos en varios scripts de bash, herramientas de implementaci\u00f3n, etc.<\/p>\n\n\n\n<p>Una soluci\u00f3n de gesti\u00f3n de configuraci\u00f3n ayuda a consolidar todas las configuraciones espec\u00edficas del entorno en un lugar centralizado. Esto podr\u00eda ser archivos en un repositorio, un servidor de configuraci\u00f3n dedicado o integrado con tus pipelines de CI\/CD.<\/p>\n\n\n\n<p>Si el objetivo es evitar la duplicaci\u00f3n de variables de entorno, tiene m\u00e1s sentido tener una \u00fanica fuente de verdad para las configuraciones.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-compartir-configuraciones-entre-equipos\"><strong>Compartir Configuraciones Entre Equipos<\/strong><\/h3>\n\n\n\n<p>Dado que las variables de entorno se originan localmente por proceso, compartir y sincronizar datos de configuraci\u00f3n entre diferentes equipos que trabajan en la misma aplicaci\u00f3n o conjunto de servicios se vuelve muy dif\u00edcil.<\/p>\n\n\n\n<p>Cada equipo puede mantener su propia copia de los valores de configuraci\u00f3n en diferentes scripts de bash, manifiestos de implementaci\u00f3n, etc. Esta configuraci\u00f3n descentralizada conduce a lo siguiente:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Deriva de configuraci\u00f3n:<\/strong> Sin una \u00fanica fuente de verdad, es f\u00e1cil que la configuraci\u00f3n sea inconsistente en los entornos a medida que diferentes equipos realizan cambios independientes.<\/li>\n\n\n\n<li><strong>Falta de visibilidad:<\/strong> No hay una forma centralizada de ver, buscar y analizar todo el estado de configuraci\u00f3n en todos los servicios. Esto hace extremadamente dif\u00edcil entender c\u00f3mo est\u00e1 configurado un servicio.<\/li>\n\n\n\n<li><strong>Desaf\u00edos de auditor\u00eda:<\/strong> Los cambios en las variables de entorno no se rastrean de ninguna manera est\u00e1ndar, lo que dificulta auditar qui\u00e9n cambi\u00f3 qu\u00e9 configuraci\u00f3n y cu\u00e1ndo.<\/li>\n\n\n\n<li><strong>Dificultades de prueba:<\/strong> Sin una forma f\u00e1cil de capturar y compartir la configuraci\u00f3n, asegurar entornos consistentes para desarrollo y pruebas se vuelve extremadamente complicado.<\/li>\n<\/ol>\n\n\n\n<p>En lugar de este enfoque fragmentado, tener una soluci\u00f3n de configuraci\u00f3n centralizada permite a los equipos gestionar la configuraci\u00f3n desde una plataforma o repositorio \u00fanico.<\/p>\n\n\n\n<h2 id=\"h-construye-tus-aplicaciones-con-variables-de-entorno-para-el-largo-plazo-nbsp\" class=\"wp-block-heading\"><strong>Construye Tus Aplicaciones Con Variables De Entorno Para El Largo Plazo.&nbsp;<\/strong><\/h2>\n\n\n\n<p>A medida que tu aplicaci\u00f3n crece, considera c\u00f3mo es posible que necesites formas m\u00e1s avanzadas de gestionar su configuraci\u00f3n.<\/p>\n\n\n\n<p>Lo que parece sencillo ahora podr\u00eda complicarse m\u00e1s adelante. Es probable que necesites mejores formas de controlar el acceso, compartir configuraciones de equipo, organizar todo claramente y actualizar configuraciones sin problemas.<\/p>\n\n\n\n<p>No te acorrales solo usando variables de entorno desde el principio. Debes planificar c\u00f3mo manejar las configuraciones a medida que tus necesidades se expandan.<\/p>\n\n\n\n<p>Si bien las variables de entorno son excelentes para manejar datos centrados en el entorno como credenciales de inicio de sesi\u00f3n, nombres de bases de datos, IPs locales, etc., quieres crear un sistema que siga principios s\u00f3lidos como seguridad, compartibilidad, organizaci\u00f3n y la capacidad de adaptarse a los cambios r\u00e1pidamente.<\/p>\n\n\n\n<p>Las alternativas que discutimos, como el uso de un archivo o servicio de configuraci\u00f3n dedicado, tienen caracter\u00edsticas valiosas que se alinean con esos principios. Esto te ayudar\u00e1 a seguir avanzando r\u00e1pidamente sin detenerte.<\/p>\n\n\n\n<div class=\"article-newsletter article-newsletter--gradient\">\n\n\n<h2>Get Content Delivered Straight to Your Inbox<\/h2><p>Subscribe now to receive all the latest updates, delivered directly to your inbox.<\/p><form class=\"nwsl-form\" id=\"newsletter_block_\" novalidate><div class=\"messages\"><\/div><div class=\"form-group\"><label for=\"input_newsletter_block_\"><input type=\"email\"name=\"email\"id=\"input_newsletter_block_\"placeholder=\"Enter your email address\"novalidatedisabled=\"disabled\"\/><\/label><button type=\"submit\"class=\"btn btn--brand\"disabled=\"disabled\"><span>Sign Me Up!<\/span><svg width=\"21\" height=\"14\" viewBox=\"0 0 21 14\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n<path d=\"M13.8523 0.42524L12.9323 1.34521C12.7095 1.56801 12.7132 1.9304 12.9404 2.14865L16.7241 5.7823H0.5625C0.251859 5.7823 0 6.03416 0 6.3448V7.6573C0 7.96794 0.251859 8.2198 0.5625 8.2198H16.7241L12.9405 11.8535C12.7132 12.0717 12.7095 12.4341 12.9323 12.6569L13.8523 13.5769C14.072 13.7965 14.4281 13.7965 14.6478 13.5769L20.8259 7.39879C21.0456 7.17913 21.0456 6.82298 20.8259 6.60327L14.6477 0.42524C14.4281 0.205584 14.0719 0.205584 13.8523 0.42524Z\" fill=\"white\"\/>\n<\/svg>\n<\/button><\/div><\/form><\/div>","protected":false},"excerpt":{"rendered":"<p>Las variables de entorno permiten configurar aplicaciones sin necesidad de cambiar el c\u00f3digo. Separan los datos externos de la l\u00f3gica de la aplicaci\u00f3n, lo cual puede resultar bastante misterioso para los desarrolladores novatos (incluso para algunos experimentados). A trav\u00e9s de esta gu\u00eda pr\u00e1ctica, levantaremos el velo alrededor de las variables de entorno para que puedas [&hellip;]<\/p>\n","protected":false},"author":1006,"featured_media":43775,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_yoast_wpseo_metadesc":"Esta gu\u00eda para principiantes desglosa lo bueno de las variables de entorno y c\u00f3mo puedes utilizarlas para tu beneficio.","toc_headlines":"[[\"h-que-son-las-variables-de-entorno\",\"\u00bfQu\u00e9 Son las Variables de Entorno?\"],[\"h-por-que-son-valiosas-las-variables-de-entorno\",\"\u00bfPor Qu\u00e9 Son Valiosas las Variables de Entorno?\"],[\"h-como-puedes-definir-variables-de-entorno\",\"C\u00f3mo Puedes Definir Variables de Entorno\"],[\"h-como-acceder-a-las-variables-de-entorno-en-diferentes-lenguajes-de-programacion\",\"\u00bfC\u00f3mo Acceder a las Variables de Entorno en Diferentes Lenguajes de Programaci\u00f3n?\"],[\"h-guia-de-seguridad-de-las-variables-de-entorno\",\"Gu\u00eda de Seguridad de las Variables de Entorno\"],[\"h-cuando-evitar-las-variables-de-entorno\",\"\u00bfCu\u00e1ndo Evitar las Variables de Entorno?\"],[\"h-construye-tus-aplicaciones-con-variables-de-entorno-para-el-largo-plazo-nbsp\",\"Construye Tus Aplicaciones Con Variables De Entorno Para El Largo Plazo.\u00a0\"]]","hide_toc":false,"footnotes":""},"categories":[11692],"tags":[],"class_list":["post-43798","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-hosting"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.3 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>\u00bfQu\u00e9 Son las Variables de Entorno? Gu\u00eda Para Principiantes - DreamHost<\/title>\n<meta name=\"description\" content=\"Esta gu\u00eda para principiantes desglosa lo bueno de las variables de entorno y c\u00f3mo puedes utilizarlas para tu beneficio.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Todo lo Que Necesitas Saber Sobre Las Variables de Entorno\" \/>\n<meta property=\"og:description\" content=\"Sum\u00e9rgete con nosotros para ver una mirada divertida e informal a las variables ambientales. Ideal para principiantes deseosos de agregar un poco de elegancia geek a su caja de herramientas.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/\" \/>\n<meta property=\"og:site_name\" content=\"DreamHost Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DreamHost\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-29T14:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-07T13:32:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/1220-x-628-OGIMAGE-_What-are-Environment-Variables_A-Thorough-Guide-for-Beginners-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Brian Andrus\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Todo lo Que Necesitas Saber Sobre Las Variables de Entorno\" \/>\n<meta name=\"twitter:description\" content=\"Sum\u00e9rgete con nosotros para ver una mirada divertida e informal a las variables ambientales. Ideal para principiantes deseosos de agregar un poco de elegancia geek a su caja de herramientas.\" \/>\n<meta name=\"twitter:creator\" content=\"@dreamhost\" \/>\n<meta name=\"twitter:site\" content=\"@dreamhost\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Brian Andrus\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u00bfQu\u00e9 Son las Variables de Entorno? Gu\u00eda Para Principiantes - DreamHost","description":"Esta gu\u00eda para principiantes desglosa lo bueno de las variables de entorno y c\u00f3mo puedes utilizarlas para tu beneficio.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/","og_locale":"en_US","og_type":"article","og_title":"Todo lo Que Necesitas Saber Sobre Las Variables de Entorno","og_description":"Sum\u00e9rgete con nosotros para ver una mirada divertida e informal a las variables ambientales. Ideal para principiantes deseosos de agregar un poco de elegancia geek a su caja de herramientas.","og_url":"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/","og_site_name":"DreamHost Blog","article_publisher":"https:\/\/www.facebook.com\/DreamHost\/","article_published_time":"2024-03-29T14:00:00+00:00","article_modified_time":"2025-01-07T13:32:41+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/1220-x-628-OGIMAGE-_What-are-Environment-Variables_A-Thorough-Guide-for-Beginners-1.jpg","type":"image\/jpeg"}],"author":"Brian Andrus","twitter_card":"summary_large_image","twitter_title":"Todo lo Que Necesitas Saber Sobre Las Variables de Entorno","twitter_description":"Sum\u00e9rgete con nosotros para ver una mirada divertida e informal a las variables ambientales. Ideal para principiantes deseosos de agregar un poco de elegancia geek a su caja de herramientas.","twitter_creator":"@dreamhost","twitter_site":"@dreamhost","twitter_misc":{"Written by":"Brian Andrus","Est. reading time":"18 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/#article","isPartOf":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/"},"author":{"name":"Brian Andrus","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/person\/a3f8817a11ac0b464bfbcb6c505cb82b"},"headline":"Qu\u00e9 Son las Variables de Entorno: Una Gu\u00eda Completa Para Principiantes","datePublished":"2024-03-29T14:00:00+00:00","dateModified":"2025-01-07T13:32:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/"},"wordCount":4160,"publisher":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#organization"},"image":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/#primaryimage"},"thumbnailUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/1460-x-1095-BLOG-HERO-_What-are-Environment-Variables_A-Thorough-Guide-for-Beginners.jpg","articleSection":["Web Hosting"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/","url":"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/","name":"\u00bfQu\u00e9 Son las Variables de Entorno? Gu\u00eda Para Principiantes - DreamHost","isPartOf":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/#primaryimage"},"image":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/#primaryimage"},"thumbnailUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/1460-x-1095-BLOG-HERO-_What-are-Environment-Variables_A-Thorough-Guide-for-Beginners.jpg","datePublished":"2024-03-29T14:00:00+00:00","dateModified":"2025-01-07T13:32:41+00:00","description":"Esta gu\u00eda para principiantes desglosa lo bueno de las variables de entorno y c\u00f3mo puedes utilizarlas para tu beneficio.","breadcrumb":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/#primaryimage","url":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/1460-x-1095-BLOG-HERO-_What-are-Environment-Variables_A-Thorough-Guide-for-Beginners.jpg","contentUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/1460-x-1095-BLOG-HERO-_What-are-Environment-Variables_A-Thorough-Guide-for-Beginners.jpg","width":1460,"height":1095,"caption":"What Are Environment Variables: A Thorough Guide For Beginners"},{"@type":"BreadcrumbList","@id":"https:\/\/www-dev.dreamhost.com\/blog\/es\/variables-entorno-guia-principiantes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dhblog.dream.press\/blog\/"},{"@type":"ListItem","position":2,"name":"Qu\u00e9 Son las Variables de Entorno: Una Gu\u00eda Completa Para Principiantes"}]},{"@type":"WebSite","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#website","url":"https:\/\/www-dev.dreamhost.com\/blog\/","name":"DreamHost Blog","description":"","publisher":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www-dev.dreamhost.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#organization","name":"DreamHost","url":"https:\/\/www-dev.dreamhost.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","contentUrl":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","width":1200,"height":168,"caption":"DreamHost"},"image":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DreamHost\/","https:\/\/x.com\/dreamhost","https:\/\/www.instagram.com\/dreamhost\/","https:\/\/www.linkedin.com\/company\/dreamhost\/","https:\/\/www.youtube.com\/user\/dreamhostusa"]},{"@type":"Person","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/person\/a3f8817a11ac0b464bfbcb6c505cb82b","name":"Brian Andrus","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2023\/10\/brian-andrus-150x150.jpg","url":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2023\/10\/brian-andrus-150x150.jpg","contentUrl":"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2023\/10\/brian-andrus-150x150.jpg","caption":"Brian Andrus"},"description":"Brian is a Cloud Engineer at DreamHost, primarily responsible for cloudy things. In his free time he enjoys navigating fatherhood, cutting firewood, and self-hosting whatever he can.","url":"https:\/\/www-dev.dreamhost.com\/blog\/author\/brianandrus\/"}]}},"lang":"es","translations":{"es":43798,"en":43774,"pt":52136,"de":56446,"uk":56449,"pl":56470,"ru":56476,"it":68648,"fr":70873,"nl":70906},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/43798","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/users\/1006"}],"replies":[{"embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/comments?post=43798"}],"version-history":[{"count":10,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/43798\/revisions"}],"predecessor-version":[{"id":60830,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/43798\/revisions\/60830"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/media\/43775"}],"wp:attachment":[{"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/media?parent=43798"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/categories?post=43798"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/tags?post=43798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}