> For the complete documentation index, see [llms.txt](https://docs.ipcheck.ing/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ipcheck.ing/developer/pt-br/reference/environment-variables.md).

# Variáveis de Ambiente

Todas as variáveis de ambiente que o MyIP lê, o que cada uma faz e seu valor padrão.

Esta é a lista oficial. Toda variável abaixo é lida em algum lugar no código (`process.env.*` no servidor, `import.meta.env.*` no bundle do navegador). Tudo o que não estiver listado aqui é ignorado.

Copiar `.env.example` para `.env` para começar:

{% code title="shell" %}

```bash
cp .env.example .env
```

{% endcode %}

`dotenv` carrega `.env` a partir da raiz do repositório em `backend-server.js`, `frontend-server.js`, `common/logger.js`, `sentry-instrument.js`, e `vite.config.js`.

## Tempo de build vs tempo de execução

O MyIP tem dois tipos de variáveis, e confundi-las é o erro de implantação mais comum.

| Tipo              | Prefixo     | Lido por                                                                            | Quando entra em vigor            |
| ----------------- | ----------- | ----------------------------------------------------------------------------------- | -------------------------------- |
| Tempo de execução | sem prefixo | processos Node.js (`backend-server.js`, `frontend-server.js`, manipuladores de API) | Ao reiniciar o processo          |
| Tempo de build    | `VITE_`     | Vite, durante `pnpm run build`                                                      | Somente após uma nova compilação |

`VITE_*` valores são **incorporados no bundle JavaScript** pelo Vite no tempo de build. Eles não são lidos do ambiente quando o app roda no navegador. Alterar uma `VITE_*` variável e reiniciar o servidor não faz nada — você precisa recompilar.

{% hint style="warning" %}
**Implicação no Docker.** A imagem oficial `jason5ng32/myip:latest` foi executada `pnpm run build` no momento da construção da imagem, sem `.env` presente (`.env` está listado em `.dockerignore` ). Passar `-e VITE_CURL_IPV4_DOMAIN=...` para essa imagem não tem **efeito no bundle do frontend**. Para usar variáveis de tempo de build no Docker, você precisa construir sua própria imagem com os valores presentes no momento da construção.
{% endhint %}

## Todas as variáveis em resumo

Clique no nome de uma variável para ir direto à descrição completa.

| Variável                                                                  | Padrão         | Escopo                    | Obrigatório                    |
| ------------------------------------------------------------------------- | -------------- | ------------------------- | ------------------------------ |
| [MAXMIND\_ACCOUNT\_ID](#maxmind-account-id)                               | `""`           | Tempo de execução         | Recursos do MaxMind            |
| [MAXMIND\_LICENSE\_KEY](#maxmind-license-key)                             | `""`           | Tempo de execução         | Recursos do MaxMind            |
| [MAXMIND\_AUTO\_UPDATE](#maxmind-auto-update)                             | `"false"`      | Tempo de execução         | —                              |
| [CAIDA\_AUTO\_UPDATE](#caida-auto-update)                                 | `"false"`      | Tempo de execução         | —                              |
| [BACKEND\_PORT](#backend-port)                                            | `11966`        | Tempo de execução         | —                              |
| [FRONTEND\_PORT](#frontend-port)                                          | `18966`        | Tempo de execução         | —                              |
| [ALLOWED\_DOMAINS](#allowed-domains)                                      | `""`           | Tempo de execução         | Implantações fora de localhost |
| [SECURITY\_RATE\_LIMIT](#security-rate-limit)                             | `0`            | Tempo de execução         | —                              |
| [SECURITY\_DELAY\_AFTER](#security-delay-after)                           | `0`            | Tempo de execução         | —                              |
| [SECURITY\_BLACKLIST\_LOG\_FILE\_PATH](#security-blacklist-log-file-path) | `""`           | Tempo de execução         | —                              |
| [LOG\_LEVEL](#log-level)                                                  | `"info"`       | Tempo de execução         | —                              |
| [LOG\_FORMAT](#log-format)                                                | pretty         | Tempo de execução         | —                              |
| [LOG\_HTTP](#log-http)                                                    | `"false"`      | Tempo de execução         | —                              |
| [VITE\_SENTRY\_DSN\_FRONTEND](#vite-sentry-dsn-frontend)                  | `""`           | Build + tempo de execução | —                              |
| [SENTRY\_DSN\_BACKEND](#sentry-dsn-backend)                               | `""`           | Tempo de execução         | —                              |
| [SENTRY\_ENVIRONMENT](#sentry-environment)                                | `"production"` | Tempo de execução + build | —                              |
| [SENTRY\_ORG](#sentry-org)                                                | `""`           | Build                     | —                              |
| [SENTRY\_PROJECT\_FRONTEND](#sentry-project-frontend)                     | `""`           | Build                     | —                              |
| [SENTRY\_AUTH\_TOKEN](#sentry-auth-token)                                 | `""`           | Build                     | —                              |
| [GOOGLE\_MAP\_API\_KEY](#google-map-api-key)                              | `""`           | Tempo de execução         | —                              |
| [IPINFO\_API\_KEY](#ipinfo-api-key)                                       | `""`           | Tempo de execução         | —                              |
| [IPAPIIS\_API\_KEY](#ipapiis-api-key)                                     | `""`           | Tempo de execução         | —                              |
| [IP2LOCATION\_API\_KEY](#ip2location-api-key)                             | `""`           | Tempo de execução         | —                              |
| [CLOUDFLARE\_API\_KEY](#cloudflare-api-key)                               | `""`           | Tempo de execução         | Compartilhamento de relatórios |
| [MAC\_LOOKUP\_API\_KEY](#mac-lookup-api-key)                              | `""`           | Tempo de execução         | —                              |
| [RIPESTAT\_SOURCE\_APP](#ripestat-source-app)                             | `"myip"`       | Tempo de execução         | —                              |
| [CLOUDFLARE\_ACCOUNT\_ID](#cloudflare-account-id)                         | `""`           | Tempo de execução         | Compartilhamento de relatórios |
| [CLOUDFLARE\_KV\_NAMESPACE\_ID](#cloudflare-kv-namespace-id)              | `""`           | Tempo de execução         | Compartilhamento de relatórios |
| [VITE\_CURL\_IPV4\_DOMAIN](#vite-curl-ipv4-domain)                        | `""`           | Build                     | Os três ou nenhum              |
| [VITE\_CURL\_IPV6\_DOMAIN](#vite-curl-ipv6-domain)                        | `""`           | Build                     | Os três ou nenhum              |
| [VITE\_CURL\_IPV64\_DOMAIN](#vite-curl-ipv64-domain)                      | `""`           | Build                     | Os três ou nenhum              |
| [VITE\_SITE\_URL](#vite-site-url)                                         | `""`           | Build + tempo de execução | —                              |
| [VITE\_DOCS\_URL](#vite-docs-url)                                         | `""`           | Build                     | —                              |
| [VITE\_PULSE\_BEACON\_URL](#vite-pulse-beacon-url)                        | `""`           | Build                     | —                              |
| [VITE\_GOOGLE\_ANALYTICS\_ID](#vite-google-analytics-id)                  | `""`           | Build                     | —                              |
| [VITE\_INVISIBILITY\_TEST\_KEY](#vite-invisibility-test-key)              | `""`           | Build                     | —                              |
| [IPCHECKING\_API\_KEY](#ipchecking-api-key)                               | `""`           | Tempo de execução         | —                              |
| [IPCHECKING\_API\_ENDPOINT](#ipchecking-api-endpoint)                     | `""`           | Tempo de execução         | —                              |

## Obrigatório — MaxMind e conjuntos de dados offline

A própria fonte de geolocalização de IP do MyIP e os distintivos de país em toda a interface são servidos a partir de bancos de dados locais do MaxMind GeoLite2. Sem eles, `GET /api/maxmind` responde **503**. Veja [Configuração do MaxMind](/developer/pt-br/getting-started/maxmind-setup.md).

#### `MAXMIND_ACCOUNT_ID` <a href="#maxmind-account-id" id="maxmind-account-id"></a>

Padrão `""` · Tempo de execução · **Necessário para os recursos do MaxMind**

ID da conta MaxMind. Em conjunto com `MAXMIND_LICENSE_KEY` como credenciais HTTP Basic ao baixar os bancos de dados GeoLite2.

#### `MAXMIND_LICENSE_KEY` <a href="#maxmind-license-key" id="maxmind-license-key"></a>

Padrão `""` · Tempo de execução · **Necessário para os recursos do MaxMind**

Chave de licença do MaxMind, gerada na página "Gerenciar chaves de licença" da sua conta.

#### `MAXMIND_AUTO_UPDATE` <a href="#maxmind-auto-update" id="maxmind-auto-update"></a>

Padrão `"false"` · Tempo de execução · Opcional

`"true"` inicia o atualizador periódico: a primeira verificação 60 segundos após a inicialização, depois a cada 24 horas.

#### `CAIDA_AUTO_UPDATE` <a href="#caida-auto-update" id="caida-auto-update"></a>

Padrão `"false"` · Tempo de execução · Opcional

`"true"` atualiza os conjuntos de dados da CAIDA a cada 24 horas — as2org para nomes de organizações de ASN, as-rel2 para o grafo de conectividade de ASN.

{% hint style="info" %}
`MAXMIND_AUTO_UPDATE` controla **apenas o agendador periódico**. O caminho de inicialização "baixar os bancos de dados se estiverem ausentes" não o consulta — se credenciais válidas estiverem presentes, os bancos de dados são baixados na primeira inicialização de qualquer forma (limitado a um timeout de 5 minutos). Da mesma forma, `CAIDA_AUTO_UPDATE=false` ainda permite baixar os snapshots ausentes da CAIDA na inicialização; ele apenas desativa a atualização diária.
{% endhint %}

O backend nunca se recusa a iniciar por falta de bancos de dados. Ele registra um aviso e continua ouvindo mesmo assim.

## Portas

#### `BACKEND_PORT` <a href="#backend-port" id="backend-port"></a>

Padrão `11966` · Tempo de execução · Opcional

Porta em que o servidor da API Express faz bind. Também usada como destino do proxy por `frontend-server.js` e pelo `/api` proxy do servidor de desenvolvimento do Vite.

#### `FRONTEND_PORT` <a href="#frontend-port" id="frontend-port"></a>

Padrão `18966` · Tempo de execução · Opcional

Porta em que o servidor estático/SPA faz bind em produção e a porta do servidor de desenvolvimento do Vite no desenvolvimento.

Ambos são interpretados com `parseInt(..., 10)`. O Dockerfile `EXPOSE`s `18966` apenas; a porta do backend permanece interna ao contêiner.

## Segurança

Veja [Opções de segurança](/developer/pt-br/configuration/security-options.md) e [Proxy reverso e domínios](/developer/pt-br/getting-started/reverse-proxy-and-domains.md).

#### `ALLOWED_DOMAINS` <a href="#allowed-domains" id="allowed-domains"></a>

Padrão `""` · Tempo de execução · **Efetivamente necessário para implantações fora de localhost**

Lista de permissões de hostnames separados por vírgula para a `Referer` verificação global em `/api/*`. `localhost` sempre é permitido; todo o resto deve estar listado aqui, ou cada chamada de API do seu domínio recebe um 403.

#### `SECURITY_RATE_LIMIT` <a href="#security-rate-limit" id="security-rate-limit"></a>

Padrão `0` (desativado) · Tempo de execução · Opcional

Máximo `/api/*` requisições por IP de cliente por **20 minutos** de janela. Acima do limite → `429 {"message":"Muitas requisições"}`. `0` ou não definido desativa completamente o limitador.

#### `SECURITY_DELAY_AFTER` <a href="#security-delay-after" id="security-delay-after"></a>

Padrão `0` (desativado) · Tempo de execução · Opcional

Depois de tantas `/api/*` requisições de um IP dentro de uma **60 minutos** de janela, cada requisição adicional é atrasada em `acertos × 400 ms`. `0` ou não definido o desativa.

#### `SECURITY_BLACKLIST_LOG_FILE_PATH` <a href="#security-blacklist-log-file-path" id="security-blacklist-log-file-path"></a>

Padrão `""` · Tempo de execução · Opcional

Registro em disco opcional de IPs limitados por taxa, por exemplo `"logs/blacklist-ip.log"`, resolvido em relação à raiz do repositório. Vazio significa que nenhum arquivo é gravado; o `IP limitado por taxa` aviso é registrado de qualquer forma.

Notas de comportamento, diretamente do código:

* **A correspondência de Referer é uma correspondência exata de hostname.** `ALLOWED_DOMAINS=example.com` faz **não** permitir `sub.example.com` — liste todos os hostnames a partir dos quais você atende.
* Uma requisição com **sem** `Referer` o cabeçalho é rejeitada com `403 {"error":"O que você está fazendo?"}`. Uma requisição com um `Referer` recebe `403 {"error":"Acesso negado"}`.
* Ambos os limitadores **ignoram** `/api/monitoring`; o túnel do Sentry tem seu próprio limitador fixo (600 requisições por 20 minutos por IP).
* O limitador de taxa registra apenas na transição para o estado limitado, não em cada requisição bloqueada.
* `app.set('trust proxy', 1)` está definido, então coloque exatamente um proxy confiável na frente. O IP do cliente é resolvido a partir de `cf-connecting-ip`, depois `x-forwarded-for` (primeira entrada), depois `cf-connecting-ipv6`, depois o endereço do socket.

## Registro

Veja [Registro](/developer/pt-br/configuration/logging.md).

#### `LOG_LEVEL` <a href="#log-level" id="log-level"></a>

Padrão `"info"` · Tempo de execução · Opcional

Nível mínimo do pino: `debug` / `info` / `warn` / `erro`. Mensagens de nível inferior são descartadas — inclusive o espelhamento delas para o Sentry.

#### `LOG_FORMAT` <a href="#log-format" id="log-format"></a>

Padrão pretty · Tempo de execução · Opcional

`"json"` emite um evento JSON por linha para coletores de logs. Qualquer outro valor (ou não definido) usa saída colorida `pino-pretty` de pino-pretty.

#### `LOG_HTTP` <a href="#log-http" id="log-http"></a>

Padrão `"false"` · Tempo de execução · Opcional

`"true"` monta `pino-http` em `/api/*`: uma linha por requisição com método, URL e status. Montado antes do limitador de taxa, então 429s também são registrados.

## Sentry

Todos opcionais. Sem DSN definido, nenhum SDK do Sentry é carregado e nenhum código do Sentry é incluído no bundle. Veja [Monitoramento de erros (Sentry)](/developer/pt-br/configuration/error-monitoring.md).

#### `VITE_SENTRY_DSN_FRONTEND` <a href="#vite-sentry-dsn-frontend" id="vite-sentry-dsn-frontend"></a>

Padrão `""` · Build **e** tempo de execução · Opcional

DSN do frontend, incorporado ao bundle no tempo de build. **Também lido em tempo de execução** por `backend-server.js` — `POST /api/monitoring` (o túnel de envelopes de primeira parte) só é montado quando isso está definido no processo do servidor.

#### `SENTRY_DSN_BACKEND` <a href="#sentry-dsn-backend" id="sentry-dsn-backend"></a>

Padrão `""` · Tempo de execução · Opcional

DSN do backend, lido por `sentry-instrument.js` (carregado via `node --import`) e por `common/logger.js`, que espelha `warn+` linhas para os Sentry Logs e eleva `error+` para Issues.

#### `SENTRY_ENVIRONMENT` <a href="#sentry-environment" id="sentry-environment"></a>

Padrão `"production"` · Runtime + build · Optional

Tag de ambiente nos eventos do Sentry no backend. Também controla o envio de source maps: os envios só são executados quando isso não está definido ou `production`.

#### `SENTRY_ORG` <a href="#sentry-org" id="sentry-org"></a>

Padrão `""` · Build · Opcional

Slug da organização do Sentry para envio de source maps no tempo de build.

#### `SENTRY_PROJECT_FRONTEND` <a href="#sentry-project-frontend" id="sentry-project-frontend"></a>

Padrão `""` · Build · Opcional

Slug do projeto do Sentry para envio de source maps no tempo de build.

#### `SENTRY_AUTH_TOKEN` <a href="#sentry-auth-token" id="sentry-auth-token"></a>

Padrão `""` · Build · Opcional

Token de autenticação para envio de source maps no tempo de build. Quando não definido, o Vite não gera source maps de forma alguma, então eles nunca acabam sendo servidos publicamente por `dist/`. Segredo de tempo de build — nunca exposto ao navegador.

{% hint style="warning" %}
Se você construir sua própria imagem Docker com `VITE_SENTRY_DSN_FRONTEND` incorporado, passe o mesmo valor para o contêiner em tempo de execução também. Caso contrário, o bundle envia envelopes para `/api/monitoring`, uma rota que o backend nunca montou, e todos os relatórios retornam 404.
{% endhint %}

## Chaves de API opcionais

Cada chave desbloqueia uma fonte de dados de IP ou ferramenta. `GET /api/configs` informa quais destas estão definidas — apenas como booleanos, nunca os valores — e o frontend oculta a interface correspondente quando uma chave está ausente. Veja [Chaves de API opcionais](/developer/pt-br/configuration/optional-api-keys.md) e [Fontes de dados de IP](/developer/pt-br/architecture/ip-data-sources.md).

#### `GOOGLE_MAP_API_KEY` <a href="#google-map-api-key" id="google-map-api-key"></a>

Padrão `""` · Tempo de execução · Opcional

Chave do Google Static Maps, usada por `/api/map`. Aceita uma lista separada por vírgulas; uma chave é escolhida aleatoriamente por requisição.

#### `IPINFO_API_KEY` <a href="#ipinfo-api-key" id="ipinfo-api-key"></a>

Padrão `""` · Tempo de execução · Opcional

token do ipinfo.io para `/api/ipinfo`. Lista separada por vírgulas suportada. O endpoint ainda funciona sem chave, na taxa anônima do ipinfo.io.

#### `IPAPIIS_API_KEY` <a href="#ipapiis-api-key" id="ipapiis-api-key"></a>

Padrão `""` · Tempo de execução · Opcional

Chave da api.ipapi.is para `/api/ipapiis`. Lista separada por vírgulas suportada.

#### `IP2LOCATION_API_KEY` <a href="#ip2location-api-key" id="ip2location-api-key"></a>

Padrão `""` · Tempo de execução · Opcional

Chave do ip2location.io para `/api/ip2location`. Lista separada por vírgulas suportada.

#### `CLOUDFLARE_API_KEY` <a href="#cloudflare-api-key" id="cloudflare-api-key"></a>

Padrão `""` · Tempo de execução · **Necessário para compartilhamento de relatórios**

Token da API da Cloudflare com dois papéis: token Bearer para o Cloudflare Radar (cada `?view=` de `/api/cfradar` — o perfil de ASN, o mapa de calor de atividade online por país e o feed de indisponibilidades usam a mesma permissão de leitura do Radar, então nenhuma visualização precisa de escopo adicional de token), e — juntamente com as duas variáveis em [Compartilhamento de relatórios](#report-sharing-cloudflare-kv) — a credencial para armazenar relatórios compartilháveis no Workers KV. A função KV também precisa da **permissão no token. Defini-la também exibe o** painel na barra de navegação — apenas o feed de indisponibilidades, a menos que **Earth Online** adiciona a parte social. [`VITE_PULSE_BEACON_URL`](#vite-pulse-beacon-url) chave do maclookup.app para

#### `MAC_LOOKUP_API_KEY` <a href="#mac-lookup-api-key" id="mac-lookup-api-key"></a>

Padrão `""` · Tempo de execução · Opcional

Chave da api.ipapi.is para `/api/macchecker`. O endpoint funciona sem ela, na taxa anônima.

#### `RIPESTAT_SOURCE_APP` <a href="#ripestat-source-app" id="ripestat-source-app"></a>

Padrão `"myip"` · Tempo de execução · Opcional

Valor enviado como RIPEstat's `sourceapp` parâmetro de consulta do RIPEstat, para que o RIPE possa atribuir o tráfego à sua implantação.

{% hint style="info" %}
`/api/ipapiis` e `/api/ip2location` constroem sua URL upstream chamando `.split(',')` na chave sem verificação de nulo. Com a chave não definida, o manipulador lança erro e retorna 500. O frontend nunca os chama nesse estado, porque `/api/configs` reporta a fonte como indisponível e a interface a oculta.
{% endhint %}

## Compartilhamento de relatórios (Cloudflare KV) <a href="#report-sharing-cloudflare-kv" id="report-sharing-cloudflare-kv"></a>

Relatórios de diagnóstico compartilháveis são armazenados no Cloudflare Workers KV via API REST. **Os três** variáveis — [`CLOUDFLARE_API_KEY`](#cloudflare-api-key) mais as duas abaixo — precisam estar definidas, ou `POST /api/report` e `GET /api/report/:id` ambos respondem `503 {"error":"Compartilhamento de relatórios não configurado"}` e `/api/configs` relatórios `reportSharing: false`, o que oculta a interface de compartilhamento.

#### `CLOUDFLARE_ACCOUNT_ID` <a href="#cloudflare-account-id" id="cloudflare-account-id"></a>

Padrão `""` · Tempo de execução · **Necessário para compartilhamento de relatórios**

ID da conta Cloudflare que possui o namespace KV.

#### `CLOUDFLARE_KV_NAMESPACE_ID` <a href="#cloudflare-kv-namespace-id" id="cloudflare-kv-namespace-id"></a>

Padrão `""` · Tempo de execução · **Necessário para compartilhamento de relatórios**

Do namespace, o **ID hexadecimal** no painel — não o nome de exibição.

Restrições dos relatórios, de `common/report-schema.js`: a retenção selecionável é de 1, 3 ou 7 dias (qualquer outra opção é reduzida forçadamente para 1 dia), e a carga útil armazenada é limitada a 256 KB (`413` além disso). O limite do corpo JSON do Express é 500 KB, deliberadamente acima do limite do relatório.

## API Curl

#### `VITE_CURL_IPV4_DOMAIN` <a href="#vite-curl-ipv4-domain" id="vite-curl-ipv4-domain"></a>

Padrão `""` · Build · Os três ou nenhum

Hostname somente IPv4 anunciado no cartão da API curl.

#### `VITE_CURL_IPV6_DOMAIN` <a href="#vite-curl-ipv6-domain" id="vite-curl-ipv6-domain"></a>

Padrão `""` · Build · Os três ou nenhum

Hostname somente IPv6.

#### `VITE_CURL_IPV64_DOMAIN` <a href="#vite-curl-ipv64-domain" id="vite-curl-ipv64-domain"></a>

Padrão `""` · Build · Os três ou nenhum

Hostname dual-stack.

{% hint style="warning" %}
O cartão da API curl só é renderizado quando **os três** não estão vazios — `curlDomainsHadSet` em `frontend/store.js` faz um AND entre eles. Definir um ou dois não mostra nada. E como estes são `VITE_*`tempo de build, eles precisam estar presentes no momento de build.
{% endhint %}

Estas variáveis fornecem apenas os hostnames mostrados aos usuários. O MyIP não serve esses endpoints por conta própria — você aponta os registros DNS para qualquer serviço de eco de IP em texto puro que você execute.

## Diversos

#### `VITE_SITE_URL` <a href="#vite-site-url" id="vite-site-url"></a>

Padrão `""` · Build **e** tempo de execução · Opcional

A origem absoluta da sua implantação. No tempo de build, ela preenche `__SITE_URL__` em `index.html` (tags canônicas / OG); quando vazio, todo esse bloco marcado é removido. Em tempo de execução, ele se torna o último segmento do upstream `User-Agent` (`MyIP/v7.2.0/https://example.com`), então forks se identificam para as APIs upstream em vez de se passarem por ipcheck.ing. Barras finais são removidas.

#### `VITE_DOCS_URL` <a href="#vite-docs-url" id="vite-docs-url"></a>

Padrão `""` · Build · Opcional

Origem do site de documentação do GitBook que dá suporte ao assistente de documentação no app e ao link da Central de Ajuda no rodapé, por exemplo `https://docs.ipcheck.ing`. Barras finais são removidas; o script de incorporação é carregado de `<origin>/~gitbook/embed/script.js` no primeiro uso, nunca no carregamento da página.

Quando vazio, nem o assistente nem o link do rodapé são incorporados ao bundle. O ponto de entrada da navegação também exige a implantação canônica — veja [Recursos ligados ao IPCheck.ing](/developer/pt-br/configuration/features-tied-to-ipcheck-ing.md).

#### `VITE_PULSE_BEACON_URL` <a href="#vite-pulse-beacon-url" id="vite-pulse-beacon-url"></a>

Padrão `""` · Build · Opcional

URL completa do serviço de agregação por trás da parte social de **Earth Online**, o painel de visitantes ao vivo na barra de navegação. Barras finais são removidas; o frontend adiciona `/beacon`, `/status` e `/stats` a ele.

Quando vazio — o padrão em `.env.example` — as partes sociais ficam desativadas: sem compositor de status, sem feed Mais recentes, sem mapa de visitantes, sem beacon de visita, sem seção na página de privacidade. O painel em si não depende desta variável: seu feed global de indisponibilidades usa `GET /api/cfradar?view=outages`, então a entrada de navegação e o <kbd>p</kbd> atalho ainda aparecem em qualquer implantação com [`CLOUDFLARE_API_KEY`](#cloudflare-api-key). O serviço de agregação não é open-source, então definir isso para qualquer coisa diferente do seu próprio backend compatível não traz nenhum benefício. Veja [Recursos ligados ao IPCheck.ing](/developer/pt-br/configuration/features-tied-to-ipcheck-ing.md).

#### `VITE_GOOGLE_ANALYTICS_ID` <a href="#vite-google-analytics-id" id="vite-google-analytics-id"></a>

Padrão `""` · Build · Opcional

ID de medição do Google Analytics. Quando vazio, `gtag.js` nunca é injetado e a página de privacidade informa que a análise está desativada. Quem faz auto-hospedagem deve deixá-lo vazio.

#### `VITE_INVISIBILITY_TEST_KEY` <a href="#vite-invisibility-test-key" id="vite-invisibility-test-key"></a>

Padrão `""` · Build · Opcional

Chave passada como `pdKey` para o script de detecção de proxy de terceiros usado no Teste de Invisibilidade. Só faz sentido em implantações que também tenham `IPCHECKING_API_KEY`. Não presente em `.env.example`.

#### `IPCHECKING_API_KEY` <a href="#ipchecking-api-key" id="ipchecking-api-key"></a>

Padrão `""` · Tempo de execução · Opcional

Chave de API para a API companheira privada do IPCheck.ing. Controla `/api/ipchecking`, `/api/getuserinfo`, `PUT /api/updateuserachievement`, `/api/invisibility`, `/api/dnsleaktest/session/:token`, e `POST /api/persona/evaluate` — sem ela, essas rotas retornam `500 {"error":"A chave da API está ausente"}`. Também exposta como `ipChecking` em `/api/configs`. Não em `.env.example`.

#### `IPCHECKING_API_ENDPOINT` <a href="#ipchecking-api-endpoint" id="ipchecking-api-endpoint"></a>

Padrão `""` · Tempo de execução · Opcional

URL base dessa API companheira, usada em conjunto com `IPCHECKING_API_KEY`. Não em `.env.example`.

{% hint style="info" %}
`IPCHECKING_API_KEY` / `IPCHECKING_API_ENDPOINT` e `VITE_INVISIBILITY_TEST_KEY` pertencem a um serviço complementar de código fechado. Forks auto-hospedados não podem obtê-los, e os recursos que eles controlam ficam ocultos em implantações não-`ipcheck.ing` autohospedadas, de qualquer forma. Veja [Recursos ligados ao IPCheck.ing](/developer/pt-br/configuration/features-tied-to-ipcheck-ing.md).
{% endhint %}

## Aliases legados

Duas variáveis foram renomeadas. As grafias antigas ainda são aceitas como alternativas, então implantações existentes não perdem recursos na atualização. Prefira os novos nomes.

| Nome antigo        | Nome atual           | Leia em                                                       |
| ------------------ | -------------------- | ------------------------------------------------------------- |
| `IPINFO_API_TOKEN` | `IPINFO_API_KEY`     | `api/ipinfo-io.js`, `api/configs.js`                          |
| `CLOUDFLARE_API`   | `CLOUDFLARE_API_KEY` | `common/cf-radar.js`, `api/share-report.js`, `api/configs.js` |

A ordem de resolução é `NEW || OLD` — se ambos estiverem definidos, o novo nome vence.

## Configuração mínima funcional

{% code title=".env" %}

```bash
BACKEND_PORT=11966
FRONTEND_PORT=18966
ALLOWED_DOMAINS="myip.example.com"
MAXMIND_ACCOUNT_ID="seu-id-de-conta"
MAXMIND_LICENSE_KEY="sua-chave-de-licença"
MAXMIND_AUTO_UPDATE="true"
```

{% endcode %}

Todo o resto é opcional e apenas adiciona fontes de dados ou ferramentas. Veja [Início rápido](/developer/pt-br/getting-started/quickstart.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.ipcheck.ing/developer/pt-br/reference/environment-variables.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
