{"id":51121,"date":"2022-07-11T04:02:48","date_gmt":"2022-07-11T07:02:48","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=51121&#038;post_type=knowledgebase&#038;preview_id=51121"},"modified":"2025-10-01T17:03:57","modified_gmt":"2025-10-01T20:03:57","slug":"o-que-sao-variaveis-de-ambiente","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/","title":{"rendered":"Vari\u00e1veis de Ambiente: O que S\u00e3o e Como Utiliz\u00e1-las"},"content":{"rendered":"<p>Se voc\u00ea j\u00e1 trabalhou em qualquer forma de <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-um-desenvolvedor-full-stack\/\">desenvolvimento de aplicativo<\/a>, voc\u00ea j\u00e1 deve ter ouvido falar do termo &#8220;vari\u00e1veis de ambiente&#8221; Vari\u00e1veis de ambiente s\u00e3o usadas para armazenar segredos e dados de configura\u00e7\u00e3o do aplicativo, recuperados pelo seu aplicativo em execu\u00e7\u00e3o quando necess\u00e1rio.<\/p>\n<p>As vari\u00e1veis de ambiente adicionam dinamismo \u00e0 sua base de c\u00f3digo est\u00e1tico; voc\u00ea pode alternar entre recursos internos\/externos com base no valor da vari\u00e1vel de ambiente passada para o seu aplicativo.<\/p>\n<p>Este artigo vai explicar detalhadamente sobre as vari\u00e1veis de ambiente. Voc\u00ea vai aprender algumas maneiras populares de criar e gerenciar vari\u00e1veis de ambiente, e entender quando utiliz\u00e1-las. Ao final deste artigo, voc\u00ea conseguir\u00e1 usar as vari\u00e1veis de ambiente de forma eficaz e com confian\u00e7a em seus aplicativos.<\/p>\n<p>Vamos come\u00e7ar!<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>O que \u00e9 uma vari\u00e1vel de ambiente?<\/h2>\n<p>Reiterando a explica\u00e7\u00e3o acima, vari\u00e1veis de ambiente s\u00e3o vari\u00e1veis dispon\u00edveis ao seu programa\/aplicativo dinamicamente durante o tempo de execu\u00e7\u00e3o. O valor destas vari\u00e1veis pode vir de uma gama de fontes &#8211; arquivos de texto, gerenciadores secretos de terceiros, scripts de chamadas, etc.<\/p>\n<p>O que \u00e9 importante aqui \u00e9 que o valor dessas vari\u00e1veis de ambiente n\u00e3o \u00e9 codificado de forma r\u00edgida em seu programa. Elas s\u00e3o verdadeiramente din\u00e2micas e podem ser alteradas com base no ambiente onde o seu programa est\u00e1 rodando.<\/p>\n\n<h2>Tipos de vari\u00e1veis de ambiente<\/h2>\n<p>Existem tr\u00eas tipos principais de vari\u00e1veis de ambiente em um sistema operacional baseado no Windows, cada uma com seus casos de uso espec\u00edficos. Vamos discuti-las individualmente.<\/p>\n<h3>1. Vari\u00e1veis de ambiente do sistema<\/h3>\n<p>As vari\u00e1veis de ambiente do sistema residem na raiz mais alta do sistema e s\u00e3o as mesmas para todos os processos em execu\u00e7\u00e3o em um sistema sob todos os perfis de usu\u00e1rios do sistema. O administrador do sistema\/sistema operacional geralmente as define, e raramente \u00e9 necess\u00e1rio mexer nelas.<\/p>\n<p>Um dos usos mais comuns de uma vari\u00e1vel de ambiente do sistema \u00e9 a cria\u00e7\u00e3o de uma vari\u00e1vel <code>PATH<\/code> para um pacote\/library global a ser usado por todos os usu\u00e1rios do sistema.<\/p>\n<h3>2. Vari\u00e1veis de ambiente do usu\u00e1rio<\/h3>\n<p>Vari\u00e1veis de ambiente de usu\u00e1rio s\u00e3o aquelas que s\u00e3o locais para um perfil de usu\u00e1rio em sistemas Windows. Estas vari\u00e1veis s\u00e3o usadas para armazenar informa\u00e7\u00f5es espec\u00edficas do usu\u00e1rio, como o caminho para uma instala\u00e7\u00e3o local de bibliotecas que n\u00e3o devem ser usadas por todos os usu\u00e1rios, valores espec\u00edficos para programas instalados apenas para usu\u00e1rios espec\u00edficos, etc.<\/p>\n<p>Voc\u00ea n\u00e3o precisa do administrador do sistema para fazer altera\u00e7\u00f5es nestas vari\u00e1veis; voc\u00ea mesmo pode fazer isso como um usu\u00e1rio. Estas vari\u00e1veis s\u00e3o \u00fateis ao implementar altera\u00e7\u00f5es locais em seu sistema sem afetar outros usu\u00e1rios.<\/p>\n<h3>3. Tempo de execu\u00e7\u00e3o\/Vari\u00e1veis de ambiente de processo<\/h3>\n<p>As vari\u00e1veis de ambiente de tempo de execu\u00e7\u00e3o s\u00e3o ainda mais restritas apenas ao tempo de execu\u00e7\u00e3o ou ao processo ao qual elas est\u00e3o associadas. Estas s\u00e3o normalmente definidas pelo processo pai que cria o novo processo e \u00e9 acompanhado pelas vari\u00e1veis de ambiente do sistema e do usu\u00e1rio tamb\u00e9m.<\/p>\n<p>Voc\u00ea pode usar o script de terminal para criar e armazenar estas vari\u00e1veis em tempo real. Vari\u00e1veis de tempo de execu\u00e7\u00e3o geralmente n\u00e3o s\u00e3o permanentes a menos que sejam roteirizadas, e voc\u00ea precisa defini-las sempre que voc\u00ea iniciar um novo processo.<\/p>\n<h3>Vari\u00e1veis de ambiente em sistemas baseados em Unix<\/h3>\n<p>Ao contr\u00e1rio dos sistemas Windows, os sistemas baseados em Unix n\u00e3o possuem tr\u00eas camadas de tipos vari\u00e1veis de ambiente. Em tais sistemas, tudo \u00e9 armazenado sob um objeto <code>var<\/code> e pode ser acessado\/modificado pelo programa em execu\u00e7\u00e3o.<\/p>\n<p>Se voc\u00ea precisa definir algumas vari\u00e1veis de ambiente como padr\u00e3o para serem carregadas cada vez que qualquer programa roda em seu sistema, voc\u00ea precisa defini-las em arquivos como <code>.~\/bashrc<\/code> ou <code>~.profile<\/code> que s\u00e3o carregados quando o sistema inicia.<\/p>\n<h3>Vari\u00e1veis de ambiente vs vari\u00e1veis de pseudo-ambiente<\/h3>\n<p>Uma linha separada de vari\u00e1veis de ambiente din\u00e2mico est\u00e1 dispon\u00edvel em sistemas baseados em Windows e DOS, conhecidos como vari\u00e1veis de pseudo-ambiente. A estas n\u00e3o s\u00e3o atribu\u00eddos estaticamente pares de chaves e valores, mas sim indica\u00e7\u00f5es din\u00e2micas que retornam v\u00e1rios valores quando consultadas.<\/p>\n<p>Enquanto voc\u00ea pode atribuir um valor a uma vari\u00e1vel de ambiente manualmente usando o comando <code>SET<\/code> ou seu equivalente, voc\u00ea n\u00e3o pode atribuir valores a vari\u00e1veis de pseudo ambiente. H\u00e1 uma <a href=\"https:\/\/en.wikipedia.org\/wiki\/Environment_variable#Windows_2\" target=\"_blank\" rel=\"noopener noreferrer\">lista fixa<\/a> de tais vari\u00e1veis, e voc\u00ea pode us\u00e1-las em seu c\u00f3digo para facilitar seu trabalho. Alguns casos de uso popular incluem <code>%CD%<\/code> para o diret\u00f3rio atual e <code>%TIME%<\/code> para a hora atual.<\/p>\n<h2>Por que voc\u00ea deve usar as vari\u00e1veis de ambiente?<\/h2>\n<p>Agora que voc\u00ea entende o que \u00e9 uma vari\u00e1vel de ambiente e seus v\u00e1rios tipos, \u00e9 hora de saber porque voc\u00ea deve us\u00e1-la extensivamente em seus aplicativos.<\/p>\n<h3>Separa\u00e7\u00e3o de responsabilidades<\/h3>\n<p>Uma das raz\u00f5es mais importantes pelas quais voc\u00ea deve usar vari\u00e1veis de ambiente em seus aplicativos \u00e9 para aderir a um princ\u00edpio de design popular e \u00fatil &#8211; a separa\u00e7\u00e3o de responsabilidades. O princ\u00edpio de design diz que os softwares devem ser divididos em se\u00e7\u00f5es distintas para gerenci\u00e1-los eficientemente. Cada se\u00e7\u00e3o deve ser baseada em uma das principais preocupa\u00e7\u00f5es do programa, e deve haver um acoplamento m\u00ednimo entre tais se\u00e7\u00f5es.<\/p>\n<p>Voc\u00ea pode considerar a configura\u00e7\u00e3o do aplicativo como uma dessas preocupa\u00e7\u00f5es; portanto, ela precisa ser separada do programa principal. Uma das melhores maneiras de fazer isso \u00e9 armazen\u00e1-la em um arquivo externo e injet\u00e1-la conforme necess\u00e1rio. As vari\u00e1veis de ambiente ajudam a isolar os dados de configura\u00e7\u00e3o cr\u00edticos do aplicativo usando arquivos de ambiente ou armazenamentos remotos de vari\u00e1veis. Dessa forma, seus desenvolvedores t\u00eam acesso apenas \u00e0s informa\u00e7\u00f5es necess\u00e1rias.<\/p>\n<h3>Mantendo conjuntos de configura\u00e7\u00e3o independentes atrav\u00e9s de ambientes<\/h3>\n<p>Al\u00e9m de isolar as configura\u00e7\u00f5es do aplicativo do seu c\u00f3digo-fonte, voc\u00ea tamb\u00e9m precisa ser capaz de alternar entre os conjuntos de dados de configura\u00e7\u00e3o facilmente. Se voc\u00ea escolher codificar os valores de configura\u00e7\u00e3o do seu aplicativo em seu c\u00f3digo-fonte, pode tornar-se quase imposs\u00edvel substituir esses valores com base em condi\u00e7\u00f5es externas, como ambientes de implanta\u00e7\u00e3o.<\/p>\n<p>O uso de vari\u00e1veis de ambiente ajuda voc\u00ea a desacoplar seus dados de configura\u00e7\u00e3o do seu c\u00f3digo e padronizar a forma como essa informa\u00e7\u00e3o \u00e9 fornecida ao seu aplicativo, o que permite que voc\u00ea modifique\/troque as informa\u00e7\u00f5es que est\u00e3o sendo fornecidas na hora.<\/p>\n<h3>Protegendo os segredos<\/h3>\n<p>Seus segredos de aplicativos est\u00e3o sob informa\u00e7\u00e3o sens\u00edvel. Se pessoas erradas colocarem suas m\u00e3os nelas, elas podem acessar a arquitetura interna do seu aplicativo e recursos de terceiros. Exemplos comuns incluem chaves AWS e detalhes da conta do sistema. O acesso n\u00e3o autorizado a essas chaves pode levar \u00e0 perda de dinheiro e de dados do aplicativo. Hackers podem at\u00e9 mesmo ir ao ponto de restringir seu aplicativo de funcionar normalmente.<\/p>\n<p>Portanto, \u00e9 vital que voc\u00ea proteja estes segredos. Deix\u00e1-los em sua base de c\u00f3digo pode fazer com que todos os seus desenvolvedores tenham acesso a eles. Se voc\u00ea n\u00e3o seguir os m\u00e9todos apropriados de ofusca\u00e7\u00e3o de c\u00f3digo, seus aplicativos podem ser projetados de forma reversa para recuperar as chaves que est\u00e3o entre seus c\u00f3digos. O isolamento desses segredos atrav\u00e9s de vari\u00e1veis de ambiente pode impedir que tais cen\u00e1rios aconte\u00e7am.<\/p>\n<h2>Exemplos de casos de uso de vari\u00e1veis de ambiente<\/h2>\n<p>Agora que voc\u00ea tem uma ideia clara de como as vari\u00e1veis de ambiente funcionam e como voc\u00ea deve us\u00e1-las, aqui est\u00e3o alguns cen\u00e1rios comuns onde voc\u00ea pode usar vari\u00e1veis de ambiente:<\/p>\n<ul>\n<li><strong>Tipo de ambiente<\/strong>: Vari\u00e1veis de ambiente s\u00e3o frequentemente usadas para armazenar o nome do ambiente no qual o aplicativo est\u00e1 sendo executado atualmente. A l\u00f3gica do aplicativo pode usar este valor para acessar o conjunto certo de recursos ou ativar\/desativar certos recursos, ou se\u00e7\u00f5es do aplicativo.<\/li>\n<li><strong>Nome do dom\u00ednio<\/strong>: O nome de dom\u00ednio de um aplicativo pode variar conforme o ambiente em que est\u00e1 sendo executado. Isol\u00e1-lo tamb\u00e9m ajuda voc\u00ea a fazer facilmente altera\u00e7\u00f5es no nome de dom\u00ednio do seu aplicativo sem procurar por suas ocorr\u00eancias em toda a base de c\u00f3digo.<\/li>\n<li><strong>URLs de API<\/strong>: Cada ambiente do seu aplicativo pode ter APIs implantadas em ambientes diferentes tamb\u00e9m.<\/li>\n<li><strong>Chaves privadas<\/strong>: Chaves para servi\u00e7os e recursos pagos precisam ser isoladas do c\u00f3digo-fonte do aplicativo para que elas n\u00e3o caiam acidentalmente em m\u00e3os erradas.<\/li>\n<li>\n<div class=\"group w-full text-gray-800 dark:text-gray-100 border-b border-black\/10 dark:border-gray-900\/50 bg-gray-50 dark:bg-[#444654]\">\n<div class=\"flex p-4 gap-4 text-base md:gap-6 md:max-w-2xl lg:max-w-[38rem] xl:max-w-3xl md:py-6 lg:px-0 m-auto\">\n<div class=\"relative flex w-[calc(100%-50px)] flex-col gap-1 md:gap-3 lg:w-[calc(100%-115px)]\">\n<div class=\"flex flex-grow flex-col gap-3\">\n<div class=\"min-h-[20px] flex flex-col items-start gap-4 whitespace-pre-wrap break-words\">\n<div class=\"markdown prose w-full break-words dark:prose-invert light\">\n<p><strong>N\u00fameros de conta de servi\u00e7o, etc<\/strong>: Voc\u00ea pode variar outras informa\u00e7\u00f5es espec\u00edficas do sistema, como n\u00fameros de conta de servi\u00e7o, keytabs, etc., com base no ambiente do aplicativo para gerenciamento e monitoramento de recursos.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"flex justify-between lg:block\">\n<div class=\"text-gray-400 flex self-end lg:self-center justify-center mt-2 gap-2 md:gap-3 lg:gap-1 lg:absolute lg:top-0 lg:translate-x-full lg:right-0 lg:mt-0 lg:pl-2 visible\">\n<p>\u00a0<\/p>\n<div class=\"flex gap-1\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<\/ul>\n<h2>Como armazenar vari\u00e1veis de ambiente<\/h2>\n<p>Agora que voc\u00ea entende porque as vari\u00e1veis de ambiente s\u00e3o importantes, \u00e9 hora de olhar como voc\u00ea pode armazen\u00e1-las e acess\u00e1-las em seu aplicativo. Discutidas abaixo s\u00e3o tr\u00eas maneiras diferentes, por\u00e9m populares, de gerenciar vari\u00e1veis de ambiente em um aplicativo.<\/p>\n<h3>Usando arquivos .env<\/h3>\n<p><code>.env<\/code> s\u00e3o sem d\u00favida as formas mais f\u00e1ceis e mais populares de gerenciar vari\u00e1veis de ambiente. A ideia aqui \u00e9 simples &#8211; voc\u00ea armazena suas vari\u00e1veis de ambiente em um arquivo chamado <code>.env<\/code> na raiz do seu projeto. O aplicativo consulta as vari\u00e1veis neste arquivo e as carrega para uso durante o tempo de execu\u00e7\u00e3o. Aqui est\u00e1 como um arquivo <code>.env<\/code> t\u00edpico se parece:<\/p>\n<pre><code class=\"language-bash\">VAR_UNO=SOME_KEY_HERE\nVAR_DOS=SOME_OTHER_KEY_HERE\n<\/code><\/pre>\n<p><code>.env<\/code> tamb\u00e9m permitem que voc\u00ea defina conjuntos de vari\u00e1veis de ambiente e as acesse com base no ambiente de tempo de execu\u00e7\u00e3o do seu aplicativo ou outros fatores. Ao inv\u00e9s de salvar o arquivo como simplesmente <code>.env<\/code>, voc\u00ea pode fazer mais de um arquivo e mant\u00ea-los como <code>.env.dev<\/code> e <code>.env.prod<\/code>. Dentro destes arquivos, voc\u00ea pode definir os mesmos conjuntos de vari\u00e1veis, mas com valores variados, dependendo do ambiente.<\/p>\n<h4>Exemplo de template<\/h4>\n<p>Ao trabalhar com arquivos <code>.env<\/code>, n\u00e3o \u00e9 recomendado adicion\u00e1-los ao seu sistema de controle de vers\u00e3o (mais sobre isso adiante). Portanto, voc\u00ea deve definir um &#8220;.env.template&#8221; em seu projeto para que os desenvolvedores possam seguir o template e criar um arquivo <code>.env<\/code> localmente.<\/p>\n<p>Aqui est\u00e1 como seria um arquivo <code>.env.template<\/code>:<\/p>\n<pre><code class=\"language-bash\">VAR_UNO= # Your value here\nVAR_DOS= # Your value here\n<\/code><\/pre>\n<p>N\u00e3o tem que seguir nenhuma conven\u00e7\u00e3o desde que seja autoexplicativa para \u00e0 sua equipe de desenvolvimento. Para simplificar este processo, voc\u00ea tamb\u00e9m poderia usar pacotes como o <a href=\"https:\/\/www.npmjs.com\/package\/env-template\" target=\"_blank\" rel=\"noopener noreferrer\">env-template<\/a>.<\/p>\n<h4>Pr\u00f3s<\/h4>\n<p>Aqui est\u00e3o algumas raz\u00f5es pelas quais voc\u00ea deve considerar o uso de arquivos <code>.env<\/code> para gerenciar vari\u00e1veis de ambiente em seu aplicativo.<\/p>\n<h5>Simples de usar<\/h5>\n<p>Este m\u00e9todo \u00e9 o mais simples na linha de t\u00e9cnicas de gerenciamento de vari\u00e1veis de ambiente. Tudo o que voc\u00ea precisa fazer \u00e9 criar um arquivo de texto simples que contenha seus segredos e armazen\u00e1-lo na raiz do seu projeto.<\/p>\n<p>Mudar de ambiente \u00e9 t\u00e3o simples quanto mudar o pr\u00f3prio arquivo env. Voc\u00ea pode armazenar v\u00e1rios arquivos pelos nomes <code>.env.dev<\/code>, <code>.env.prod<\/code>, <code>.env.uat<\/code>, etc., e configurar seu c\u00f3digo-fonte para acessar esses arquivos com base no ambiente em que ele est\u00e1 sendo executado.<\/p>\n<h5>Acesso local<\/h5>\n<p>Voc\u00ea pode facilmente configurar arquivos <code>.env<\/code> em um ambiente de desenvolvimento local. Ao contr\u00e1rio dos gerenciadores de vari\u00e1veis nativas da plataforma, voc\u00ea n\u00e3o precisa implementar seu aplicativo para alavancar a funcionalidade das vari\u00e1veis do ambiente. Comparado aos gerenciadores secretos, os arquivos <code>.env<\/code> s\u00e3o mais f\u00e1ceis de configurar localmente, e n\u00e3o h\u00e1 depend\u00eancia de rede para acessar seus segredos de aplicativo.<\/p>\n<h5>Suporte de c\u00f3digo aberto<\/h5>\n<p>Existem in\u00fameros pacotes de c\u00f3digo aberto para ajud\u00e1-lo a carregar e gerenciar segredos de aplicativos de arquivos <code>env<\/code>. Voc\u00ea n\u00e3o precisa depender de servi\u00e7os pagos, nem suas op\u00e7\u00f5es s\u00e3o limitadas quando se trata de gerenciamento de segredos de aplicativos. Existe uma grande variedade de bibliotecas de c\u00f3digo aberto de terceiros para ajudar voc\u00ea a gerenciar seus arquivos de inveja. Alguns exemplos populares\/usados s\u00e3o <a href=\"https:\/\/www.npmjs.com\/package\/dotenv\" target=\"_blank\" rel=\"noopener noreferrer\">dotenv<\/a>, <a href=\"https:\/\/www.npmjs.com\/package\/env-template\" target=\"_blank\" rel=\"noopener noreferrer\">env-template<\/a>, e <a href=\"https:\/\/www.npmjs.com\/package\/cross-env\" target=\"_blank\" rel=\"noopener noreferrer\">cross-env<\/a>.<\/p>\n<h4>Contras<\/h4>\n<p>Aqui est\u00e3o algumas desvantagens dos arquivos de inveja que voc\u00ea deve conhecer antes de us\u00e1-los em seus projetos.<\/p>\n<h5>Formata\u00e7\u00e3o<\/h5>\n<p><code>.env<\/code> arquivos armazenam seus segredos de aplicativo na forma de pares de valores-chave. O formato usual para armazenar vari\u00e1veis de ambiente em um arquivo <code>.env<\/code> \u00e9:<\/p>\n<pre><code class=\"language-bash\">Key1=Value1\n<\/code><\/pre>\n<p>Voc\u00ea precisa se ater estritamente a este formato para que seu aplicativo seja capaz de ler seus segredos com sucesso. Se voc\u00ea cometer um pequeno erro em algum lugar entre dezenas ou centenas de linhas de vari\u00e1veis de ambiente, o arquivo inteiro pode n\u00e3o ser analisado, e seu programa ir\u00e1 lan\u00e7ar erros n\u00e3o relacionados ao todo. O fato de que h\u00e1 um erro de an\u00e1lise com seu arquivo <code>.env<\/code> pode nem mesmo ser destacado. \u00c9 por isso que voc\u00ea precisa ser cuidadoso ao usar os arquivos <code>.env<\/code>.<\/p>\n<h5>Vulner\u00e1vel a vazamentos acidentais de segredos durante o compartilhamento\/armazenamento<\/h5>\n<p>Como os arquivos <code>.env<\/code> s\u00e3o arquivos de texto simples, eles s\u00e3o vulner\u00e1veis a exposi\u00e7\u00e3o acidental quando armazenados em um disco r\u00edgido compartilhado ou enviados por meio de uma rede n\u00e3o segura. Portanto, \u00e9 necess\u00e1rio ter cuidado especial para n\u00e3o vazar seus segredos de aplicativo quando voc\u00ea os armazena usando arquivos <code>.env<\/code>.<\/p>\n<h3>Usando o armazenamento de vari\u00e1veis nativas da plataforma<\/h3>\n<p>Outra op\u00e7\u00e3o popular para o armazenamento de vari\u00e1veis de ambiente \u00e9 confiar no armazenamento de vari\u00e1veis da sua plataforma de implanta\u00e7\u00e3o. A maioria dos ambientes de implanta\u00e7\u00e3o, tais como Heroku, <a href=\"https:\/\/kinsta.com\/pt\/alternativa-aws\/\">AWS<\/a>, Netlify, etc., fornecem um espa\u00e7o para os usu\u00e1rios carregarem segredos, posteriormente injetados no tempo de execu\u00e7\u00e3o do seu aplicativo. Voc\u00ea pode verificar a documenta\u00e7\u00e3o da sua plataforma de implanta\u00e7\u00e3o para saber se eles a suportam e como come\u00e7ar a us\u00e1-la.<\/p>\n<p>Aqui est\u00e1 uma breve vis\u00e3o geral do gerenciador de vari\u00e1veis de ambiente do Netlify:<\/p>\n<figure id=\"attachment_125214\" aria-describedby=\"caption-attachment-125214\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125214 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/netlify-environment-variable-manager-1024x627.png\" alt=\"Gerenciador de vari\u00e1veis de ambiente do Netlify\" width=\"1024\" height=\"627\"><figcaption id=\"caption-attachment-125214\" class=\"wp-caption-text\">Gerenciador de vari\u00e1veis de ambiente do Netlify<\/figcaption><\/figure>\n<h4>Pr\u00f3s<\/h4>\n<p>Aqui est\u00e1 porque voc\u00ea deve considerar o uso de solu\u00e7\u00f5es de armazenamento vari\u00e1vel nativo da plataforma.<\/p>\n<h5>Altamente seguro<\/h5>\n<p>Como esta op\u00e7\u00e3o \u00e9 gerenciada inteiramente pela sua plataforma de implanta\u00e7\u00e3o, ela \u00e9 destinada a ser mais segura do que armazenar seus segredos em um <a href=\"https:\/\/kinsta.com\/pt\/blog\/melhores-editores-texto\/\">arquivo de texto simples<\/a>. Voc\u00ea pode controlar quem tem acesso ao gerenciador de vari\u00e1veis, e voc\u00ea pode ter certeza de que os segredos nunca ser\u00e3o movidos acidentalmente para o seu VCS.<\/p>\n<h5>F\u00e1cil de atualizar<\/h5>\n<p>Atualizar as vari\u00e1veis de ambiente quando elas s\u00e3o armazenadas independentemente \u00e9 mais simples &#8211; voc\u00ea n\u00e3o precisa editar seu c\u00f3digo-fonte e fazer uma nova vers\u00e3o para ele. Voc\u00ea pode simplesmente mudar os valores na plataforma e reconstruir seu projeto. Ele receber\u00e1 os novos valores na pr\u00f3xima vez em que for iniciado.<\/p>\n<p>As dificuldades de formata\u00e7\u00e3o tamb\u00e9m s\u00e3o eliminadas, j\u00e1 que a maioria dos gerenciadores de implanta\u00e7\u00e3o espec\u00edficos da plataforma fazem a verifica\u00e7\u00e3o dos campos conforme voc\u00ea os insere. Em casos como o da Netlify, voc\u00ea insere os segredos em uma forma pr\u00e9-formatada, eliminando as chances de cometer erros de formata\u00e7\u00e3o.<\/p>\n<h5>Permite a colabora\u00e7\u00e3o<\/h5>\n<p>Como as plataformas de implanta\u00e7\u00e3o podem ser acessadas por toda \u00e0 sua equipe, voc\u00ea pode facilmente compartilhar os segredos com as pessoas certas sem ter que enviar arquivos de texto atrav\u00e9s da internet. Voc\u00ea pode controlar quem tem acesso ao gerenciador de vari\u00e1veis (na maioria dos casos) e us\u00e1-lo como um reposit\u00f3rio central para os seus segredos de aplicativo.<\/p>\n<h4>Contras<\/h4>\n<p>Enquanto os gerenciadores de vari\u00e1veis da plataforma parecem ser apenas a solu\u00e7\u00e3o que voc\u00ea precisa, h\u00e1 alguns problemas que voc\u00ea deve ter em mente antes de optar por eles.<\/p>\n<h5>Dependentes da plataforma<\/h5>\n<p>Como o nome deles diz, eles s\u00e3o altamente espec\u00edficos para a plataforma que voc\u00ea est\u00e1 usando. Em alguns casos, sua plataforma de implanta\u00e7\u00e3o pode at\u00e9 mesmo n\u00e3o oferecer tal servi\u00e7o. Mudar sua plataforma de implanta\u00e7\u00e3o para ter acesso a tal servi\u00e7o pode n\u00e3o parecer ser a melhor decis\u00e3o.<\/p>\n<h5>N\u00e3o-uniforme<\/h5>\n<p>Como eles s\u00e3o oferecidos e gerenciados completamente pela plataforma de implanta\u00e7\u00e3o, tais servi\u00e7os podem ser altamente n\u00e3o-uniformes. Mover vari\u00e1veis de uma plataforma para outra pode ser problem\u00e1tico. Voc\u00ea n\u00e3o pode nem mesmo assumir que cada plataforma de implanta\u00e7\u00e3o ofereceria as op\u00e7\u00f5es de importa\u00e7\u00e3o\/exporta\u00e7\u00e3o de vari\u00e1veis de ambiente. Enquanto a maioria o faz, ele est\u00e1 inteiramente nas m\u00e3os da plataforma. H\u00e1 grandes chances de encontrar um fornecedor em pequena escala se voc\u00ea tiver uma longa lista de vari\u00e1veis de ambiente.<\/p>\n<h5>Sem suporte local<\/h5>\n<p>Embora tais servi\u00e7os sejam \u00f3timos para acessar vari\u00e1veis de ambiente nas implanta\u00e7\u00f5es do seu aplicativo, raramente h\u00e1 uma chance de que voc\u00ea possa us\u00e1-los enquanto desenvolve seu aplicativo localmente. Geralmente voc\u00ea ter\u00e1 que recorrer ao gerenciamento de arquivos locais <code>.env<\/code>. Enquanto ele cumpre o prop\u00f3sito, ele complica toda a configura\u00e7\u00e3o desnecessariamente.<\/p>\n<h3>Usando gestores secretos<\/h3>\n<p>A terceira op\u00e7\u00e3o, que atualmente \u00e9 bastante jovem em seus est\u00e1gios de desenvolvimento, \u00e9 usar gerenciadores secretos dedicados. gerenciadores secretos s\u00e3o servi\u00e7os de terceiros que permitem que voc\u00ea isole completamente seus segredos de aplicativo do seu c\u00f3digo-fonte\/desenvolvimento e os busque como e quando necess\u00e1rio atrav\u00e9s de conex\u00f5es de rede seguras.<\/p>\n<h4>Pr\u00f3s<\/h4>\n<p>Aqui est\u00e3o algumas das vantagens que os gerenciadores secretos oferecem sobre outros m\u00e9todos de gerenciamento secreto.<\/p>\n<h5>Altamente seguro<\/h5>\n<p>Como seus segredos s\u00e3o armazenados em um servi\u00e7o completamente isolado, voc\u00ea pode ter certeza de que voc\u00ea provavelmente nunca os divulgar\u00e1 acidentalmente enquanto os compartilha com seus colegas ou atrav\u00e9s de compromissos de controle de vers\u00e3o. A plataforma de terceiros se encarrega de manter seus segredos seguros, e eles normalmente t\u00eam SLAs bastante r\u00edgidos quando se trata de seguran\u00e7a de dados.<\/p>\n<p>Mesmo ao acessar os segredos de dentro do seu aplicativo, a maioria dos gerenciadores secretos fornece seu pr\u00f3prio c\u00f3digo de cliente que pode buscar e permitir o acesso aos <a href=\"https:\/\/kinsta.com\/pt\/blog\/cloud-security\/\">segredos de forma segura<\/a>\u00a0onde quer que seja necess\u00e1rio.<\/p>\n<h5>Uniformiza\u00e7\u00e3o em todos os ambientes<\/h5>\n<p>Como os segredos agora s\u00e3o independentes da sua base de c\u00f3digos e ambientes de implanta\u00e7\u00e3o, voc\u00ea pode agora desfrutar de uniformidade entre ambientes. Voc\u00ea n\u00e3o precisa fazer arranjos especiais para a integra\u00e7\u00e3o de novos desenvolvedores ou tomar medidas especiais antes de enviar seu aplicativo para a produ\u00e7\u00e3o &#8211; a maioria destes aspectos s\u00e3o simplificados ou tratados pelo seu gerente de segredos.<\/p>\n<h4>Contras<\/h4>\n<p>Embora os gerenciadores de segredos pare\u00e7am ser a melhor solu\u00e7\u00e3o poss\u00edvel para gerenciar vari\u00e1veis de ambiente, eles tamb\u00e9m t\u00eam suas pr\u00f3prias limita\u00e7\u00f5es.<\/p>\n<h5>Custo<\/h5>\n<p>Gerenciar vari\u00e1veis de ambiente tem sido uma atividade interna nos projetos por um longo tempo. Mesmo a maioria das plataformas de implanta\u00e7\u00e3o oferecem este recurso sem custos, uma vez que eles n\u00e3o incorrem em nenhum custo adicional.<\/p>\n<p>No entanto, como os gerenciadores secretos s\u00e3o servi\u00e7os completamente independentes, eles t\u00eam seus pr\u00f3prios custos de opera\u00e7\u00e3o. Portanto, os usu\u00e1rios t\u00eam que arcar com este custo enquanto utilizam estes servi\u00e7os.<\/p>\n<h5>Fases iniciais da tecnologia<\/h5>\n<p>Como a tecnologia \u00e9 relativamente nova, voc\u00ea nunca poder\u00e1 ter certeza de qu\u00e3o bem ela ser\u00e1 adotada pela ind\u00fastria nos pr\u00f3ximos dias. Embora os gerenciadores secretos mostrem grande promessa em termos de seguran\u00e7a e facilidade de gerenciamento, o fator custo e as preocupa\u00e7\u00f5es com o manuseio de dados podem resultar em uma ado\u00e7\u00e3o bastante lenta da tecnologia.<\/p>\n<h2>Como trabalhar com vari\u00e1veis de ambiente<\/h2>\n<p>Agora que voc\u00ea entende o conceito de vari\u00e1veis de ambiente e as formas dispon\u00edveis para implement\u00e1-las em um aplicativo, veremos como voc\u00ea pode trabalhar com elas atrav\u00e9s do terminal e em <a href=\"https:\/\/kinsta.com\/pt\/blog\/aplicativos-node-js\/\">aplicativos baseados no Node.js<\/a>.<\/p>\n<h3>Vari\u00e1veis de ambiente no terminal<\/h3>\n<p>Como as vari\u00e1veis de ambiente s\u00e3o espec\u00edficas aos processos, voc\u00ea pode configur\u00e1-las e exclu\u00ed-las atrav\u00e9s do terminal para que elas sejam passadas para os processos que o seu terminal gera.<\/p>\n<h4>Como encontrar valores de vari\u00e1veis<\/h4>\n<p>Para visualizar a lista de vari\u00e1veis de ambiente em seu terminal, voc\u00ea pode executar os seguintes comandos espec\u00edficos para o seu sistema operacional.<\/p>\n<p>No Windows:<\/p>\n<pre><code class=\"language-bash\">set\n<\/code><\/pre>\n<p>Em Linux ou MacOS:<\/p>\n<pre><code class=\"language-bash\">env\n<\/code><\/pre>\n<p>Isso ir\u00e1 imprimir uma lista de todas as vari\u00e1veis de ambiente dispon\u00edveis para o seu terminal em execu\u00e7\u00e3o.<\/p>\n<h4>Definindo novas vari\u00e1veis<\/h4>\n<p>Para definir novas vari\u00e1veis atrav\u00e9s do terminal, voc\u00ea pode executar os seguintes comandos.<\/p>\n<p>No Windows:<\/p>\n<pre><code class=\"language-bash\">set \"VAR_NAME=var_value\"\n<\/code><\/pre>\n<p>Em Linux ou MacOS:<\/p>\n<pre><code class=\"language-bash\">VAR_NAME=var_value\n<\/code><\/pre>\n<h4>Excluindo vari\u00e1veis<\/h4>\n<p>Para excluir uma vari\u00e1vel de ambiente, voc\u00ea precisa executar os seguintes comandos.<\/p>\n<p>No Windows:<\/p>\n<pre><code class=\"language-bash\">set \"VAR_NAME=\"\n<\/code><\/pre>\n<p>Em Linux ou MacOS:<\/p>\n<pre><code class=\"language-bash\">unset VAR_NAME\n<\/code><\/pre>\n<p>Por favor, note que os m\u00e9todos discutidos acima s\u00e3o apenas para criar\/eliminar vari\u00e1veis de ambiente para a sess\u00e3o atual do terminal.<\/p>\n<h3>Vari\u00e1veis de ambiente no Node.js<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-javascript\/\">JavaScript<\/a> \u00e9 uma das mais populares linguagens de programa\u00e7\u00e3o no momento. Ele \u00e9 amplamente utilizado no build de aplicativos backend e <a href=\"https:\/\/kinsta.com\/pt\/blog\/desenvolvedor-frontend\/\">frontend<\/a>, tornando uma das linguagens de programa\u00e7\u00e3o mais vers\u00e1teis.<\/p>\n<p>O <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-node-js\/\">Node.js<\/a> est\u00e1 entre as <a href=\"https:\/\/kinsta.com\/pt\/blog\/bibliotecas-javascript\/\">frameworks JS<\/a> mais utilizadas para construir aplicativos backend. Vamos dar uma olhada em como voc\u00ea pode lidar facilmente com vari\u00e1veis de ambiente em aplicativos baseados no Node.js.<\/p>\n<h4>Acessando vari\u00e1veis de ambiente diretamente<\/h4>\n<p>Node.js fornece a voc\u00ea uma indica\u00e7\u00e3o \u00e0s vari\u00e1veis de ambiente do seu processo atual via <code>process.env<\/code>. Voc\u00ea pode visualizar as vari\u00e1veis de ambiente dispon\u00edveis imprimindo este objeto para o console.<\/p>\n<figure id=\"attachment_125215\" aria-describedby=\"caption-attachment-125215\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125215 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/printing-process-env-1024x579.png\" alt=\"Imprimindo o objeto process.env.\" width=\"1024\" height=\"579\"><figcaption id=\"caption-attachment-125215\" class=\"wp-caption-text\">Imprimindo o objeto process.env.<\/figcaption><\/figure>\n<p>Este objeto conter\u00e1 vari\u00e1veis dispon\u00edveis para o processo do Node em execu\u00e7\u00e3o. Voc\u00ea pode adicionar novas vari\u00e1veis a ele declarando antes de executar seu aplicativo, semelhante a isso:<\/p>\n<pre><code class=\"language-bash\">VAR_UNO=SOMETHING node index.js\n<\/code><\/pre>\n<figure id=\"attachment_125216\" aria-describedby=\"caption-attachment-125216\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125216 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/printing-process-env-new-variable-1024x614.png\" alt=\"Imprimindo o objeto process.env ap\u00f3s adicionar uma nova vari\u00e1vel\" width=\"1024\" height=\"614\"><figcaption id=\"caption-attachment-125216\" class=\"wp-caption-text\">Imprimindo o objeto process.env ap\u00f3s adicionar uma nova vari\u00e1vel<\/figcaption><\/figure>\n<p>Como voc\u00ea pode ver, a nova vari\u00e1vel \u00e9 adicionada ao seu objeto <code>process.env<\/code>. Entretanto, voc\u00ea n\u00e3o pode acessar nenhuma vari\u00e1vel definida sob um arquivo <code>.env<\/code> atrav\u00e9s deste m\u00e9todo. Para fazer isso, voc\u00ea precisa usar um pacote como <code>dotenv<\/code> para carregar o arquivo <code>.env<\/code> em tempo de execu\u00e7\u00e3o.<\/p>\n<h4>Usando o pacote dotenv para acessar os arquivos .env<\/h4>\n<p>O pacote <code>dotenv<\/code> ajuda voc\u00ea a carregar vari\u00e1veis de ambiente armazenadas em arquivos <code>.env<\/code> na raiz do seu projeto. Seu uso \u00e9 simples, voc\u00ea precisa instal\u00e1-lo executando o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">npm i dotenv@16.0.0\n<\/code><\/pre>\n<p>A seguir, voc\u00ea precisa adicionar a seguinte linha de c\u00f3digo no in\u00edcio do c\u00f3digo do seu aplicativo para inicializar o pacote:<\/p>\n<pre><code class=\"language-js\">require('dotenv').config()\n<\/code><\/pre>\n<p>\u00c9 isso! Agora os segredos que voc\u00ea armazena em um arquivo <code>.env<\/code> na raiz do seu projeto ser\u00e3o carregados no seu objeto <code>process.env<\/code> assim que o aplicativo come\u00e7ar. Veremos este m\u00e9todo em a\u00e7\u00e3o mais tarde no seguinte tutorial.<\/p>\n<h2>Tutorial da vari\u00e1vel de ambiente<\/h2>\n<p>A melhor maneira de entender um conceito t\u00e9cnico \u00e9 observ\u00e1-lo em a\u00e7\u00e3o. Aqui est\u00e1 um tutorial r\u00e1pido para ajud\u00e1-lo a come\u00e7ar com as vari\u00e1veis de ambiente e aprender seu uso em detalhes.<\/p>\n<p>No guia a seguir, demonstraremos como usar vari\u00e1veis de ambiente atrav\u00e9s das tr\u00eas maneiras que mencionamos acima &#8211; arquivos <code>.env<\/code>, gerenciadores de vari\u00e1veis nativas da plataforma e gerenciadores secretos. Todas essas formas exigir\u00e3o um passo comum, que \u00e9 a cria\u00e7\u00e3o de um projeto b\u00e1sico do Node.js.<\/p>\n<h3>Primeiro: Crie um projeto Node.js<\/h3>\n<p>Para come\u00e7ar, garanta que voc\u00ea <a href=\"https:\/\/kinsta.com\/pt\/blog\/como-instalar-o-node-js\/\">tenha o Node.js instalado<\/a> em seu sistema. Uma vez que voc\u00ea o tenha configurado em seu sistema, voc\u00ea ter\u00e1 acesso ao npm (abrevia\u00e7\u00e3o para Node Package Manager). npm ajuda voc\u00ea a instalar pacotes de nodo a partir do registro global de npm atrav\u00e9s da linha de comando. Ele ser\u00e1 \u00fatil quando voc\u00ea instalar pacotes relacionados ao nosso projeto de teste.<\/p>\n<p>A seguir, abra um terminal e crie um novo diret\u00f3rio. Inicialize um novo projeto de Node nele:<\/p>\n<pre><code class=\"language-bash\">mkdir my-app\ncd my-app\nnpm init\n<\/code><\/pre>\n<p>Continue pressionando enter atrav\u00e9s das perguntas recebidas para aceitar as op\u00e7\u00f5es padr\u00e3o. Feito isso, seu terminal ficar\u00e1 parecido com isso:<\/p>\n<figure id=\"attachment_125217\" aria-describedby=\"caption-attachment-125217\" style=\"width: 1011px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125217 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/creating-new-project-1011x1024.png\" alt=\"Criando um novo projeto\" width=\"1011\" height=\"1024\"><figcaption id=\"caption-attachment-125217\" class=\"wp-caption-text\">Criando um novo projeto<\/figcaption><\/figure>\n<p>Agora voc\u00ea pode abrir este projeto usando uma IDE como Visual Studio Code ou IntelliJ IDEA.<\/p>\n<p>Crie um novo arquivo na raiz da pasta do seu projeto e salve com o nome <code>index.js<\/code>. Este ser\u00e1 o ponto de partida para o seu aplicativo. A seguir, instale o Express para criar e testar rapidamente servidores REST:<\/p>\n<pre><code class=\"language-bash\">npm i express\n<\/code><\/pre>\n<p>Uma vez que voc\u00ea tenha o Express instalado, cole o seguinte c\u00f3digo no seu arquivo <code>index.js<\/code>:<\/p>\n<pre><code class=\"language-js\">const express = require(\"express\")\n\nconst app = express()\n\napp.get(\"\/\", (req, res) =&gt; {\n   res.send(\"Hello world!\")\n})\n\napp.listen(8080);\n<\/code><\/pre>\n<p>Este \u00e9 um snippet inicial para um endpoint b\u00e1sico do &#8220;Hello World&#8221; usando Node.js e Express. Execute o seguinte na sua linha de comando:<\/p>\n<pre><code class=\"language-bash\">node index.js\n<\/code><\/pre>\n<p>Isso iniciar\u00e1 o seu aplicativo Node.js + Express. Se voc\u00ea navegar para http:\/\/localhost:8080 em seu navegador web, voc\u00ea receber\u00e1 uma sa\u00edda semelhante:<\/p>\n<figure id=\"attachment_125218\" aria-describedby=\"caption-attachment-125218\" style=\"width: 902px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125218 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/hello-world.png\" alt=\"Hello World!\" width=\"902\" height=\"448\"><figcaption id=\"caption-attachment-125218\" class=\"wp-caption-text\">Hello World!<\/figcaption><\/figure>\n<p>Isso indica que voc\u00ea montou seu aplicativo corretamente! O pr\u00f3ximo passo \u00e9 atualizar seu aplicativo para usar vari\u00e1veis de ambiente. Atualize o c\u00f3digo em <code>index.js<\/code> para corresponder ao snippet a seguir:<\/p>\n<pre><code class=\"language-js\">const express = require(\"express\")\n\nconst app = express()\n\napp.get(\"\/\", (req, res) =&gt; {\n  \n   \/\/ the responseMessage object extracts its values from environment variables\n   \/\/ If a value is not found, it instead stores the string \"not found\"\n   const responseMessage = {\n       environment: process.env.environment || \"Not found\",\n       apiBaseUrl: process.env.apiBaseUrl || \"Not found\"\n   }\n\n   res.send(responseMessage)\n})\n\napp.listen(8080);\n<\/code><\/pre>\n<p>Ao inv\u00e9s de enviar uma mensagem de &#8220;Hello World!&#8221; na resposta, agora estaremos enviando um objeto JSON que carrega duas informa\u00e7\u00f5es:<\/p>\n<ul>\n<li><code>environment<\/code>: Indica o ambiente atual no qual o aplicativo \u00e9 implantado<\/li>\n<li><code>apiBaseUrl<\/code>: Carrega a URL base para uma API hipot\u00e9tica. Mudaremos o valor desta URL com base no ambiente em que o aplicativo \u00e9 implantado.<\/li>\n<\/ul>\n<p>Caso n\u00e3o seja poss\u00edvel acessar as vari\u00e1veis de ambiente, o objeto conter\u00e1 &#8220;Not found&#8221; como os valores para as duas chaves descritas acima. Antes de seguir adiante, execute novamente o comando <code>node index.js<\/code> e voc\u00ea receber\u00e1 a seguinte sa\u00edda:<\/p>\n<figure id=\"attachment_125220\" aria-describedby=\"caption-attachment-125220\" style=\"width: 902px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125220 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/env-apibaseurl-not-found-1.png\" alt=\"Imprimindo os valores padr\u00e3o para as vari\u00e1veis &lt;code&gt;env&lt;\/code&gt;.\" width=\"902\" height=\"448\"><figcaption id=\"caption-attachment-125220\" class=\"wp-caption-text\">Imprimindo os valores padr\u00e3o para as vari\u00e1veis <code>env<\/code>.<\/figcaption><\/figure>\n<p>Isso indica que o seu aplicativo n\u00e3o consegue acessar as vari\u00e1veis de ambiente no momento. Al\u00e9m disso, ainda nem definimos os valores para estas vari\u00e1veis. Vamos dar uma olhada nas v\u00e1rias maneiras dispon\u00edveis para fazer isso nas pr\u00f3ximas se\u00e7\u00f5es.<\/p>\n<h3>Tipo 1: Adicionar vari\u00e1veis de ambiente atrav\u00e9s de arquivos env<\/h3>\n<p>Vamos come\u00e7ar com a forma mais b\u00e1sica de adicionar vari\u00e1veis de ambiente &#8211; arquivos de env. Na raiz do seu projeto, crie um novo arquivo chamado <code>.env<\/code> e armazene o seguinte c\u00f3digo nele:<\/p>\n<pre><code class=\"language-bash\">environment=DEV\napiBaseUrl=http:\/\/dev.myApi.com:8080\/v1\n<\/code><\/pre>\n<p>Em seguida, reinicie seu aplicativo executando o comando <code>node index.js<\/code> novamente e verifique a sa\u00edda:<\/p>\n<figure id=\"attachment_125220\" aria-describedby=\"caption-attachment-125220\" style=\"width: 902px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125220 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/env-apibaseurl-not-found-1.png\" alt=\"Imprimindo os valores para as vari\u00e1veis &lt;code&gt;env&lt;\/code&gt;.\" width=\"902\" height=\"448\"><figcaption id=\"caption-attachment-125220\" class=\"wp-caption-text\">Imprimindo os valores para as vari\u00e1veis <code>env<\/code>.<\/figcaption><\/figure>\n<p>Voc\u00ea perceber\u00e1 que a sa\u00edda ainda \u00e9 a mesma. Isso ocorre porque, mesmo que voc\u00ea tenha definido o valor das vari\u00e1veis de ambiente, voc\u00ea n\u00e3o instruiu realmente o seu aplicativo sobre onde encontr\u00e1-las. \u00c9 aqui que pacotes como o <code>dotenv<\/code> s\u00e3o \u00fateis.<\/p>\n<p>Execute o seguinte comando para instalar <code>dotenv<\/code>:<\/p>\n<pre><code class=\"language-bash\">npm i dotenv@16.0.0\n<\/code><\/pre>\n<p>Para come\u00e7ar a usar <code>dotenv<\/code> em seu c\u00f3digo, adicione o seguinte c\u00f3digo na linha n\u00famero 2 do seu index.js:<\/p>\n<pre><code class=\"language-js\">require('dotenv').config()\n<\/code><\/pre>\n<p>Em seguida, reinicie o aplicativo e verifique a sa\u00edda:<\/p>\n<figure id=\"attachment_125221\" aria-describedby=\"caption-attachment-125221\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125221 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/env-dev-apibaseurl-dev-myapi-com-1024x433.png\" alt=\"Imprimindo os novos valores para as vari\u00e1veis &lt;code&gt;env&lt;\/code&gt;.\" width=\"1024\" height=\"433\"><figcaption id=\"caption-attachment-125221\" class=\"wp-caption-text\">Imprimindo os novos valores para as vari\u00e1veis <code>env<\/code>.<\/figcaption><\/figure>\n<p>Como voc\u00ea pode ver, os valores para as vari\u00e1veis de ambiente foram carregados do seu arquivo <code>.env<\/code>!<\/p>\n<p>Agora, para tornar as coisas mais interessantes, vamos renomear nosso arquivo <code>.env<\/code> para <code>.env.dev<\/code> e criar outro arquivo chamado <code>.env.staging<\/code>. Cole o seguinte snippet de c\u00f3digo no novo arquivo:<\/p>\n<pre><code class=\"language-bash\">environment=STAGING\napiBaseUrl=http:\/\/staging.myApi.com:3000\/v1\n<\/code><\/pre>\n<p>Uma vez terminado, substitua a linha n\u00famero 2 do seu arquivo <code>index.js<\/code> com o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"language-js\">require('dotenv').config({\n   path: \"STAGING\" === process.env.NODE_ENV?.toUpperCase() ? '.\/.env.staging' : '.\/.env.dev'\n})\n\nconsole.log(process.env.NODE_ENV)\n<\/code><\/pre>\n<p>O que mudou aqui \u00e9 que agora estamos instruindo o pacote <code>dotenv<\/code> a buscar o conte\u00fado das vari\u00e1veis de ambiente de um dos dois arquivos dispon\u00edveis com base em outra vari\u00e1vel de ambiente chamada <code>NODE_ENV<\/code>. De onde vem o valor desta vari\u00e1vel de ambiente? Do seu terminal.<\/p>\n<p>Para testar essa configura\u00e7\u00e3o, execute seu aplicativo usando o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">NODE_ENV=DEV node index.js\n<\/code><\/pre>\n<p>Se voc\u00ea acessar localhost:8080 agora, voc\u00ea notar\u00e1 a seguinte resposta:<\/p>\n<figure id=\"attachment_125221\" aria-describedby=\"caption-attachment-125221\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125221 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/env-dev-apibaseurl-dev-myapi-com-1024x433.png\" alt=\"Imprimindo os valores das vari\u00e1veis de ambiente para o ambiente de desenvolvimento.\" width=\"1024\" height=\"433\"><figcaption id=\"caption-attachment-125221\" class=\"wp-caption-text\">Imprimindo os valores das vari\u00e1veis de ambiente para o ambiente de desenvolvimento.<\/figcaption><\/figure>\n<p>Agora, encerre o aplicativo em execu\u00e7\u00e3o e execute novamente usando o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">NODE_ENV=STAGING node index.js\n<\/code><\/pre>\n<p>Acessar localhost:8080 agora levar\u00e1 voc\u00ea \u00e0 seguinte resposta:<\/p>\n<figure id=\"attachment_125222\" aria-describedby=\"caption-attachment-125222\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125222 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/dev-staging-apibaseurl-staging-myapi-com-1024x386.png\" alt=\"Imprimindo os valores de ambiente de teste.\" width=\"1024\" height=\"386\"><figcaption id=\"caption-attachment-125222\" class=\"wp-caption-text\">Imprimindo os valores de ambiente de teste.<\/figcaption><\/figure>\n<p>\u00c9 assim que voc\u00ea pode usar os arquivos <code>.env<\/code> para acessar diferentes conjuntos de vari\u00e1veis baseadas em condi\u00e7\u00f5es externas. A condi\u00e7\u00e3o externa aqui \u00e9 a vari\u00e1vel de ambiente externo <code>NODE_ENV<\/code> que \u00e9 essencialmente uma vari\u00e1vel de ambiente do usu\u00e1rio enquanto <code>environment<\/code> e <code>apiBaseUrl<\/code> eram vari\u00e1veis de ambiente de tempo de execu\u00e7\u00e3o. O perfil do usu\u00e1rio que faz a chamada fornece o valor da vari\u00e1vel <code>NODE_ENV<\/code> e o aplicativo a utiliza para tomar decis\u00f5es internas.<\/p>\n<p>Caso voc\u00ea esteja no Windows, voc\u00ea pode enfrentar dificuldades enquanto executa os dois comandos anteriores. O terminal do Windows pode n\u00e3o permitir que voc\u00ea atribua vari\u00e1veis de ambiente de usu\u00e1rio na hora usando a sintaxe <code>KEY=VALUE<\/code> (a menos que seja Bash no Windows).<\/p>\n<p>Uma solu\u00e7\u00e3o r\u00e1pida nesse caso \u00e9 fazer uso de scripts e <code>cross-env<\/code>.<\/p>\n<p>Instale <code>cross-env<\/code> executando o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">npm i --save-dev cross-env\n<\/code><\/pre>\n<p>A seguir, v\u00e1 para o seu arquivo <code>package.json<\/code> e atualize a chave <code>scripts<\/code> para combinar com isso:<\/p>\n<pre><code class=\"language-json\">\/\/ \u2026\n\"scripts\": {\n   \"test\": \"echo \"Error: no test specified\" && exit 1\",\n   \"start-dev\": \"cross-env NODE_ENV=DEV node index.js\",\n   \"start-staging\": \"cross-env NODE_ENV=STAGING node index.js\"\n },\n\/\/ \u2026\n<\/code><\/pre>\n<p>Agora voc\u00ea pode executar os seguintes comandos para executar seu aplicativo com dois conjuntos diferentes de vari\u00e1veis de ambiente:<\/p>\n<pre><code class=\"language-bash\">npm run start-dev\t\t# to start with dev variables\nnpm run start-staging\t\t# to start with staging variables\n<\/code><\/pre>\n<p>Esta \u00e9 uma corre\u00e7\u00e3o universal e voc\u00ea pode usar estes scripts em bash\/zsh tamb\u00e9m.<\/p>\n<p>A seguir, vamos dar uma olhada em como usar um gerente de vari\u00e1veis de terceiros.<\/p>\n<h3>Tipo 2: Use o gerenciador de vari\u00e1veis de ambiente nativo da Heroku<\/h3>\n<p>Para poder seguir durante esta parte do tutorial, voc\u00ea precisar\u00e1 de uma conta Heroku.<\/p>\n<p>Antes de implementar o aplicativo em Heroku, existem algumas altera\u00e7\u00f5es que voc\u00ea precisar\u00e1 fazer no seu c\u00f3digo. Primeiro de tudo, adicione um novo script em seu <code>package.json<\/code> chamado start:<\/p>\n<pre><code class=\"language-json\">\"scripts\": {\n   \"test\": \"echo \"Error: no test specified\" && exit 1\",\n   \"start\": \"node index.js\",\n   \"start-dev\": \"cross-env NODE_ENV=DEV node index.js\",\n   \"start-staging\": \"cross-env NODE_ENV=STAGING node index.js\"\n },\n<\/code><\/pre>\n<p>Este script ser\u00e1 usado pelo Heroku para executar seu aplicativo uma vez implantado. Al\u00e9m disso, v\u00e1 para a \u00faltima linha do seu arquivo <code>index.js<\/code> e atualize para o seguinte:<\/p>\n<pre><code class=\"language-js\">app.listen(process.env.PORT || 3000);\n<\/code><\/pre>\n<p>Isso garantir\u00e1 que o aplicativo seja implantado na porta especificada pelo Heroku.<\/p>\n<p>Em seguida, voc\u00ea precisa <a href=\"https:\/\/devcenter.heroku.com\/articles\/heroku-cli#install-the-heroku-cli\" target=\"_blank\" rel=\"noopener noreferrer\">instalar o Heroku CLI<\/a> localmente para poder acessar seus aplicativos Heroku a partir da sua linha de comando. Para este tutorial, voc\u00ea pode usar o seguinte comando para instalar o CLI:<\/p>\n<pre><code class=\"language-bash\">npm i -g heroku\n<\/code><\/pre>\n<p>No entanto, os documentos de Heroku recomendam instal\u00e1-lo atrav\u00e9s de uma das outras formas listadas no link mencionado acima para um melhor suporte. Uma vez instalado, execute o seguinte comando para entrar em sua conta de Heroku:<\/p>\n<pre><code class=\"language-bash\">heroku login\n<\/code><\/pre>\n<p>Quando isso for feito, v\u00e1 para dashboard.heroku.com e fa\u00e7a o login em sua conta. A seguir, crie um novo aplicativo clicando em <strong>New<\/strong>\u00a0&gt; <strong>Create new app<\/strong>.<\/p>\n<figure id=\"attachment_125224\" aria-describedby=\"caption-attachment-125224\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125224 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/heroku-new-app-1024x250.png\" alt=\"Criando um novo aplicativo\" width=\"1024\" height=\"250\"><figcaption id=\"caption-attachment-125224\" class=\"wp-caption-text\">Criando um novo aplicativo<\/figcaption><\/figure>\n<p>Na p\u00e1gina seguinte, clique no bot\u00e3o <strong>Create app<\/strong> sem inserir nenhum detalhe. Isso criar\u00e1 um novo aplicativo heroku para voc\u00ea com um nome aleat\u00f3rio.<\/p>\n<figure id=\"attachment_125225\" aria-describedby=\"caption-attachment-125225\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125225 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/heroku-naming-app-1024x371.png\" alt=\"Nomeando seu aplicativo\" width=\"1024\" height=\"371\"><figcaption id=\"caption-attachment-125225\" class=\"wp-caption-text\">Nomeando seu aplicativo<\/figcaption><\/figure>\n<p>Aqui est\u00e1 como seria o painel do seu aplicativo:<\/p>\n<figure id=\"attachment_125226\" aria-describedby=\"caption-attachment-125226\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125226 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/heroku-new-app-dashboard-1024x583.png\" alt=\"O novo painel do aplicativo.\" width=\"1024\" height=\"583\"><figcaption id=\"caption-attachment-125226\" class=\"wp-caption-text\">O novo painel do aplicativo.<\/figcaption><\/figure>\n<p>Esta p\u00e1gina tamb\u00e9m cont\u00e9m instru\u00e7\u00f5es sobre como implementar seu aplicativo em Heroku atrav\u00e9s do CLI. Aqui est\u00e1 a lista de comandos que voc\u00ea deve executar para implementar seu aplicativo no Heroku:<\/p>\n<pre><code class=\"language-bash\">git init\nheroku git:remote -a whispering-shelf-49396 # change whispering-shelf-49396 with the name of your app. You can get it in your dashboard\ngit add index.js package-lock.json package.json # do not push the <code>.env<\/code> files since we'll provide that via the in-app secrets manager git commit -am \"Initial commit\" git push heroku main <\/code><\/pre>\n<p>Ap\u00f3s a conclus\u00e3o bem-sucedida da implanta\u00e7\u00e3o, voc\u00ea pode visualizar o aplicativo implantado por meio do painel de controle, clicando no bot\u00e3o<strong> Open App<\/strong><\/p>\n<p>Se voc\u00ea tiver feito tudo certo, voc\u00ea ver\u00e1 a seguinte resposta:<\/p>\n<figure id=\"attachment_125227\" aria-describedby=\"caption-attachment-125227\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125227 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/heroku-env-apibaseurl-not-found-1024x505.png\" alt=\"Acessando seu aplicativo implantado\" width=\"1024\" height=\"505\"><figcaption id=\"caption-attachment-125227\" class=\"wp-caption-text\">Acessando seu aplicativo implantado<\/figcaption><\/figure>\n<p>Por que isso acontece, voc\u00ea pode estar se perguntando? Isso ocorre porque ainda n\u00e3o fornecemos as vari\u00e1veis de ambiente para nosso aplicativo de nenhuma forma. Se voc\u00ea verificar os comandos que usou para implantar o aplicativo, notar\u00e1 que n\u00e3o inclu\u00edmos o arquivo\u00a0<code>.env<\/code> no nosso controle de vers\u00e3o. Tamb\u00e9m n\u00e3o definimos o valor de <code>NODE_ENV<\/code> no script de inicializa\u00e7\u00e3o.<\/p>\n<p>Para injetar vari\u00e1veis de ambiente no seu aplicativo agora, voc\u00ea precisa acessar <strong>Settings<\/strong> &gt; <strong>Config Vars<\/strong> no painel do Heroku. Ao clicar em <strong>Reveal Config Vars<\/strong>, voc\u00ea ver\u00e1 uma tela semelhante:<\/p>\n<figure id=\"attachment_125228\" aria-describedby=\"caption-attachment-125228\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125228 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/heroku-app-config-vars-1024x593.png\" alt=\"Acessando o vars de configura\u00e7\u00e3o do seu aplicativo.\" width=\"1024\" height=\"593\"><figcaption id=\"caption-attachment-125228\" class=\"wp-caption-text\">Acessando o vars de configura\u00e7\u00e3o do seu aplicativo.<\/figcaption><\/figure>\n<p>Agora voc\u00ea pode inserir o conte\u00fado do seu arquivo <code>.env<\/code> aqui:<\/p>\n<figure id=\"attachment_125229\" aria-describedby=\"caption-attachment-125229\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125229 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/heroku-app-config-vars-filled-1024x593.png\" alt=\"Entrando com suas vari\u00e1veis de ambiente no Heroku.\" width=\"1024\" height=\"593\"><figcaption id=\"caption-attachment-125229\" class=\"wp-caption-text\">Entrando com suas vari\u00e1veis de ambiente no Heroku.<\/figcaption><\/figure>\n<p>Se voc\u00ea voltar e atualizar a URL do seu aplicativo, voc\u00ea notar\u00e1 que os valores foram atualizados:<\/p>\n<figure id=\"attachment_125230\" aria-describedby=\"caption-attachment-125230\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125230 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/heroku-env-production-apibaseurl-prod-myapi-com-1024x374.png\" alt=\"O aplicativo implantado no Heroku pode acessar vari\u00e1veis de ambiente agora.\" width=\"1024\" height=\"374\"><figcaption id=\"caption-attachment-125230\" class=\"wp-caption-text\">O aplicativo implantado no Heroku pode acessar vari\u00e1veis de ambiente agora.<\/figcaption><\/figure>\n<p>\u00c9 assim que voc\u00ea pode usar o gerenciador de segredos de uma plataforma de implanta\u00e7\u00e3o para gerenciar as vari\u00e1veis do seu ambiente. Entretanto, isso requer que voc\u00ea gerencie manualmente as vari\u00e1veis de ambiente atrav\u00e9s do painel de controle da plataforma. Como voc\u00ea pode ver para Heroku, n\u00e3o h\u00e1 op\u00e7\u00e3o de importar uma grande quantidade de vari\u00e1veis de ambiente de um arquivo, for\u00e7ando voc\u00ea a inserir cada uma delas uma a uma. Isso pode ficar bastante problem\u00e1tico \u00e0s vezes.<\/p>\n<p>A pr\u00f3xima se\u00e7\u00e3o apresenta um m\u00e9todo mais eficiente de gerenciamento de segredos de aplicativo &#8211; gerenciadores secretos.<\/p>\n<h3>Tipo 3: use Doppler para gerenciar vari\u00e1veis de ambiente<\/h3>\n<p>Os m\u00e9todos discutidos acima n\u00e3o proporcionam uniformidade entre plataformas. Voc\u00ea normalmente n\u00e3o confiaria em arquivos env ao implementar para a produ\u00e7\u00e3o, e n\u00e3o \u00e9 poss\u00edvel usar gerenciadores de vari\u00e1veis nativas da plataforma quando se trabalha localmente. Gerenciadores secretos como o Doppler preenchem esta lacuna.<\/p>\n<p>Para tirar suas pr\u00f3prias conclus\u00f5es, voc\u00ea precisa primeiro criar uma conta gratuita no <a href=\"https:\/\/dashboard.doppler.com\/login\" target=\"_blank\" rel=\"noopener noreferrer\">Doppler<\/a>.<\/p>\n<p>Ele provavelmente criar\u00e1 um projeto template para voc\u00ea automaticamente pelo nome exemplo-projeto. Para simplificar, vamos mant\u00ea-lo de lado e criar um novo projeto para o nosso caso de uso.<\/p>\n<p>V\u00e1 at\u00e9 o painel e clique no \u00edcone de mais ao lado de Projetos.<\/p>\n<figure id=\"attachment_125231\" aria-describedby=\"caption-attachment-125231\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125231 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/doppler-projects-1024x461.png\" alt=\"Seus projetos no Doppler.\" width=\"1024\" height=\"461\"><figcaption id=\"caption-attachment-125231\" class=\"wp-caption-text\">Seus projetos no Doppler.<\/figcaption><\/figure>\n<p>Digite seu nome como &#8220;my-app&#8221; e prossiga. Aqui est\u00e1 como o projeto deve ser uma vez que esteja pronto:<\/p>\n<figure id=\"attachment_125232\" aria-describedby=\"caption-attachment-125232\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125232 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/doppler-project-env-1024x321.png\" alt=\"Os ambientes e vari\u00e1veis do seu projeto\" width=\"1024\" height=\"321\"><figcaption id=\"caption-attachment-125232\" class=\"wp-caption-text\">Os ambientes e vari\u00e1veis do seu projeto<\/figcaption><\/figure>\n<p>Clique no item da lista de configura\u00e7\u00e3o do dev. Clique em <strong>Add New Secret<\/strong> e adicione dois segredos como a seguir:<\/p>\n<figure id=\"attachment_125233\" aria-describedby=\"caption-attachment-125233\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125233 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/doppler-dev-env-vars-filled-1024x486.png\" alt=\"Adicionando as vari\u00e1veis do dev ao Doppler\" width=\"1024\" height=\"486\"><figcaption id=\"caption-attachment-125233\" class=\"wp-caption-text\">Adicionando as vari\u00e1veis do dev ao Doppler<\/figcaption><\/figure>\n<p>Clique no bot\u00e3o &#8220;Salvar&#8221; para salvar suas altera\u00e7\u00f5es. Observe que o Doppler n\u00e3o suporta o uso de camel case ao nomear seus segredos. Embora seja geralmente prefer\u00edvel manter os nomes dos segredos em letras mai\u00fasculas, usar o Doppler n\u00e3o deixa voc\u00ea com outras op\u00e7\u00f5es. Para identificar os segredos obtidos do Doppler, adicionamos o prefixo\u00a0<code>DP_<\/code><\/p>\n<p>Agora que as vari\u00e1veis s\u00e3o criadas e armazenadas no Doppler, vamos integr\u00e1-las em nossa base de c\u00f3digo. Voc\u00ea precisa <a href=\"https:\/\/docs.doppler.com\/docs\/install-cli\" target=\"_blank\" rel=\"noopener noreferrer\">configurar o Doppler CLI<\/a> para fazer isso. Aqui est\u00e1 um resumo r\u00e1pido do que voc\u00ea precisa fazer.<\/p>\n<p>Primeiro de tudo, instale o CLI localmente, seguindo as <a href=\"https:\/\/docs.doppler.com\/docs\/install-cli#installation\" target=\"_blank\" rel=\"noopener noreferrer\">instru\u00e7\u00f5es espec\u00edficas para o seu sistema operacional<\/a>. Em seguida, fa\u00e7a o login no Doppler CLI com sua conta rec\u00e9m-criada usando o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">doppler login\n<\/code><\/pre>\n<p>Uma vez conectado, execute o seguinte comando para se conectar ao seu projeto Doppler remoto a partir do seu CLI:<\/p>\n<pre><code class=\"language-bash\">doppler setup\n<\/code><\/pre>\n<p>Uma vez conectado ao projeto certo, voc\u00ea conseguir\u00e1 acessar seus segredos atrav\u00e9s do seguinte comando:<\/p>\n<pre><code class=\"language-bash\">doppler run\n<\/code><\/pre>\n<p>Entretanto, n\u00e3o vamos executar este comando diretamente. Ao inv\u00e9s disso, o anexaremos a um de nossos scripts de execu\u00e7\u00e3o para que ele seja executado automaticamente sempre que o aplicativo for iniciado. Vamos atualizar o arquivo <code>package.json<\/code> com o novo script de execu\u00e7\u00e3o para o ambiente <code>dev<\/code>:<\/p>\n<pre><code class=\"language-json\">\/\/ \u2026\n\"scripts\": {\n   \"test\": \"echo \"Error: no test specified\" && exit 1\",\n   \"start\": \"node index.js\",\n   \"start-dev\": \"doppler run -- node index.js\", \/\/ This has to be updated\n   \"start-staging\": \"cross-env NODE_ENV=STAGING node index.js\"\n },\n\/\/ \u2026\n<\/code><\/pre>\n<p>Lembre-se tamb\u00e9m de que criamos novos nomes de vari\u00e1veis no Doppler que come\u00e7aram com <code>DP_<\/code>. Ent\u00e3o precisaremos atualizar nosso arquivo <code>index.js<\/code> para exibir esta vari\u00e1vel tamb\u00e9m:<\/p>\n<pre><code class=\"language-js\">const express = require(\"express\")\nrequire('dotenv').config({\n   path: \"STAGING\" === process.env.NODE_ENV?.toUpperCase() ? '.\/.env.staging' : '.\/.env.dev'\n})\n\nconsole.log(process.env.NODE_ENV)\n\nconst app = express()\n\napp.get(\"\/\", (req, res) =&gt; {\n  \n   \/\/ the responseMessage object extracts its values from environment variables\n   \/\/ If a value is not found, it instead stores the string \"not found\"\n   const responseMessage = {\n       environment: process.env.environment || \"Not found\",\n       apiBaseUrl: process.env.apiBaseUrl || \"Not found\",\n       DP_ENVIRONMENT: process.env.DP_ENVIRONMENT || \"Not found\" \/\/ Add the new variable here\n   }\n\n   res.send(responseMessage)\n})\n\napp.listen(process.env.PORT || 3000);\n<\/code><\/pre>\n<p>Para ver tudo em a\u00e7\u00e3o, execute o seguinte comando:<\/p>\n<pre><code class=\"language-bash\">npm run start-dev\n<\/code><\/pre>\n<p>Este \u00e9 o visual que o http:\/\/localhost:3000 deve ter agora:<\/p>\n<figure id=\"attachment_125234\" aria-describedby=\"caption-attachment-125234\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125234 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/doppler-env-dev-apibaseurl-dev-myapi-com-dpenv-dev-1024x402.png\" alt=\"Acesso aos segredos do Doppler em um aplicativo rodando localmente.\" width=\"1024\" height=\"402\"><figcaption id=\"caption-attachment-125234\" class=\"wp-caption-text\">Acesso aos segredos do Doppler em um aplicativo rodando localmente.<\/figcaption><\/figure>\n<p>A terceira vari\u00e1vel da lista (<code>DP_ENVIRONMENT<\/code>) est\u00e1 sendo buscada diretamente do Doppler.<\/p>\n<p>Em seguida, voc\u00ea pode conectar o Doppler \u00e0 sua plataforma de implanta\u00e7\u00e3o para acessar esses segredos atrav\u00e9s do seu aplicativo implantado. Para fazer isso, vamos come\u00e7ar criando um novo ambiente no Doppler para um novo conjunto de segredos de implanta\u00e7\u00e3o.<\/p>\n<p>Volte para a p\u00e1gina inicial do seu projeto meu-apo. Clique no \u00fanico item da lista na <strong>Staging<\/strong> list:<\/p>\n<figure id=\"attachment_125235\" aria-describedby=\"caption-attachment-125235\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125235 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/doppler-projects-vars-filled-1024x381.png\" alt=\"O painel do seu aplicativo.\" width=\"1024\" height=\"381\"><figcaption id=\"caption-attachment-125235\" class=\"wp-caption-text\">O painel do seu aplicativo.<\/figcaption><\/figure>\n<p>Voc\u00ea notar\u00e1 que as duas vari\u00e1veis secretas que voc\u00ea definiu no ambiente <code>dev<\/code> j\u00e1 est\u00e3o dispon\u00edveis aqui, mas est\u00e3o faltando valores:<\/p>\n<figure id=\"attachment_125236\" aria-describedby=\"caption-attachment-125236\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125236 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/doppler-stg-vars-empty-1024x559.png\" alt=\"As vari\u00e1veis de ambiente do seu aplicativo para o ambiente de teste\" width=\"1024\" height=\"559\"><figcaption id=\"caption-attachment-125236\" class=\"wp-caption-text\">As vari\u00e1veis de ambiente do seu aplicativo para o ambiente de teste<\/figcaption><\/figure>\n<p>Adicione os seguintes valores e clique em <strong>Salvar<\/strong>:<\/p>\n<figure id=\"attachment_125237\" aria-describedby=\"caption-attachment-125237\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125237 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/doppler-stg-vars-filled-1024x397.png\" alt=\"As vari\u00e1veis de ambiente do seu aplicativo para o ambiente de teste\" width=\"1024\" height=\"397\"><figcaption id=\"caption-attachment-125237\" class=\"wp-caption-text\">As vari\u00e1veis de ambiente do seu aplicativo para o ambiente de teste<\/figcaption><\/figure>\n<p>Uma vez feito isso, clique na aba <strong>Integra\u00e7\u00f5es<\/strong> e <strong>Adicione Sincroniza\u00e7\u00e3o<\/strong> nesta p\u00e1gina para come\u00e7ar a se conectar \u00e0 sua plataforma de implanta\u00e7\u00e3o. Voc\u00ea receber\u00e1 uma lista de plataformas com as quais o Doppler pode se integrar:<\/p>\n<figure id=\"attachment_125238\" aria-describedby=\"caption-attachment-125238\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125238 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/doppler-integrations-set-up-1024x574.png\" alt=\"Conectando seu aplicativo Doppler a Heroku.\" width=\"1024\" height=\"574\"><figcaption id=\"caption-attachment-125238\" class=\"wp-caption-text\">Conectando seu aplicativo Doppler a Heroku.<\/figcaption><\/figure>\n<p>J\u00e1 que nosso aplicativo est\u00e1 implantado em Heroku, vamos clicar em Heroku. Siga as etapas na tela para conectar sua conta Heroku ao Doppler e fornecer as fun\u00e7\u00f5es de acesso necess\u00e1rias. Uma vez conectado, voc\u00ea alcan\u00e7ar\u00e1 uma tela similar:<\/p>\n<figure id=\"attachment_125239\" aria-describedby=\"caption-attachment-125239\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125239 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/heroku-integration-1024x574.png\" alt=\"Forne\u00e7a seus detalhes de aplicativo para integrar com Heroku.\" width=\"1024\" height=\"574\"><figcaption id=\"caption-attachment-125239\" class=\"wp-caption-text\">Forne\u00e7a seus detalhes de aplicativo para integrar com Heroku.<\/figcaption><\/figure>\n<p>Selecione o <strong>Set Up Integration<\/strong>\u00a0como <strong>App<\/strong>, escolha seu aplicativo Heroku na lista de aplicativos dispon\u00edveis, escolha stg como <strong>Set Up Integration<\/strong> e <strong>Set Up Integration<\/strong> nas <strong>Import Options<\/strong>, j\u00e1 que n\u00e3o queremos importar nenhum segredo de Heroku para Doppler.<\/p>\n<p>Clique em <strong>Set Up Integration<\/strong> quando estiver pronto. Voc\u00ea alcan\u00e7ar\u00e1 uma tela semelhante quando a integra\u00e7\u00e3o for feita com sucesso:<\/p>\n<figure id=\"attachment_125240\" aria-describedby=\"caption-attachment-125240\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125240 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/doppler-integration-heroku-1024x574.png\" alt=\"As integra\u00e7\u00f5es do seu aplicativo Doppler com Heroku.\" width=\"1024\" height=\"574\"><figcaption id=\"caption-attachment-125240\" class=\"wp-caption-text\">As integra\u00e7\u00f5es do seu aplicativo Doppler com Heroku.<\/figcaption><\/figure>\n<p>Agora se voc\u00ea verificar a se\u00e7\u00e3o <strong>Config Vars<\/strong> no painel do seu aplicativo Heroku, voc\u00ea notar\u00e1 que as vari\u00e1veis do Doppler foram adicionadas automaticamente \u00e0s vari\u00e1veis de configura\u00e7\u00e3o do seu aplicativo Heroku:<\/p>\n<figure id=\"attachment_125241\" aria-describedby=\"caption-attachment-125241\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125241 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/heroku-dopper-config-vars-1024x334.png\" alt=\"Os segredos do Doppler est\u00e3o agora sincronizados com Heroku.\" width=\"1024\" height=\"334\"><figcaption id=\"caption-attachment-125241\" class=\"wp-caption-text\">Os segredos do Doppler est\u00e3o agora sincronizados com Heroku.<\/figcaption><\/figure>\n<p>Voc\u00ea tamb\u00e9m vai notar que as duas vari\u00e1veis de ambiente originais (<code>environment<\/code> e <code>apiBaseUrl<\/code>) foram removidas. Isso aconteceu porque escolhemos <strong>Import Options<\/strong> em <strong>Import Options<\/strong>. Voc\u00ea pode ir em frente e adicion\u00e1-las novamente em Heroku, se necess\u00e1rio.<\/p>\n<p>Enquanto a presen\u00e7a das novas vari\u00e1veis de ambiente na se\u00e7\u00e3o <strong>Config Vars <\/strong>de Heroku demonstra que voc\u00ea configurou com sucesso o Doppler para gerenciar segredos tanto localmente em seu ambiente de desenvolvimento quanto em seu ambiente de implanta\u00e7\u00e3o, voc\u00ea pode ir em frente implantar o c\u00f3digo atualizado em Heroku para visualizar as altera\u00e7\u00f5es no aplicativo implantado. Aqui est\u00e1 o que esperar:<\/p>\n<figure id=\"attachment_125242\" aria-describedby=\"caption-attachment-125242\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-125242 size-large\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/06\/heroku-doppler-env-staging-apibaseurl-staging-myapi-com-dpenv-staging-1024x383.png\" alt=\"Acesso aos segredos Doppler em um aplicativo implantado no Heroku.\" width=\"1024\" height=\"383\"><figcaption id=\"caption-attachment-125242\" class=\"wp-caption-text\">Acesso aos segredos Doppler em um aplicativo implantado no Heroku.<\/figcaption><\/figure>\n<p>Isso completa o tutorial para configurar vari\u00e1veis de ambiente em um projeto Node.js usando tr\u00eas m\u00e9todos populares. Em seguida, vamos dar uma olhada em algumas maneiras nas quais voc\u00ea pode garantir que suas vari\u00e1veis de ambiente e seus arquivos estejam seguros enquanto estiverem em uso.<\/p>\n<h2>Como manter os arquivos de vari\u00e1veis de ambiente seguros<\/h2>\n<p>Embora as Vari\u00e1veis de ambiente sejam um recurso \u00fatil nas modernas pr\u00e1ticas de DevOps, voc\u00ea precisa estar ciente das implica\u00e7\u00f5es de seguran\u00e7a que elas podem causar. Aqui est\u00e3o algumas dicas que voc\u00ea pode usar para manter seus arquivos de vari\u00e1veis de ambiente seguros.<\/p>\n<h3>Mantenha os arquivos de ambiente fora do controle de vers\u00e3o<\/h3>\n<p>Uma das coisas mais importantes que voc\u00ea deve ter em mente ao lidar com qualquer segredo \u00e9 mant\u00ea-los fora do controle de vers\u00e3o. O controle de vers\u00e3o \u00e9 feito exclusivamente para rastrear altera\u00e7\u00f5es atrav\u00e9s do c\u00f3digo-fonte do seu aplicativo. Tudo o que vai em um sistema de controle de vers\u00e3o permanece nele at\u00e9 ser explicitamente exclu\u00eddo, e a maioria da sua equipe tem acesso a esses dados hist\u00f3ricos para fins de refer\u00eancia.<\/p>\n<p>Se voc\u00ea armazenou as chaves do seu bucket de armazenamento AWS ou um servi\u00e7o API pago em um arquivo env para uso em seu aplicativo, voc\u00ea n\u00e3o quer compartilh\u00e1-lo com toda \u00e0 sua equipe de desenvolvimento, a menos que seja necess\u00e1rio que eles tenham acesso a ele. Se seu projeto \u00e9 open-sourced em uma <a href=\"https:\/\/kinsta.com\/pt\/blog\/que-github\/\">plataforma como o GitHub<\/a>, adicionar arquivos env ao seu VCS pode significar compartilh\u00e1-lo com o mundo inteiro! Os arquivos env s\u00e3o destinados a serem armazenados localmente. Voc\u00ea pode fornecer a cada ambiente de implanta\u00e7\u00e3o os arquivos env relevantes atrav\u00e9s de m\u00e9todos dedicados.<\/p>\n<p>Sempre adicione o arquivo env ao seu arquivo <strong>.gitignore<\/strong> (assumindo que voc\u00ea use git para controle de vers\u00e3o) ou empregue qualquer outra forma para que seu VCS pule os arquivos env ao cometer altera\u00e7\u00f5es. Voc\u00ea pode considerar adicionar um arquivo env template ao seu VCS para que qualquer outro membro da equipe possa us\u00e1-lo como uma refer\u00eancia para criar seus arquivos env localmente.<\/p>\n<h3>Verifique o nome do pacote antes da instala\u00e7\u00e3o<\/h3>\n<p>J\u00e1 que voc\u00ea normalmente instalaria a maioria dos pacotes do NPM ao trabalhar com um aplicativo Node.js, voc\u00ea deve tomar cuidado extra ao fazer isso. \u00c9 bem conhecido que qualquer pessoa pode criar e implementar um pacote NPM. E tamb\u00e9m n\u00e3o surpreende que as pessoas frequentemente cometam erros ao digitar o nome de um pacote que eles querem instalar.<\/p>\n<p><a href=\"https:\/\/therecord.media\/another-set-of-malicious-npm-packages-caught-stealing-discord-tokens-environment-variables\/\" target=\"_blank\" rel=\"noopener noreferrer\">V\u00e1rios casos<\/a> foram observados onde pacotes maliciosos com nomes similares a alguns pacotes populares foram instalados acidentalmente pelos usu\u00e1rios devido a erros de digita\u00e7\u00e3o. Tais pacotes s\u00e3o projetados para ganhar acesso \u00e0s vari\u00e1veis de ambiente do seu aplicativo e envi\u00e1-los via internet aos seus criadores.<\/p>\n<p>A \u00fanica maneira de se salvar \u00e9 estar alerta sempre que instalar novos pacotes a partir da internet.<\/p>\n<h3>Prefira os gerenciadores secretos para arquivos env<\/h3>\n<p>Com problemas como vazamentos acidentais enquanto compartilham e erros de formata\u00e7\u00e3o, os arquivos de env certamente n\u00e3o s\u00e3o a melhor op\u00e7\u00e3o dispon\u00edvel para o gerenciamento secreto. Entre com os gerenciadores secretos. Gerenciadores secretos como o Doppler permitem que voc\u00ea isole completamente seus segredos de aplicativo do seu c\u00f3digo-fonte e os gerencie em uma plataforma dedicada.<\/p>\n<p>Voc\u00ea pode conceder \u00e0 sua equipe acesso a esses segredos diretamente na plataforma, e seu aplicativo pode acess\u00e1-los atrav\u00e9s de conex\u00f5es criptografadas pela internet. Ele resolve todos os males associados aos arquivos env enquanto lhe permite a flexibilidade de manter conjuntos de segredos baseados nos ambientes do seu aplicativo.<\/p>\n<p>No entanto, h\u00e1 algumas considera\u00e7\u00f5es importantes a serem feitas. Os gerenciadores de segredos ainda est\u00e3o em est\u00e1gio inicial de desenvolvimento tecnol\u00f3gico. Al\u00e9m disso, eles s\u00e3o plataformas de terceiros sujeitas a seus pr\u00f3prios problemas de seguran\u00e7a. Portanto, \u00e9 essencial realizar uma avalia\u00e7\u00e3o cuidadosa e selecionar o gerenciador de segredos correto. Al\u00e9m disso, se o seu aplicativo, a equipe de desenvolvimento ou o n\u00famero de segredos do aplicativo n\u00e3o forem grandes o suficiente, o uso de um gerenciador de segredos pode ser desnecess\u00e1rio.<\/p>\n<h2>Tabela de refer\u00eancia de vari\u00e1veis de ambiente<\/h2>\n<p>Aqui est\u00e1 uma folha de refer\u00eancia r\u00e1pida para ajud\u00e1-lo a se familiarizar rapidamente com as vari\u00e1veis de ambiente e seu uso:<\/p>\n<div class=\"\"responsive-table\">\n<table>\n<tbody>\n<tr>\n<td>Defini\u00e7\u00e3o das vari\u00e1veis de ambiente<\/td>\n<td>Vari\u00e1veis fornecidas aos processos por seus processos de chamada<\/td>\n<\/tr>\n<tr>\n<td>Objetivo<\/td>\n<td>\n<ul>\n<li>Armazenar e proteger os segredos do aplicativo<\/li>\n<li>Gerenciar dados de configura\u00e7\u00e3o espec\u00edficos do ambiente<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td>Tipos<\/td>\n<td>Somente para Windows:<\/p>\n<ul>\n<li>Sistema<\/li>\n<li>Usu\u00e1rio<\/li>\n<li>Tempo de execu\u00e7\u00e3o\/Processo<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td>Exemplos populares de casos de uso<\/td>\n<td>\n<ul>\n<li>Chaves privadas<\/li>\n<li>Nomes de ambiente<\/li>\n<li>URLs base da API, etc<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td>Como implement\u00e1-las em seu aplicativo?<\/td>\n<td>\n<ul>\n<li>Arquivos .env<\/li>\n<li>Gerenciadores de segredos nativos da plataforma<\/li>\n<li>Servi\u00e7os dedicados de gerenciamento de segredos<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n\n<h2>Resumo<\/h2>\n<p>As vari\u00e1veis de ambiente s\u00e3o importantes para isolar dados sens\u00edveis do seu aplicativo. Elas ajudam a proteger os segredos do seu aplicativo, bem como permitem que voc\u00ea troque facilmente entre conjuntos de segredos, dependendo do ambiente do aplicativo. No entanto, gerenci\u00e1-las adiciona outra tarefa aos seus afazeres.<\/p>\n<p>Existem v\u00e1rias maneiras de proteger as vari\u00e1veis de ambiente, conforme discutido anteriormente. \u00c9 importante explorar todas essas op\u00e7\u00f5es e determinar qual delas se adequa melhor e acelera o seu projeto de forma mais eficaz.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Se voc\u00ea j\u00e1 trabalhou em qualquer forma de desenvolvimento de aplicativo, voc\u00ea j\u00e1 deve ter ouvido falar do termo &#8220;vari\u00e1veis de ambiente&#8221; Vari\u00e1veis de ambiente s\u00e3o &#8230;<\/p>\n","protected":false},"author":238,"featured_media":51122,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[439,523,506],"topic":[1010],"class_list":["post-51121","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-development","tag-javascript","tag-node-js","topic-dicas-de-tecnologia"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Vari\u00e1veis de Ambiente: O que S\u00e3o e Como Utiliz\u00e1-las<\/title>\n<meta name=\"description\" content=\"As vari\u00e1veis de ambiente s\u00e3o usadas para armazenar segredos e dados de configura\u00e7\u00e3o do aplicativo, acessados pelo aplicativo em execu\u00e7\u00e3o quando necess\u00e1rio. Descubra mais sobre esse assunto neste artigo.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vari\u00e1veis de Ambiente: O que S\u00e3o e Como Utiliz\u00e1-las\" \/>\n<meta property=\"og:description\" content=\"As vari\u00e1veis de ambiente s\u00e3o usadas para armazenar segredos e dados de configura\u00e7\u00e3o do aplicativo, acessados pelo aplicativo em execu\u00e7\u00e3o quando necess\u00e1rio. Descubra mais sobre esse assunto neste artigo.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-11T07:02:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-01T20:03:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/what-is-an-environment-variable.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Kumar Harsh\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"As vari\u00e1veis de ambiente s\u00e3o usadas para armazenar segredos e dados de configura\u00e7\u00e3o do aplicativo, acessados pelo aplicativo em execu\u00e7\u00e3o quando necess\u00e1rio. Descubra mais sobre esse assunto neste artigo.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/what-is-an-environment-variable.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kumar Harsh\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"38 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/\"},\"author\":{\"name\":\"Kumar Harsh\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/3a80efffa9cbb0333cc9c22b754415d9\"},\"headline\":\"Vari\u00e1veis de Ambiente: O que S\u00e3o e Como Utiliz\u00e1-las\",\"datePublished\":\"2022-07-11T07:02:48+00:00\",\"dateModified\":\"2025-10-01T20:03:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/\"},\"wordCount\":7668,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/what-is-an-environment-variable.jpg\",\"keywords\":[\"development\",\"JavaScript\",\"node.js\"],\"inLanguage\":\"pt-PT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/\",\"name\":\"Vari\u00e1veis de Ambiente: O que S\u00e3o e Como Utiliz\u00e1-las\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/what-is-an-environment-variable.jpg\",\"datePublished\":\"2022-07-11T07:02:48+00:00\",\"dateModified\":\"2025-10-01T20:03:57+00:00\",\"description\":\"As vari\u00e1veis de ambiente s\u00e3o usadas para armazenar segredos e dados de configura\u00e7\u00e3o do aplicativo, acessados pelo aplicativo em execu\u00e7\u00e3o quando necess\u00e1rio. Descubra mais sobre esse assunto neste artigo.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/what-is-an-environment-variable.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/what-is-an-environment-variable.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dicas de Tecnologia\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/dicas-de-tecnologia\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Vari\u00e1veis de Ambiente: O que S\u00e3o e Como Utiliz\u00e1-las\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/3a80efffa9cbb0333cc9c22b754415d9\",\"name\":\"Kumar Harsh\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/de2d8d6273bdcc3dfa2f8270428f95b2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/de2d8d6273bdcc3dfa2f8270428f95b2?s=96&d=mm&r=g\",\"caption\":\"Kumar Harsh\"},\"description\":\"Kumar is a software developer and a technical author based in India. He specializes in JavaScript and DevOps. You can learn more about his work on his website.\",\"sameAs\":[\"https:\/\/kumarharsh.me\"],\"url\":\"https:\/\/kinsta.com\/pt\/blog\/author\/kumarharsh\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Vari\u00e1veis de Ambiente: O que S\u00e3o e Como Utiliz\u00e1-las","description":"As vari\u00e1veis de ambiente s\u00e3o usadas para armazenar segredos e dados de configura\u00e7\u00e3o do aplicativo, acessados pelo aplicativo em execu\u00e7\u00e3o quando necess\u00e1rio. Descubra mais sobre esse assunto neste artigo.","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:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/","og_locale":"pt_PT","og_type":"article","og_title":"Vari\u00e1veis de Ambiente: O que S\u00e3o e Como Utiliz\u00e1-las","og_description":"As vari\u00e1veis de ambiente s\u00e3o usadas para armazenar segredos e dados de configura\u00e7\u00e3o do aplicativo, acessados pelo aplicativo em execu\u00e7\u00e3o quando necess\u00e1rio. Descubra mais sobre esse assunto neste artigo.","og_url":"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2022-07-11T07:02:48+00:00","article_modified_time":"2025-10-01T20:03:57+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/what-is-an-environment-variable.jpg","type":"image\/jpeg"}],"author":"Kumar Harsh","twitter_card":"summary_large_image","twitter_description":"As vari\u00e1veis de ambiente s\u00e3o usadas para armazenar segredos e dados de configura\u00e7\u00e3o do aplicativo, acessados pelo aplicativo em execu\u00e7\u00e3o quando necess\u00e1rio. Descubra mais sobre esse assunto neste artigo.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/what-is-an-environment-variable.jpg","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Kumar Harsh","Tempo estimado de leitura":"38 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/"},"author":{"name":"Kumar Harsh","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/3a80efffa9cbb0333cc9c22b754415d9"},"headline":"Vari\u00e1veis de Ambiente: O que S\u00e3o e Como Utiliz\u00e1-las","datePublished":"2022-07-11T07:02:48+00:00","dateModified":"2025-10-01T20:03:57+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/"},"wordCount":7668,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/what-is-an-environment-variable.jpg","keywords":["development","JavaScript","node.js"],"inLanguage":"pt-PT"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/","url":"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/","name":"Vari\u00e1veis de Ambiente: O que S\u00e3o e Como Utiliz\u00e1-las","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/what-is-an-environment-variable.jpg","datePublished":"2022-07-11T07:02:48+00:00","dateModified":"2025-10-01T20:03:57+00:00","description":"As vari\u00e1veis de ambiente s\u00e3o usadas para armazenar segredos e dados de configura\u00e7\u00e3o do aplicativo, acessados pelo aplicativo em execu\u00e7\u00e3o quando necess\u00e1rio. Descubra mais sobre esse assunto neste artigo.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/what-is-an-environment-variable.jpg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/07\/what-is-an-environment-variable.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/o-que-sao-variaveis-de-ambiente\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Dicas de Tecnologia","item":"https:\/\/kinsta.com\/pt\/topicos\/dicas-de-tecnologia\/"},{"@type":"ListItem","position":3,"name":"Vari\u00e1veis de Ambiente: O que S\u00e3o e Como Utiliz\u00e1-las"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/3a80efffa9cbb0333cc9c22b754415d9","name":"Kumar Harsh","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/de2d8d6273bdcc3dfa2f8270428f95b2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/de2d8d6273bdcc3dfa2f8270428f95b2?s=96&d=mm&r=g","caption":"Kumar Harsh"},"description":"Kumar is a software developer and a technical author based in India. He specializes in JavaScript and DevOps. You can learn more about his work on his website.","sameAs":["https:\/\/kumarharsh.me"],"url":"https:\/\/kinsta.com\/pt\/blog\/author\/kumarharsh\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/51121","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/238"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=51121"}],"version-history":[{"count":11,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/51121\/revisions"}],"predecessor-version":[{"id":60444,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/51121\/revisions\/60444"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/51121\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/51121\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/51121\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/51121\/translations\/fr"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/51121\/translations\/es"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/51121\/translations\/de"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/51121\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/51122"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=51121"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=51121"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=51121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}