{"id":52136,"date":"2024-03-29T07:00:00","date_gmt":"2024-03-29T14:00:00","guid":{"rendered":"https:\/\/dhblog.dream.press\/blog\/?p=52136"},"modified":"2025-05-26T12:45:43","modified_gmt":"2025-05-26T19:45:43","slug":"variaveis-de-ambiente","status":"publish","type":"post","link":"https:\/\/www-dev.dreamhost.com\/blog\/pt\/variaveis-de-ambiente\/","title":{"rendered":"O Que S\u00e3o Vari\u00e1veis de Ambiente: Um Guia Completo Para Iniciantes"},"content":{"rendered":"\n<p>Vari\u00e1veis de ambiente permitem configurar aplicativos sem alterar o c\u00f3digo. Elas separam os dados externos da l\u00f3gica do aplicativo, o que pode permanecer bastante enigm\u00e1tico para desenvolvedores iniciantes (e at\u00e9 para alguns experientes).<\/p>\n\n\n\n<p>Atrav\u00e9s deste guia pr\u00e1tico, levantaremos o v\u00e9u sobre as vari\u00e1veis de ambiente para que voc\u00ea possa entender o que elas implicam, por que s\u00e3o importantes e como aproveitar as vari\u00e1veis de ambiente com confian\u00e7a.<\/p>\n\n\n\n<p>Pegue sua bebida favorita (e talvez alguns biscoitos) porque vamos come\u00e7ar. Vamos desempacotar os conceitos de vari\u00e1veis ambientais desde o in\u00edcio.<\/p>\n\n\n\n<h2 id=\"what\" class=\"wp-block-heading\">O que S\u00e3o Vari\u00e1veis de Ambiente?<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1600\" height=\"851\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/01-What-Are-Environment-Variables.jpg\" alt=\"exemplo de vari\u00e1veis de ambiente mostrando um exemplo de um valor din\u00e2mico como $SUGAR e o que esse valor equivale: 1 x\u00edcara de a\u00e7\u00facar\" class=\"wp-image-43783 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-What-Are-Environment-Variables.jpg.webp 1600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/01-What-Are-Environment-Variables-300x160.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/01-What-Are-Environment-Variables-1024x545.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/01-What-Are-Environment-Variables-768x408.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/01-What-Are-Environment-Variables-1536x817.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-What-Are-Environment-Variables-600x319.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-What-Are-Environment-Variables-1200x638.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-What-Are-Environment-Variables-730x388.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-What-Are-Environment-Variables-1460x777.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-What-Are-Environment-Variables-784x417.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-What-Are-Environment-Variables-1568x834.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/01-What-Are-Environment-Variables-877x466.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/851;\" \/><\/figure>\n\n\n\n<p>Vari\u00e1veis de ambiente s\u00e3o valores nomeados din\u00e2micos que podem afetar o comportamento de processos em execu\u00e7\u00e3o em um computador. Algumas propriedades chave das vari\u00e1veis de ambiente s\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Nomeadas<\/strong>: Tenha nomes de vari\u00e1veis descritivos como <em>APP_MODE<\/em> e <em>DB_URL<\/em>.<\/li>\n\n\n\n<li><strong>Externas<\/strong>: Os valores s\u00e3o definidos fora do c\u00f3digo do aplicativo por meio de arquivos, linhas de comando e sistemas.<\/li>\n\n\n\n<li><strong>Din\u00e2micas<\/strong>: Podem atualizar vari\u00e1veis sem reiniciar aplicativos.<\/li>\n\n\n\n<li><strong>Configuradas<\/strong>: O c\u00f3digo depende de vari\u00e1veis, mas n\u00e3o as define.<\/li>\n\n\n\n<li><strong>Desacopladas<\/strong>: N\u00e3o \u00e9 necess\u00e1rio alterar configura\u00e7\u00f5es do c\u00f3digo uma vez que as vari\u00e1veis est\u00e3o definidas.<\/li>\n\n\n<\/ul>\n\n\n\n<p><strong>Aqui est\u00e1 uma analogia<\/strong>. Imagine que voc\u00ea est\u00e1 seguindo uma receita de cookies de chocolate. A receita pode dizer:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Adicione 1 x\u00edcara de a\u00e7\u00facar<\/li>\n\n\n\n<li>Adicione 1 barra de manteiga amolecida<\/li>\n\n\n\n<li>Adicione 2 ovos<\/li>\n\n\n<\/ul>\n\n\n\n<p>Em vez desses valores codificados, voc\u00ea poderia usar vari\u00e1veis de ambiente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Adicione $SUGAR x\u00edcara de a\u00e7\u00facar<\/li>\n\n\n\n<li>Adicione $BUTTER barras de manteiga amolecida<\/li>\n\n\n\n<li>Adicione $EGGS ovos<\/li>\n\n\n<\/ul>\n\n\n\n<p>Antes de fazer os cookies, voc\u00ea definiria os nomes das vari\u00e1veis de ambiente com valores de sua escolha:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SUGAR=1 \nBUTTER=1\nEGGS=2<\/code><\/pre>\n\n\n\n<p>Ent\u00e3o, ao seguir a receita, seus ingredientes seriam:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Adicione 1 x\u00edcara de a\u00e7\u00facar<\/li>\n\n\n\n<li>Adicione 1 barra de manteiga amolecida<\/li>\n\n\n\n<li>Adicione 2 ovos<\/li>\n\n\n<\/ul>\n\n\n\n<p>Isso permite que voc\u00ea configure a receita do cookie sem alterar o c\u00f3digo da receita.<\/p>\n\n\n\n<p>O mesmo conceito se aplica \u00e0 computa\u00e7\u00e3o e desenvolvimento. Vari\u00e1veis de ambiente permitem que voc\u00ea altere o ambiente no qual um processo \u00e9 executado sem mudar o c\u00f3digo subjacente. Aqui est\u00e3o alguns exemplos comuns:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Configurando o ambiente para &#8220;development&#8221; ou &#8220;production&#8221;<\/li>\n\n\n\n<li>Configurando chaves API para servi\u00e7os externos<\/li>\n\n\n\n<li>Inserindo chaves secretas ou credenciais<\/li>\n\n\n\n<li>Alternando certas funcionalidades entre ativo e inativo<\/li>\n\n\n<\/ul>\n\n\n\n<p>As vari\u00e1veis de ambiente oferecem grande flexibilidade. Voc\u00ea pode implantar o mesmo c\u00f3digo em v\u00e1rios ambientes sem alterar o c\u00f3digo em si. Mas vamos entender melhor por que elas s\u00e3o valiosas.<\/p>\n\n\n\n<h2 id=\"why\" class=\"wp-block-heading\">Por que as Vari\u00e1veis de Ambiente s\u00e3o Valiosas?<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1600\" height=\"1050\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/02-Why-Are-Environment-Variables-Valuable.jpg\" alt=\"as vari\u00e1veis de ambiente s\u00e3o valiosas para separar o c\u00f3digo da aplica\u00e7\u00e3o das configura\u00e7\u00f5es, simplificar a configura\u00e7\u00e3o da aplica\u00e7\u00e3o, gerenciar segredos e credenciais e promover consist\u00eancia\" class=\"wp-image-43784 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Why-Are-Environment-Variables-Valuable.jpg.webp 1600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/02-Why-Are-Environment-Variables-Valuable-300x197.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/02-Why-Are-Environment-Variables-Valuable-1024x672.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/02-Why-Are-Environment-Variables-Valuable-768x504.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/02-Why-Are-Environment-Variables-Valuable-1536x1008.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Why-Are-Environment-Variables-Valuable-600x394.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Why-Are-Environment-Variables-Valuable-1200x788.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Why-Are-Environment-Variables-Valuable-730x479.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Why-Are-Environment-Variables-Valuable-1460x958.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Why-Are-Environment-Variables-Valuable-784x515.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Why-Are-Environment-Variables-Valuable-1568x1029.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/02-Why-Are-Environment-Variables-Valuable-877x576.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/1050;\" \/><\/figure>\n\n\n\n<p>Considere as vari\u00e1veis de ambiente como bot\u00f5es de aplicativos usados para ajustar prefer\u00eancias. Exploraremos casos de uso excelentes em breve.<\/p>\n\n\n\n<p>Vamos consolidar a intui\u00e7\u00e3o sobre por que as vari\u00e1veis de ambiente s\u00e3o importantes!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Raz\u00e3o #1: Eles Separam o C\u00f3digo da Aplica\u00e7\u00e3o das Configura\u00e7\u00f5es<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1600\" height=\"710\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/03-They-Separate-Application-Code-From-Configurations.jpg\" alt=\"motivo #1 eles separam o c\u00f3digo da aplica\u00e7\u00e3o das configura\u00e7\u00f5es mostrando esses dois elementos como caixas separadas no gr\u00e1fico\" class=\"wp-image-43785 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-They-Separate-Application-Code-From-Configurations.jpg.webp 1600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/03-They-Separate-Application-Code-From-Configurations-300x133.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/03-They-Separate-Application-Code-From-Configurations-1024x454.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/03-They-Separate-Application-Code-From-Configurations-768x341.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/03-They-Separate-Application-Code-From-Configurations-1536x682.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-They-Separate-Application-Code-From-Configurations-600x266.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-They-Separate-Application-Code-From-Configurations-1200x533.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-They-Separate-Application-Code-From-Configurations-730x324.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-They-Separate-Application-Code-From-Configurations-1460x648.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-They-Separate-Application-Code-From-Configurations-784x348.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-They-Separate-Application-Code-From-Configurations-1568x696.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/03-They-Separate-Application-Code-From-Configurations-877x389.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/710;\" \/><\/figure>\n\n\n\n<p>Codificar configura\u00e7\u00f5es e credenciais diretamente no seu c\u00f3digo pode causar todo tipo de problemas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Commits acidentais no controle de fonte<\/li>\n\n\n\n<li>Reconstru\u00e7\u00e3o e redespacho de c\u00f3digo apenas para alterar um valor<\/li>\n\n\n\n<li>Problemas de configura\u00e7\u00e3o ao promover entre ambientes<\/li>\n\n\n<\/ul>\n\n\n\n<p>Isso tamb\u00e9m leva a um c\u00f3digo confuso:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import os\n\n# Configura\u00e7\u00e3o codificada\nDB_USER = 'appuser' \nDB_PASS = 'password123'\nDB_HOST = 'localhost'\nDB_NAME = 'myappdb'\n\ndef connect_to_db():\n  print(f\"Conectando a {DB_USER}:{DB_PASS}@{DB_HOST}\/{DB_NAME}\")  \n\nconnect_to_db()<\/code><\/pre>\n\n\n\n<p>Isso entrela\u00e7a a l\u00f3gica de neg\u00f3cios com detalhes de configura\u00e7\u00e3o. O acoplamento apertado torna a manuten\u00e7\u00e3o \u00e1rdua ao longo do tempo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>As mudan\u00e7as requerem a modifica\u00e7\u00e3o do c\u00f3digo-fonte<\/li>\n\n\n\n<li>Risco de vazar segredos no controle de fonte<\/li>\n\n\n<\/ul>\n\n\n\n<p>Usar vari\u00e1veis de ambiente reduz esses problemas. Por exemplo, voc\u00ea pode definir as vari\u00e1veis de ambiente DB_USER e DB_NAME.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Arquivo .env\nDB_USER=appuser\nDB_PASS=password123  \nDB_HOST=localhost\nDB_NAME=myappdb<\/code><\/pre>\n\n\n\n<p>O c\u00f3digo da aplica\u00e7\u00e3o pode acessar as vari\u00e1veis de ambiente sempre que necess\u00e1rio, mantendo o c\u00f3digo limpo e simples.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import os\n\n# Carregar configura\u00e7\u00e3o do ambiente\nDB_USER = os.environ&#91;'DB_USER']\nDB_PASS = os.environ&#91;'DB_PASS'] \nDB_HOST = os.environ&#91;'DB_HOST']\nDB_NAME = os.environ&#91;'DB_NAME']\n\ndef connect_to_db():\n  print(f\"Conectando a {DB_USER}:{DB_PASS}@{DB_HOST}\/{DB_NAME}\")\n  \nconnect_to_db()<\/code><\/pre>\n\n\n\n<p>As vari\u00e1veis de ambiente separam claramente a configura\u00e7\u00e3o do c\u00f3digo, mantendo os valores sens\u00edveis abstra\u00eddos no ambiente.<\/p>\n\n\n\n<p>Voc\u00ea pode implementar o mesmo c\u00f3digo do desenvolvimento para a produ\u00e7\u00e3o sem alterar nada. As vari\u00e1veis de ambiente podem variar entre os ambientes sem impactar o c\u00f3digo de forma alguma.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Raz\u00e3o #2: Eles Simplificam a Configura\u00e7\u00e3o de Aplica\u00e7\u00f5es<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1600\" height=\"777\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/04-They-Simplify-Configuring-Applications.jpg\" alt=\"Aplicativo com tr\u00eas diferentes ramifica\u00e7\u00f5es de ambiente: desenvolvimento, staging, produ\u00e7\u00e3o\" class=\"wp-image-43787 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-They-Simplify-Configuring-Applications.jpg.webp 1600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/04-They-Simplify-Configuring-Applications-300x146.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/04-They-Simplify-Configuring-Applications-1024x497.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/04-They-Simplify-Configuring-Applications-768x373.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/04-They-Simplify-Configuring-Applications-1536x746.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-They-Simplify-Configuring-Applications-600x291.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-They-Simplify-Configuring-Applications-1200x583.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-They-Simplify-Configuring-Applications-730x355.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-They-Simplify-Configuring-Applications-1460x709.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-They-Simplify-Configuring-Applications-784x381.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-They-Simplify-Configuring-Applications-1568x761.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/04-They-Simplify-Configuring-Applications-877x426.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/777;\" \/><\/figure>\n\n\n\n<p>Vari\u00e1veis de ambiente simplificam ajustes nas configura\u00e7\u00f5es sem alterar o c\u00f3digo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Arquivo .env:\nDEBUG=true<\/code><\/pre>\n\n\n\n<p>Aqui est\u00e1 como podemos us\u00e1-lo dentro do arquivo de script:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Conte\u00fado do Script:\nimport os\n\nDEBUG = os.environ.get('DEBUG') == 'true' \n\nif DEBUG:\n   print(\"No modo DEBUG\")<\/code><\/pre>\n\n\n\n<p>Alternar o modo de depura\u00e7\u00e3o requer apenas a atualiza\u00e7\u00e3o do arquivo .env \u2014 n\u00e3o s\u00e3o necess\u00e1rias altera\u00e7\u00f5es de c\u00f3digo, reconstru\u00e7\u00e3o ou redespliegue. &#8220;Env vars&#8221;, abreviatura de vari\u00e1veis de ambiente, tamb\u00e9m ajudam a implantar em diferentes ambientes de forma cont\u00ednua:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import os\n\n# Recupera a vari\u00e1vel de ambiente para determinar o ambiente atual (produ\u00e7\u00e3o ou staging)\ncurrent_env = os.getenv('APP_ENV', 'staging')  # Padr\u00e3o para 'staging' se n\u00e3o estiver definido\n\n# Chave da API de Produ\u00e7\u00e3o\nPROD_API_KEY = os.environ&#91;'PROD_API_KEY']\n\n# Chave da API de Staging\nSTG_API_KEY = os.environ&#91;'STG_API_KEY']\n\n# L\u00f3gica que define api_key baseada no ambiente atual\nif current_env == 'production':\n    api_key = PROD_API_KEY\nelse:\n    api_key = STG_API_KEY\n\n# Inicializa o cliente API com a chave API apropriada\napi = ApiClient(api_key)<\/code><\/pre>\n\n\n\n<p>O mesmo c\u00f3digo pode usar chaves de <a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/glossary\/web-design\/api\/\" rel=\"noopener\">API<\/a> separadas para produ\u00e7\u00e3o vs staging sem quaisquer altera\u00e7\u00f5es.<\/p>\n\n\n\n<p>E, por \u00faltimo, eles ativam altern\u00e2ncias de funcionalidades sem novas implementa\u00e7\u00f5es:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>NOVO_RECURSO = os.environ&#91;'NOVO_RECURSO'] == 'true'\n\nif NOVO_RECURSO:\n   habilitarNovoRecurso()<\/code><\/pre>\n\n\n\n<p>Alterar a vari\u00e1vel <em>NEW_FEATURE<\/em> ativa a funcionalidade instantaneamente dentro do nosso c\u00f3digo. A interface para atualizar configura\u00e7\u00f5es depende dos sistemas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.dreamhost.com\/blog\/pt\/ambiente-de-desenvolvimento-em-nuvem\/\" target=\"_blank\" rel=\"noopener\">Plataformas de Cloud<\/a> como Heroku usam pain\u00e9is web<\/li>\n\n\n\n<li>Servidores usam ferramentas de comando de OS<\/li>\n\n\n\n<li>Desenvolvimento local pode usar arquivos .env<\/li>\n\n\n<\/ul>\n\n\n\n<p>As vari\u00e1veis de ambiente s\u00e3o ben\u00e9ficas ao criar aplica\u00e7\u00f5es, permitindo que os usu\u00e1rios configurem elementos de acordo com suas necessidades.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Raz\u00e3o #3: Eles ajudam a gerenciar segredos e credenciais<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1600\" height=\"777\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/05-They-Help-Manage-Secrets-And-Credentials.jpg\" alt=\"c\u00f3digo de aplica\u00e7\u00e3o ramificado para vari\u00e1veis de ambiente com cinco ramifica\u00e7\u00f5es cada uma rotulada como segredos\" class=\"wp-image-43788 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-They-Help-Manage-Secrets-And-Credentials.jpg.webp 1600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/05-They-Help-Manage-Secrets-And-Credentials-300x146.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/05-They-Help-Manage-Secrets-And-Credentials-1024x497.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/05-They-Help-Manage-Secrets-And-Credentials-768x373.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/05-They-Help-Manage-Secrets-And-Credentials-1536x746.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-They-Help-Manage-Secrets-And-Credentials-600x291.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-They-Help-Manage-Secrets-And-Credentials-1200x583.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-They-Help-Manage-Secrets-And-Credentials-730x355.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-They-Help-Manage-Secrets-And-Credentials-1460x709.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-They-Help-Manage-Secrets-And-Credentials-784x381.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-They-Help-Manage-Secrets-And-Credentials-1568x761.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/05-They-Help-Manage-Secrets-And-Credentials-877x426.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/777;\" \/><\/figure>\n\n\n\n<p>Armazenar segredos como chaves de API, senhas e chaves privadas diretamente no c\u00f3digo-fonte apresenta <a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/pt\/dicas-de-seguranca-na-nuvem\/\" rel=\"noopener\">riscos de seguran\u00e7a<\/a> substanciais:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Evite expor segredos no c\u00f3digo!\nSTRIPE_KEY = 'sk_live_1234abc'\nDB_PASSWORD = 'password123'\n\nstripe.api_key = STRIPE_KEY \ndb.connect(DB_PASSWORD)<\/code><\/pre>\n\n\n\n<p>Essas credenciais agora est\u00e3o expostas se esse c\u00f3digo for inclu\u00eddo em um reposit\u00f3rio p\u00fablico <a target=\"_blank\" href=\"https:\/\/dreamhost.com\/blog\/how-to-use-wp-with-github\/\" rel=\"noopener\">GitHub<\/a>!<\/p>\n\n\n\n<p>Vari\u00e1veis de ambiente impedem vazamentos ao externalizar segredos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import os\n\nSTRIPE_KEY = os.environ.get('STRIPE_KEY')  \nDB_PASS = os.environ.get('DB_PASS')   \n\nstripe.api_key = STRIPE_KEY  \ndb.connect(DB_PASS)<\/code><\/pre>\n\n\n\n<p>Os valores secretos reais s\u00e3o definidos em um arquivo local .env.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># .env file\n\nSTRIPE_KEY=sk_live_1234abc\nDB_PASS=password123<\/code><\/pre>\n\n\n\n<p>N\u00e3o se esque\u00e7a de <code>.gitignore<\/code> o arquivo .env para manter segredos fora do controle de fonte. Isso envolve definir o arquivo .env em um arquivo .gitignore na raiz de qualquer reposit\u00f3rio, o que indica ao git para ignorar o arquivo durante a cria\u00e7\u00e3o de commits.<\/p>\n\n\n\n<p>Isso separa as defini\u00e7\u00f5es secretas do c\u00f3digo da aplica\u00e7\u00e3o, carregando-as de forma segura a partir de ambientes protegidos durante a execu\u00e7\u00e3o. O risco de expor acidentalmente as credenciais reduz-se drasticamente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Raz\u00e3o #4: Eles Promovem Consist\u00eancia<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1600\" height=\"777\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/06-They-Promote-Consistency.jpg\" alt=\"configura\u00e7\u00e3o com quatro ramifica\u00e7\u00f5es conduzindo a vari\u00e1veis de ambiente\" class=\"wp-image-43789 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-They-Promote-Consistency.jpg.webp 1600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/06-They-Promote-Consistency-300x146.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/06-They-Promote-Consistency-1024x497.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/06-They-Promote-Consistency-768x373.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/06-They-Promote-Consistency-1536x746.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-They-Promote-Consistency-600x291.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-They-Promote-Consistency-1200x583.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-They-Promote-Consistency-730x355.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-They-Promote-Consistency-1460x709.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-They-Promote-Consistency-784x381.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-They-Promote-Consistency-1568x761.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/06-They-Promote-Consistency-877x426.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/777;\" \/><\/figure>\n\n\n\n<p>Imagine ter diferentes arquivos de configura\u00e7\u00e3o para os ambientes de desenvolvimento, QA e produ\u00e7\u00e3o:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Desenvolvimento\nDB_HOST = 'localhost'\nDB_NAME = 'appdb_dev'\n\n# Produ\u00e7\u00e3o\nDB_HOST = 'db.myapp.com'\nDB_NAME = 'appdb_prod'<\/code><\/pre>\n\n\n\n<p>Essa discrep\u00e2ncia introduz bugs sutis que s\u00e3o dif\u00edceis de detectar. C\u00f3digo que funciona perfeitamente em desenvolvimento pode repentinamente quebrar a produ\u00e7\u00e3o devido a configura\u00e7\u00f5es incompat\u00edveis.<\/p>\n\n\n\n<p>Vari\u00e1veis de ambiente resolvem isso centralizando a configura\u00e7\u00e3o em um \u00fanico local:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DB_HOST=db.myapp.com\nDB_NAME=appdb_prod<\/code><\/pre>\n\n\n\n<p>Agora, as mesmas vari\u00e1veis s\u00e3o usadas de forma consistente em todos os ambientes. Voc\u00ea n\u00e3o precisa mais se preocupar com configura\u00e7\u00f5es aleat\u00f3rias ou incorretas sendo ativadas.<\/p>\n\n\n\n<p><strong>O c\u00f3digo da aplica\u00e7\u00e3o simplesmente referencia as vari\u00e1veis:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import os\n\ndb_host = os.environ&#91;'DB_HOST']\ndb_name = os.environ&#91;'DB_NAME']\n\ndb.connect(db_host, db_name)<\/code><\/pre>\n\n\n\n<p>Independentemente de a aplica\u00e7\u00e3o ser executada localmente ou em um servidor de produ\u00e7\u00e3o, ela sempre usa o host do banco de dados e o nome corretos.<\/p>\n\n\n\n<p>Essa uniformidade reduz erros, melhora a previsibilidade e torna o aplicativo mais robusto de forma geral. Os desenvolvedores podem ter confian\u00e7a de que o c\u00f3digo se comportar\u00e1 de maneira id\u00eantica em todos os ambientes.<\/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=\"define\" class=\"wp-block-heading\">Como Voc\u00ea Pode Definir Vari\u00e1veis de Ambiente<\/h2>\n\n\n\n<p>As vari\u00e1veis de ambiente podem ser definidas em v\u00e1rios locais, permitindo flexibilidade na configura\u00e7\u00e3o e acesso a elas entre processos e sistemas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Vari\u00e1veis de Ambiente do Sistema Operacional<\/h3>\n\n\n\n<p>A maioria dos sistemas operacionais oferece mecanismos integrados para definir vari\u00e1veis globais. Isso torna as vari\u00e1veis acess\u00edveis em todo o sistema para todos os usu\u00e1rios, aplica\u00e7\u00f5es, etc.<\/p>\n\n\n\n<p>Em sistemas Linux\/Unix, vari\u00e1veis podem ser definidas em scripts de inicializa\u00e7\u00e3o do Shell.<\/p>\n\n\n\n<p>Por exemplo, ~\/.bashrc pode ser usado para definir vari\u00e1veis de n\u00edvel de usu\u00e1rio, enquanto \/etc\/environment \u00e9 para vari\u00e1veis de sistema acess\u00edveis a todos os usu\u00e1rios.<\/p>\n\n\n\n<p>As vari\u00e1veis tamb\u00e9m podem ser definidas em linha antes de executar comandos usando o comando export ou diretamente atrav\u00e9s do comando env no bash:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># In ~\/.bashrc\nexport DB_URL=localhost\nexport APP_PORT=3000<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Em \/etc\/environment\nDB_HOST=localhost\nDB_NAME=mydatabase<\/code><\/pre>\n\n\n\n<p>As vari\u00e1veis tamb\u00e9m podem ser definidas inline antes de executar comandos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export TOKEN=abcdef\npython app.py<\/code><\/pre>\n\n\n\n<p>Definir vari\u00e1veis no n\u00edvel do sistema operacional as torna globalmente dispon\u00edveis, o que \u00e9 bastante \u00fatil quando voc\u00ea quer executar o aplicativo sem depender de valores internos.<\/p>\n\n\n\n<p>Voc\u00ea tamb\u00e9m pode referenciar vari\u00e1veis definidas em scripts ou argumentos de linha de comando.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python app.py --db-name $DB_NAME --db-host $DB_HOST --batch-size $BATCH_SIZE<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. Definindo Vari\u00e1veis de Ambiente no C\u00f3digo da Aplica\u00e7\u00e3o<\/h3>\n\n\n\n<p>Al\u00e9m de vari\u00e1veis de n\u00edvel de sistema operacional, vari\u00e1veis de ambiente podem ser definidas e acessadas diretamente no c\u00f3digo da aplica\u00e7\u00e3o durante a execu\u00e7\u00e3o.<\/p>\n\n\n\n<p>O dicion\u00e1rio <em>os.environ<\/em> em Python cont\u00e9m todas as vari\u00e1veis de ambiente atualmente definidas. Podemos definir novas simplesmente adicionando pares chave-valor:<\/p>\n\n\n\n<p>As vari\u00e1veis de ambiente tamb\u00e9m podem ser definidas e acessadas diretamente dentro do c\u00f3digo da aplica\u00e7\u00e3o. Em Python, o dicion\u00e1rio os.environ cont\u00e9m todas as vari\u00e1veis de ambiente definidas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import os\nos.environ&#91;\"API_KEY\"] = \"123456\" \napi_key = os.environ.get(\"API_KEY\")<\/code><\/pre>\n\n\n\n<p>Ent\u00e3o, o dicion\u00e1rio os.environ permite a configura\u00e7\u00e3o e recupera\u00e7\u00e3o din\u00e2mica de vari\u00e1veis de ambiente dentro do c\u00f3digo Python.<\/p>\n\n\n\n<p>A maioria das linguagens vem acompanhada de suas bibliotecas, oferecendo acesso a vari\u00e1veis de ambiente durante a execu\u00e7\u00e3o.<\/p>\n\n\n\n<p>Voc\u00ea tamb\u00e9m pode usar frameworks como Express, Django e Laravel para ter integra\u00e7\u00f5es mais profundas, como carregamento autom\u00e1tico de arquivos .env contendo vari\u00e1veis de ambiente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Criando Arquivos de Configura\u00e7\u00e3o Local Para Vari\u00e1veis de Ambiente<\/h3>\n\n\n\n<p>Al\u00e9m das vari\u00e1veis de n\u00edvel de sistema, as vari\u00e1veis de ambiente podem ser carregadas a partir dos arquivos de configura\u00e7\u00e3o local de uma aplica\u00e7\u00e3o. Isso mant\u00e9m os detalhes de configura\u00e7\u00e3o separados do c\u00f3digo, mesmo para desenvolvimento e testes locais.<\/p>\n\n\n\n<p>Algumas abordagens populares:<\/p>\n\n\n\n<p><strong>Arquivos .env<\/strong><\/p>\n\n\n\n<p>O formato de arquivo .env popularizado pelo Node.js oferece uma maneira conveniente de especificar vari\u00e1veis de ambiente em um formato de chave-valor:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># .env\nDB_URL=localhost\nAPI_KEY=123456<\/code><\/pre>\n\n\n\n<p>Frameworks web como Django e Laravel carregam automaticamente vari\u00e1veis definidas em arquivos .env para o ambiente da aplica\u00e7\u00e3o. Para outras linguagens como Python, bibliotecas como python-dotenv s\u00e3o respons\u00e1veis por importar arquivos .env:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from dotenv import load_dotenv\nload_dotenv() # Carrega vari\u00e1veis .env\n\nprint(os.environ&#91;'DB_URL']) # localhost<\/code><\/pre>\n\n\n\n<p>A vantagem de usar arquivos .env \u00e9 que eles mant\u00eam a configura\u00e7\u00e3o limpa e separada sem fazer altera\u00e7\u00f5es no c\u00f3digo.<\/p>\n\n\n\n<p><strong>Arquivos de Configura\u00e7\u00e3o JSON<\/strong><\/p>\n\n\n\n<p>Para necessidades de configura\u00e7\u00e3o mais complexas envolvendo m\u00faltiplas vari\u00e1veis de ambiente, usar arquivos JSON ou YAML ajuda a organizar as vari\u00e1veis juntas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ config.json\n{\n  \"api_url\": \"https:\/\/api.example.com\",\n  \"api_key\": \"123456\", \n  \"port\": 3000\n}<\/code><\/pre>\n\n\n\n<p>O c\u00f3digo da aplica\u00e7\u00e3o pode ent\u00e3o carregar rapidamente esses dados JSON como um dicion\u00e1rio para acessar vari\u00e1veis configuradas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import json\n\nconfig = json.load('config.json')  \n\napi_url = config&#91;'api_url']\napi_key = config&#91;'api_key'] \nport = config&#91;'port'] # 3000<\/code><\/pre>\n\n\n\n<p>Isso impede arquivos dotenv desorganizados ao lidar com m\u00faltiplas configura\u00e7\u00f5es de aplicativos.<\/p>\n\n\n\n<h2 id=\"access\" class=\"wp-block-heading\">Como Voc\u00ea Acessa Vari\u00e1veis de Ambiente em Diferentes Linguagens de Programa\u00e7\u00e3o?<\/h2>\n\n\n\n<p>No entanto, escolhermos definir as vari\u00e1veis de ambiente, nossas aplica\u00e7\u00f5es precisam de uma forma consistente de procurar valores durante a execu\u00e7\u00e3o.<\/p>\n\n\n\n<p>Embora existam v\u00e1rias maneiras de definir vari\u00e1veis de ambiente, o c\u00f3digo da aplica\u00e7\u00e3o precisa de uma forma padr\u00e3o de acess\u00e1-las em tempo de execu\u00e7\u00e3o, independentemente da linguagem. Aqui est\u00e1 uma vis\u00e3o geral das t\u00e9cnicas para acessar vari\u00e1veis de ambiente em linguagens populares:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Python<\/h3>\n\n\n\n<p>Python fornece o dicion\u00e1rio os.environ para acessar as vari\u00e1veis de ambiente definidas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import os\n\ndb = os.environ.get('DB_NAME')\n\nprint(db)<\/code><\/pre>\n\n\n\n<p>Podemos obter uma vari\u00e1vel usando os.environ.get(), que retorna None se n\u00e3o definido. Ou acesso direto via os.environ(), que ir\u00e1 gerar KeyError se n\u00e3o estiver presente.<\/p>\n\n\n\n<p>M\u00e9todos adicionais como os.getenv() e os.environ.get() permitem especificar valores padr\u00e3o se n\u00e3o estiverem definidos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">JavaScript (Node.js)<\/h3>\n\n\n\n<p>Em c\u00f3digo JavaScript <a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/pt\/o-que-e-nodejs\/\" rel=\"noopener\">Node.js<\/a>, as vari\u00e1veis de ambiente est\u00e3o dispon\u00edveis no objeto global process.env:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Obter vari\u00e1vel de ambiente\nconst db = process.env.DB_NAME;\n\nconsole.log(db);<\/code><\/pre>\n\n\n\n<p>Se indefinido, process.env conter\u00e1 indefinido. Tamb\u00e9m podemos fornecer padr\u00f5es como:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const db = process.env.DB_NAME || 'defaultdb';<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ruby<\/h3>\n\n\n\n<p>Aplica\u00e7\u00f5es Ruby acessam vari\u00e1veis de ambiente atrav\u00e9s do hash ENV:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Acesse a vari\u00e1vel\ndb = ENV&#91;'DB_NAME']  \n\nputs db<\/code><\/pre>\n\n\n\n<p>N\u00f3s tamb\u00e9m podemos passar um valor padr\u00e3o se a chave desejada n\u00e3o existir:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>db = ENV.fetch('DB_NAME', 'defaultdb')<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">PHP<\/h3>\n\n\n\n<p>PHP fornece m\u00e9todos globais getenv(), $_ENV e $_SERVER para acessar vari\u00e1veis de ambiente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Obter vari\u00e1vel de ambiente\n$db_name = getenv('DB_NAME');\n\n\/\/ Ou acessar arrays $_ENV ou $_SERVER\n$db_name = $_ENV&#91;'DB_NAME'];<\/code><\/pre>\n\n\n\n<p>Dependendo da fonte da vari\u00e1vel, elas podem estar dispon\u00edveis em diferentes globais.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Java<\/h3>\n\n\n\n<p>Em Java, o m\u00e9todo System.getenv() retorna vari\u00e1veis de ambiente que podem ser acessadas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>String dbName = System.getenv(\"DB_NAME\");<\/code><\/pre>\n\n\n\n<p>Isso permite acesso a vari\u00e1veis definidas em um n\u00edvel de sistema globalmente em Java.<\/p>\n\n\n\n<p>Por enquanto, algumas melhores pr\u00e1ticas sobre a higiene das vari\u00e1veis de ambiente.<\/p>\n\n\n\n<h2 id=\"security\" class=\"wp-block-heading\">Guia de Seguran\u00e7a de Vari\u00e1veis de Ambiente<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1600\" height=\"800\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/07-Environment-Variables-Security-Best-Practices.jpg\" alt=\"nunca armazene informa\u00e7\u00f5es sens\u00edveis, use vari\u00e1veis espec\u00edficas do ambiente, mantenha segredos fora do controle de vers\u00e3o, proteja segredos em servidores de produ\u00e7\u00e3o, use algoritmos de criptografia fortes, rotacione segredos regularmente\" class=\"wp-image-43790 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Environment-Variables-Security-Best-Practices.jpg.webp 1600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/07-Environment-Variables-Security-Best-Practices-300x150.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/07-Environment-Variables-Security-Best-Practices-1024x512.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/07-Environment-Variables-Security-Best-Practices-768x384.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/07-Environment-Variables-Security-Best-Practices-1536x768.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Environment-Variables-Security-Best-Practices-600x300.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Environment-Variables-Security-Best-Practices-1200x600.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Environment-Variables-Security-Best-Practices-730x365.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Environment-Variables-Security-Best-Practices-1460x730.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Environment-Variables-Security-Best-Practices-784x392.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Environment-Variables-Security-Best-Practices-1568x784.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/07-Environment-Variables-Security-Best-Practices-877x439.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/800;\" \/><\/figure>\n\n\n\n<p>Quando se trata de gerenciar vari\u00e1veis de ambiente de forma segura, devemos ter em mente v\u00e1rias melhores pr\u00e1ticas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Nunca Armazene Informa\u00e7\u00f5es Sens\u00edveis no C\u00f3digo<\/h3>\n\n\n\n<p>Antes de mais nada, nunca armazene informa\u00e7\u00f5es sens\u00edveis como senhas, chaves de API ou tokens diretamente no seu c\u00f3digo.<\/p>\n\n\n\n<p>Pode ser tentador simplesmente codificar uma senha de banco de dados ou uma chave de criptografia diretamente no seu c\u00f3digo-fonte para acesso r\u00e1pido, mas resista a essa vontade!<\/p>\n\n\n\n<p>Se voc\u00ea acidentalmente enviar esse c\u00f3digo para um reposit\u00f3rio p\u00fablico no GitHub, voc\u00ea estar\u00e1 basicamente transmitindo seus segredos para o mundo inteiro. Imagine se um hacker obtivesse as credenciais do seu banco de dados de produ\u00e7\u00e3o apenas porque elas estavam em texto simples no seu c\u00f3digo-fonte. Pensamento assustador, certo?<\/p>\n\n\n\n<p>Em vez disso, sempre use vari\u00e1veis de ambiente para armazenar qualquer tipo de configura\u00e7\u00e3o sens\u00edvel. Mantenha seus segredos em um local seguro como um arquivo .env ou uma ferramenta de gerenciamento de segredos e referencie-os em seu c\u00f3digo atrav\u00e9s de vari\u00e1veis de ambiente. Por exemplo, em vez de fazer algo assim no seu c\u00f3digo Python:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>db_password = \"supers3cr3tpassw0rd\"<\/code><\/pre>\n\n\n\n<p>Voc\u00ea armazenaria essa senha em uma vari\u00e1vel de ambiente assim:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Arquivo .env\nDB_PASSWORD=supers3cr3tpassw0rd<\/code><\/pre>\n\n\n\n<p>E depois acesse-o em seu c\u00f3digo como:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import os\ndb_password = os.environ.get('DB_PASSWORD')<\/code><\/pre>\n\n\n\n<p>Dessa forma, seus segredos ainda est\u00e3o seguros mesmo que seu c\u00f3digo fonte seja comprometido. As vari\u00e1veis de ambiente atuam como uma camada de abstra\u00e7\u00e3o segura.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Utilizar Vari\u00e1veis Espec\u00edficas do Ambiente<\/h3>\n\n\n\n<p>Outra pr\u00e1tica \u00e9 usar diferentes vari\u00e1veis de ambiente para cada ambiente de aplica\u00e7\u00e3o, como desenvolvimento, staging e produ\u00e7\u00e3o.<\/p>\n\n\n\n<p>Voc\u00ea n\u00e3o vai querer se conectar acidentalmente ao seu banco de dados de produ\u00e7\u00e3o enquanto desenvolve localmente s\u00f3 porque esqueceu de atualizar uma vari\u00e1vel de configura\u00e7\u00e3o! D\u00ea namespace \u00e0s suas vari\u00e1veis de ambiente para cada ambiente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Desenvolvimento\nDEV_API_KEY=abc123\nDEV_DB_URL=localhost\n\n# Produ\u00e7\u00e3o\nPROD_API_KEY=xyz789\nPROD_DB_URL=proddb.amazonaws.com<\/code><\/pre>\n\n\n\n<p>Em seguida, referencie as vari\u00e1veis apropriadas no seu c\u00f3digo dependendo do ambiente atual. Muitos frameworks como o Rails fornecem arquivos de configura\u00e7\u00e3o espec\u00edficos para cada ambiente para este prop\u00f3sito.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mantenha Segredos Fora do Controle de Vers\u00e3o<\/h3>\n\n\n\n<p>\u00c9 crucial tamb\u00e9m manter seus arquivos .env e de configura\u00e7\u00e3o que cont\u00eam segredos fora do controle de vers\u00e3o. Adicione .env ao seu <code>.gitignore<\/code> para n\u00e3o cometer o erro de envi\u00e1-lo acidentalmente para o seu reposit\u00f3rio.<\/p>\n\n\n\n<p>Voc\u00ea pode usar <code>git-secrets<\/code> para verificar a exist\u00eancia de informa\u00e7\u00f5es sens\u00edveis antes de cada commit. Para seguran\u00e7a extra, criptografe seu arquivo de segredos antes de armazen\u00e1-lo. Ferramentas como Ansible Vault e BlackBox podem ajudar com isso.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Segredos Seguros em Servidores de Produ\u00e7\u00e3o<\/h3>\n\n\n\n<p>Ao gerenciar vari\u00e1veis de ambiente em seus servidores de produ\u00e7\u00e3o, evite configur\u00e1-las usando argumentos de linha de comando, que podem ser inspecionados atrav\u00e9s da tabela de processos.<\/p>\n\n\n\n<p>Em vez disso, utilize as ferramentas de gerenciamento de ambiente do seu sistema operacional ou da plataforma de orquestra\u00e7\u00e3o de cont\u00eaineres. Por exemplo, voc\u00ea pode usar Kubernetes Secrets para armazenar e expor segredos de forma segura para os seus pods de aplica\u00e7\u00e3o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Use Algoritmos de Criptografia Fortes<\/h3>\n\n\n\n<p>Use algoritmos de criptografia robustos e modernos ao criptografar seus segredos, seja em tr\u00e2nsito ou em repouso. Evite algoritmos desatualizados como DES ou MD5, que possuem vulnerabilidades conhecidas. Em vez disso, opte por algoritmos padr\u00e3o do setor como AES-256 para criptografia sim\u00e9trica e RSA-2048 ou ECDSA para criptografia assim\u00e9trica.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Rotacione Segredos Regularmente<\/h3>\n\n\n\n<p>Rotacione seus segredos regularmente, especialmente se voc\u00ea suspeitar que eles possam ter sido comprometidos. Trate os segredos como voc\u00ea trataria uma senha \u2014 atualize-os a cada poucos meses. Uma ferramenta de gerenciamento de segredos como Hashicorp Vault ou AWS Secrets Manager pode ajudar a automatizar esse processo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tenha Cuidado com o Registro e Relat\u00f3rio de Erros<\/h3>\n\n\n\n<p>Tenha cuidado com os registros e relat\u00f3rios de erros. Certifique-se de n\u00e3o registrar quaisquer vari\u00e1veis de ambiente que contenham valores sens\u00edveis. Se estiver usando uma ferramenta de rastreamento de erros de terceiros, configure-a para limpar dados sens\u00edveis. A \u00faltima coisa que voc\u00ea quer \u00e9 que seus segredos apare\u00e7am em um rastreamento de pilha em um painel de relat\u00f3rios de exce\u00e7\u00f5es!<\/p>\n\n\n\n<h2 id=\"avoid\" class=\"wp-block-heading\">Quando Evitar Vari\u00e1veis de Ambiente?<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1600\" height=\"777\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/08-When-To-Avoid-Environment-Variables_.jpg\" alt=\"vari\u00e1vel de ambiente com 4 ramifica\u00e7\u00f5es, mas cada uma com um x bloqueando o caminho para configura\u00e7\u00e3o complexa, informa\u00e7\u00f5es sens\u00edveis, m\u00faltiplos ambientes, compartilhamento de equipe\" class=\"wp-image-43791 lazyload\" data-srcset=\"https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-When-To-Avoid-Environment-Variables_.jpg.webp 1600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/08-When-To-Avoid-Environment-Variables_-300x146.jpg 300w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/08-When-To-Avoid-Environment-Variables_-1024x497.jpg 1024w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/08-When-To-Avoid-Environment-Variables_-768x373.jpg 768w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/08-When-To-Avoid-Environment-Variables_-1536x746.jpg 1536w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-When-To-Avoid-Environment-Variables_-600x291.jpg.webp 600w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-When-To-Avoid-Environment-Variables_-1200x583.jpg.webp 1200w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-When-To-Avoid-Environment-Variables_-730x355.jpg.webp 730w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-When-To-Avoid-Environment-Variables_-1460x709.jpg.webp 1460w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-When-To-Avoid-Environment-Variables_-784x381.jpg.webp 784w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-When-To-Avoid-Environment-Variables_-1568x761.jpg.webp 1568w, https:\/\/www-dev.dreamhost.com\/blog\/wp-content\/smush-webp\/2024\/03\/08-When-To-Avoid-Environment-Variables_-877x426.jpg.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/777;\" \/><\/figure>\n\n\n\n<p>Existem v\u00e1rios casos em que as vari\u00e1veis de ambiente devem ser evitadas:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Gerenciando Configura\u00e7\u00e3o Complexa<\/h3>\n\n\n\n<p>Usar vari\u00e1veis de ambiente para gerenciar configura\u00e7\u00f5es de sistemas de software complexos pode se tornar confuso e propenso a erros. \u00c0 medida que o n\u00famero de par\u00e2metros de configura\u00e7\u00e3o aumenta, voc\u00ea acaba com nomes de vari\u00e1veis de ambiente longos que podem colidir involuntariamente. Tamb\u00e9m n\u00e3o h\u00e1 uma maneira f\u00e1cil de organizar valores de configura\u00e7\u00e3o relacionados juntos.<\/p>\n\n\n\n<p>Em vez de vari\u00e1veis de ambiente, considere usar arquivos de configura\u00e7\u00e3o em um formato como JSON ou YAML. Estes permitem que voc\u00ea:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Agrupe par\u00e2metros de configura\u00e7\u00e3o relacionados em uma estrutura aninhada.<\/li>\n\n\n\n<li>Evite colis\u00f5es de nomes encapsulando a configura\u00e7\u00e3o em escopos e namespaces.<\/li>\n\n\n\n<li>Defina tipos de dados personalizados em vez de apenas strings.<\/li>\n\n\n\n<li>Visualize e modifique configura\u00e7\u00f5es rapidamente usando um editor de texto.<\/li>\n\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Armazenando Informa\u00e7\u00f5es Sens\u00edveis<\/h3>\n\n\n\n<p>Embora as vari\u00e1veis de ambiente pare\u00e7am f\u00e1ceis de injetar configura\u00e7\u00f5es externas como chaves API, senhas de banco de dados, etc., isso pode causar problemas de seguran\u00e7a.<\/p>\n\n\n\n<p>O problema \u00e9 que as vari\u00e1veis de ambiente s\u00e3o acess\u00edveis globalmente em um processo. Portanto, se existir uma explora\u00e7\u00e3o em parte da sua aplica\u00e7\u00e3o, ela poder\u00e1 comprometer os segredos armazenados nas vari\u00e1veis de ambiente.<\/p>\n\n\n\n<p>Uma abordagem mais segura \u00e9 usar um servi\u00e7o de gerenciamento de segredos que cuida da criptografia e do controle de acesso. Esses servi\u00e7os permitem o armazenamento de dados sens\u00edveis externamente e fornecem SDKs para a recupera\u00e7\u00e3o de valores de aplicativos.<\/p>\n\n\n\n<p>Portanto, considere usar uma solu\u00e7\u00e3o dedicada de gest\u00e3o de segredos em vez de vari\u00e1veis de ambiente para credenciais e chaves privadas. Isso reduz o risco de expor acidentalmente dados sens\u00edveis atrav\u00e9s de exploits ou registros n\u00e3o intencionais.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Trabalhando com M\u00faltiplos Ambientes<\/h3>\n\n\n\n<p>Gerenciar vari\u00e1veis de ambiente pode se tornar tedioso \u00e0 medida que as aplica\u00e7\u00f5es crescem e s\u00e3o implantadas em v\u00e1rios ambientes (dev, staging, staging, prod). Voc\u00ea pode ter dados de configura\u00e7\u00e3o fragmentados espalhados por diversos scripts bash, ferramentas de implanta\u00e7\u00e3o, etc.<\/p>\n\n\n\n<p>Uma solu\u00e7\u00e3o de gerenciamento de configura\u00e7\u00e3o ajuda a consolidar todas as configura\u00e7\u00f5es espec\u00edficas do ambiente em um local centralizado. Isso pode ser arquivos em um reposit\u00f3rio, um servidor de configura\u00e7\u00e3o dedicado ou integrado com seus pipelines CI\/CD.<\/p>\n\n\n\n<p>Se o objetivo \u00e9 evitar a duplica\u00e7\u00e3o de vari\u00e1veis de ambiente, uma \u00fanica fonte de verdade para configura\u00e7\u00f5es faz mais sentido.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Compartilhando Configura\u00e7\u00e3o Entre Equipes<\/h3>\n\n\n\n<p>J\u00e1 que as vari\u00e1veis de ambiente s\u00e3o carregadas localmente por processo, compartilhar e sincronizar dados de configura\u00e7\u00e3o entre diferentes equipes trabalhando na mesma aplica\u00e7\u00e3o ou conjunto de servi\u00e7os torna-se muito dif\u00edcil.<\/p>\n\n\n\n<p>Cada equipe pode manter sua c\u00f3pia dos valores de configura\u00e7\u00e3o em diferentes scripts bash, manifestos de implanta\u00e7\u00e3o, etc. Essa configura\u00e7\u00e3o descentralizada leva ao seguinte:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Deriva de Configura\u00e7\u00e3o<\/strong>: Sem uma \u00fanica fonte de verdade, \u00e9 f\u00e1cil para a configura\u00e7\u00e3o se tornar inconsistente entre os ambientes \u00e0 medida que diferentes equipes fazem altera\u00e7\u00f5es independentes.<\/li>\n\n\n\n<li><strong>Falta de visibilidade<\/strong>: N\u00e3o existe uma maneira centralizada de visualizar, buscar e analisar o estado completo da configura\u00e7\u00e3o em todos os servi\u00e7os. Isso torna extremamente dif\u00edcil entender como um servi\u00e7o est\u00e1 configurado.<\/li>\n\n\n\n<li><strong>Desafios de auditoria<\/strong>: As altera\u00e7\u00f5es nas vari\u00e1veis de ambiente n\u00e3o s\u00e3o rastreadas de forma padr\u00e3o, tornando dif\u00edcil auditar quem alterou qual configura\u00e7\u00e3o e quando.<\/li>\n\n\n\n<li><strong>Dificuldades de teste<\/strong>: Sem uma maneira f\u00e1cil de capturar instantaneamente e compartilhar a configura\u00e7\u00e3o, garantir ambientes consistentes para desenvolvimento e teste torna-se extremamente complicado.<\/li>\n\n\n<\/ol>\n\n\n\n<p>Em vez dessa abordagem fragmentada, ter uma solu\u00e7\u00e3o de configura\u00e7\u00e3o centralizada permite que as equipes gerenciem a configura\u00e7\u00e3o a partir de uma \u00fanica plataforma ou reposit\u00f3rio.<\/p>\n\n\n\n<h2 id=\"build\" class=\"wp-block-heading\">Construa seus aplicativos com vari\u00e1veis de ambiente para o longo prazo<\/h2>\n\n\n\n<p>\u00c0 medida que sua aplica\u00e7\u00e3o cresce, considere como voc\u00ea pode precisar de maneiras mais avan\u00e7adas para gerenciar suas configura\u00e7\u00f5es.<\/p>\n\n\n\n<p>O que parece simples agora pode se tornar mais complicado mais tarde. Provavelmente, voc\u00ea precisar\u00e1 de melhores maneiras de controlar o acesso, compartilhar configura\u00e7\u00f5es de equipe, organizar tudo claramente e atualizar as configura\u00e7\u00f5es de forma suave.<\/p>\n\n\n\n<p>N\u00e3o se coloque em uma situa\u00e7\u00e3o dif\u00edcil usando apenas vari\u00e1veis de ambiente desde o in\u00edcio. Voc\u00ea quer planejar como lidar com as configura\u00e7\u00f5es conforme suas necessidades aumentam.<\/p>\n\n\n\n<p>Enquanto as vari\u00e1veis de ambiente s\u00e3o excelentes para lidar com dados focados no ambiente, como credenciais de login, nomes de bancos de dados, IPs locais, etc, voc\u00ea deseja criar um sistema que siga princ\u00edpios s\u00f3lidos como seguran\u00e7a, compartilhabilidade, organiza\u00e7\u00e3o e a capacidade de se adaptar rapidamente \u00e0s mudan\u00e7as.<\/p>\n\n\n\n<p>As alternativas que discutimos, como usar um arquivo de configura\u00e7\u00e3o dedicado ou servi\u00e7o, possuem recursos valiosos que se alinham com esses princ\u00edpios. Isso ajudar\u00e1 voc\u00ea a continuar se movendo rapidamente sem ser retardado.<\/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","protected":false},"excerpt":{"rendered":"<p>Este guia amig\u00e1vel para iniciantes explica o que h\u00e1 de t\u00e3o bom nas vari\u00e1veis de ambiente e como voc\u00ea pode us\u00e1-las a seu favor.<\/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":"","toc_headlines":"[[\"what\",\"O que S\u00e3o Vari\u00e1veis de Ambiente?\"],[\"why\",\"Por que as Vari\u00e1veis de Ambiente s\u00e3o Valiosas?\"],[\"define\",\"Como Voc\u00ea Pode Definir Vari\u00e1veis de Ambiente\"],[\"access\",\"Como Voc\u00ea Acessa Vari\u00e1veis de Ambiente em Diferentes Linguagens de Programa\u00e7\u00e3o?\"],[\"security\",\"Guia de Seguran\u00e7a de Vari\u00e1veis de Ambiente\"],[\"avoid\",\"Quando Evitar Vari\u00e1veis de Ambiente?\"],[\"build\",\"Construa seus aplicativos com vari\u00e1veis de ambiente para o longo prazo\"]]","hide_toc":false,"footnotes":""},"categories":[14393],"tags":[],"class_list":["post-52136","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hosting-web-pt"],"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>O Que S\u00e3o Vari\u00e1veis de Ambiente: Um Guia Completo Para Iniciantes - DreamHost Blog<\/title>\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\/pt\/variaveis-de-ambiente\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"O Que S\u00e3o Vari\u00e1veis de Ambiente: Um Guia Completo Para Iniciantes\" \/>\n<meta property=\"og:description\" content=\"Este guia amig\u00e1vel para iniciantes explica o que h\u00e1 de t\u00e3o bom nas vari\u00e1veis de ambiente e como voc\u00ea pode us\u00e1-las a seu favor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www-dev.dreamhost.com\/blog\/pt\/variaveis-de-ambiente\/\" \/>\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-05-26T19:45:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/1460-x-1095-BLOG-HERO-_What-are-Environment-Variables_A-Thorough-Guide-for-Beginners.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"1095\" \/>\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: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=\"21 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"O Que S\u00e3o Vari\u00e1veis de Ambiente: Um Guia Completo Para Iniciantes - DreamHost Blog","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\/pt\/variaveis-de-ambiente\/","og_locale":"en_US","og_type":"article","og_title":"O Que S\u00e3o Vari\u00e1veis de Ambiente: Um Guia Completo Para Iniciantes","og_description":"Este guia amig\u00e1vel para iniciantes explica o que h\u00e1 de t\u00e3o bom nas vari\u00e1veis de ambiente e como voc\u00ea pode us\u00e1-las a seu favor.","og_url":"https:\/\/www-dev.dreamhost.com\/blog\/pt\/variaveis-de-ambiente\/","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-05-26T19:45:43+00:00","og_image":[{"width":1460,"height":1095,"url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2024\/03\/1460-x-1095-BLOG-HERO-_What-are-Environment-Variables_A-Thorough-Guide-for-Beginners.jpg","type":"image\/jpeg"}],"author":"Brian Andrus","twitter_card":"summary_large_image","twitter_creator":"@dreamhost","twitter_site":"@dreamhost","twitter_misc":{"Written by":"Brian Andrus","Est. reading time":"21 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www-dev.dreamhost.com\/blog\/pt\/variaveis-de-ambiente\/#article","isPartOf":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pt\/variaveis-de-ambiente\/"},"author":{"name":"Brian Andrus","@id":"https:\/\/www-dev.dreamhost.com\/blog\/#\/schema\/person\/a3f8817a11ac0b464bfbcb6c505cb82b"},"headline":"O Que S\u00e3o Vari\u00e1veis de Ambiente: Um Guia Completo Para Iniciantes","datePublished":"2024-03-29T14:00:00+00:00","dateModified":"2025-05-26T19:45:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pt\/variaveis-de-ambiente\/"},"wordCount":3685,"publisher":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#organization"},"image":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pt\/variaveis-de-ambiente\/#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":["Hosting Web"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www-dev.dreamhost.com\/blog\/pt\/variaveis-de-ambiente\/","url":"https:\/\/www-dev.dreamhost.com\/blog\/pt\/variaveis-de-ambiente\/","name":"O Que S\u00e3o Vari\u00e1veis de Ambiente: Um Guia Completo Para Iniciantes - DreamHost Blog","isPartOf":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pt\/variaveis-de-ambiente\/#primaryimage"},"image":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pt\/variaveis-de-ambiente\/#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-05-26T19:45:43+00:00","breadcrumb":{"@id":"https:\/\/www-dev.dreamhost.com\/blog\/pt\/variaveis-de-ambiente\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www-dev.dreamhost.com\/blog\/pt\/variaveis-de-ambiente\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www-dev.dreamhost.com\/blog\/pt\/variaveis-de-ambiente\/#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\/pt\/variaveis-de-ambiente\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dhblog.dream.press\/blog\/"},{"@type":"ListItem","position":2,"name":"O Que S\u00e3o Vari\u00e1veis de Ambiente: Um Guia Completo Para Iniciantes"}]},{"@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":"pt","translations":{"pt":52136,"es":43798,"en":43774,"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\/52136","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=52136"}],"version-history":[{"count":4,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/52136\/revisions"}],"predecessor-version":[{"id":63676,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/52136\/revisions\/63676"}],"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=52136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/categories?post=52136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www-dev.dreamhost.com\/blog\/wp-json\/wp\/v2\/tags?post=52136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}