Docker Compose
Execute uma instância completa e gratuita do Status200 em um único servidor Linux com o Docker Compose. Esta página leva você de um servidor recém-criado a uma instância em funcionamento e depois trata de HTTPS, do reforço para produção, de backups, de atualizações e da remoção. Para trabalhar no próprio código do Status200, veja Desenvolvimento local.
Como funciona
O Docker Compose executa cada parte do Status200 como um contêiner no seu servidor. Todo o tráfego entra pelo contêiner ingress, que o encaminha para o app. O app guarda os dados no PostgreSQL, no ClickHouse e no Valkey. Uma sonda incluída executa as verificações dos seus monitores e envia os resultados pelo ingress.
A implantação com Docker Compose
| Serviço | Imagem | O que faz |
|---|---|---|
ingress | status200/nginx | Recebe todo o tráfego nas portas 80 e 443 e o encaminha para o app. Serve HTTPS quando o Status200 gerencia o certificado. |
app | status200/app | O painel, a API, as páginas de status, a ingestão de telemetria e os workers em segundo plano. |
probe-1 | status200/probe | Uma sonda global que executa as verificações dos seus monitores. Ela usa a rede do host. |
runner | status200/runner | O Runner da instância, que executa correções de código com IA. Ele usa a rede do host. |
postgres | postgres:15 | Configuração e estado: monitores, incidentes, usuários. Armazenados no volume postgres. |
clickhouse | clickhouse/clickhouse-server:26.7 | Telemetria: logs, métricas, traces e exceções. Armazenada no volume clickhouse. |
valkey | valkey/valkey:9.1-alpine | Cache e filas. Não guarda nada em disco. |
O serviço valkey executa o Valkey, o fork com licença BSD do Redis 7.2, configurado pelas configurações VALKEY_* do config.env. Qualquer servidor que fale o protocolo do Redis funciona — aponte VALKEY_HOST para um Redis gerenciado se preferir. Essas configurações se chamavam REDIS_* até a 13.0.0; os nomes antigos ainda são lidos, o contêiner ainda responde ao nome de host redis e o npm run update não os reescreve, então um config.env antigo não precisa de alterações.
Para produção em grande escala, ou quando você precisar de alta disponibilidade, use o chart do Helm no Kubernetes: o Docker Compose executa uma única cópia de cada serviço em um único servidor.
Requisitos
Escolha o tamanho do servidor pelo que você vai executar nele. A telemetria (logs, métricas, traces) é o que determina memória e disco; veja Dimensionamento e planejamento de capacidade quando conhecer seus volumes.
| Recomendado | Mínimo para homelab | |
|---|---|---|
| Memória | 16 GB | 8 GB |
| CPU | 8 núcleos | 4 núcleos |
| Disco | 400 GB | 20 GB |
| Sistema | Ubuntu 22.04, ou outro Linux baseado em Debian, Ubuntu ou RHEL | O mesmo |
| Arquitetura | x86-64 (amd64) ou ARM (arm64) | A mesma |
O mínimo para homelab serve para uso pessoal e experimental — há quem rode o Status200 em um Raspberry Pi.
Você também precisa de:
- Docker com o plugin Docker Compose v2 (o comando
docker compose). - Git, para baixar o Status200.
- Node.js e npm, que executam os scripts
npm startenpm run updateque envolvem o Docker Compose. - Portas 80 e 443 livres no servidor. A tabela abaixo lista cada porta que o Status200 usa no host.
| Porta do host | Usada por | Configuração | Para que serve |
|---|---|---|---|
| 80 | ingress | ONEUPTIME_HTTP_PORT | O painel, a API, a ingestão de telemetria e a validação do Let's Encrypt. |
| 443 | ingress | STATUS_PAGE_HTTPS_PORT | HTTPS para a sua instância quando o Status200 gerencia o certificado, e para páginas de status e painéis em domínios personalizados. |
| 5400 | postgres | Definida no docker-compose.yml | Permite que o npm run backup e o restore.sh alcancem o PostgreSQL a partir do próprio servidor. Ela só é publicada em 127.0.0.1. |
| 3874 | probe-1 | GLOBAL_PROBE_1_PORT | O servidor próprio da sonda. Nada fora do servidor precisa dela. |
| 3876 | runner | ONEUPTIME_RUNNER_PORT | O servidor próprio do Runner. Nada fora do servidor precisa dela. |
Há também um vídeo passo a passo da instalação.
Instalar o Status200
Clone o branch release
O branch
releasecontém os arquivos da versão mais recente.git clone --depth 1 --single-branch --branch release https://git.wilix.dev/status200/status200.git cd oneuptimeCrie o config.env
Todas as configurações do Status200 ficam no
config.env. Comece pelo exemplo:cp config.example.env config.envDefina o nome de host
Abra o
config.enve definaHOSTcom o nome de domínio ou o endereço IP que as pessoas vão usar para acessar o Status200, semhttp://. Mantenhalocalhostsó para experimentar o Status200 no seu próprio computador.HOST=status200.example.comGere segredos aleatórios
O arquivo de exemplo vem com segredos de exemplo que são públicos no GitHub. Substitua cada um por um valor aleatório próprio:
while grep -q "please-change-this-to-random-value" config.env; do sed -i "0,/please-change-this-to-random-value/{s/please-change-this-to-random-value/$(openssl rand -hex 32)/}" config.env done grep -c "please-change-this" config.envO último comando imprime
0: não sobrou nenhum segredo de exemplo. O laço usa o GNUsed, que todo servidor Linux tem. Estas são as configurações que ele preenche:Configuração O que ela protege ONEUPTIME_SECRETAs chamadas entre os próprios serviços do Status200. ENCRYPTION_SECRETOs segredos que o Status200 guarda, como tokens de integrações e senhas SMTP, e os tokens de login que ele emite. DATABASE_PASSWORD,CLICKHOUSE_PASSWORD,VALKEY_PASSWORDOs três armazenamentos de dados. REGISTER_PROBE_KEYO registro de sondas na sua instância. GLOBAL_PROBE_1_KEY,GLOBAL_PROBE_2_KEYAs sondas globais que o Docker Compose pode executar ( probe-1é executada por padrão).STATUS200_RUNNER_KEYO Runner incluído. GLOBAL_RUNNER_KEYO Runner global incluído, que executa as etapas JavaScript de todos os projetos. ImportanteDefina os segredos antes da primeira inicialização e mantenha-os depois. O PostgreSQL só aceita a senha quando cria o banco de dados, e mudar
ENCRYPTION_SECRETdepois torna ilegível todo valor criptografado com o anterior. Se oDATABASE_PASSWORDainda for o segredo de exemplo na primeira inicialização, onpm startdá a ele um valor aleatório antes que o PostgreSQL crie o banco de dados.Inicie o Status200
npm
npm startDocker CLI
(export $(grep -v '^#' config.env | xargs) && docker compose up --remove-orphans -d)A primeira inicialização leva alguns minutos: o Docker baixa as imagens e o Status200 cria os bancos de dados. O
npm startespera cada parte responder e termina com Status200 is up!Crie a primeira conta
Abra
http://seguido do seuHOST(por exemplohttp://localhost) e cadastre-se. A primeira conta de uma instância nova passa a ser o administrador principal dela, que pode abrir o Admin Dashboard em/admin.Qualquer pessoa que consiga acessar a página pode se cadastrar depois de você. Para impedir isso, abra o Admin Dashboard, vá em Configurações > Autenticação e desative Permitir cadastro. As pessoas que você convidar para um projeto ainda podem criar a conta.
Configurar HTTPS
O Status200 serve HTTP simples até você escolher uma de duas formas de adicionar HTTPS:
| Deixar o Status200 obter um certificado | Usar seu próprio proxy reverso | |
|---|---|---|
| O TLS termina em | No ingress do Status200, com um certificado gratuito do Let's Encrypt que ele mesmo renova | No seu proxy: Caddy, Nginx ou um balanceador de carga |
| Você precisa de | Um nome de domínio público apontando para o servidor, e as portas 80 e 443 acessíveis pela internet | Um proxy e um certificado para o seu domínio |
| Configurações | PROVISION_SSL=true, HTTP_PROTOCOL=https | PROVISION_SSL=false, HTTP_PROTOCOL=https, TRUSTED_PROXY_HOPS=2 |
| Páginas de status em domínios personalizados | Funcionam sem configuração extra | Seu proxy também precisa servir esses domínios |
Se você colocar páginas de status ou painéis em domínios personalizados, deixar o Status200 cuidar do TLS é a configuração mais simples: o ingress pede e serve sozinho os certificados desses domínios.
Com HTTP_PROTOCOL=https, o Status200 monta links HTTPS, mantém os cookies de login no HTTPS e pede aos navegadores que acessem o seu HOST só por HTTPS. Um navegador segue isso por um ano, em todas as portas desse nome; então, se um dia o HOST tiver que responder de novo por HTTP simples, defina HSTS_MAX_AGE_SECONDS=0 no config.env algum tempo antes: os navegadores esquecem a regra na próxima visita.
Deixar o Status200 obter um certificado
Aponte seu domínio para o servidor
Crie um registro DNS
A(ouAAAApara IPv6) para o seu domínio, com o endereço IP público do servidor como valor. Com um registroAAAA, ative também o IPv6 para o Status200: veja Endereços dos visitantes.Ative a emissão de certificados
Defina estes valores no
config.env:HOST=status200.example.com PROVISION_SSL=true HTTP_PROTOCOL=httpsHOSTprecisa ser um nome de domínio: o Status200 não consegue obter um certificado para um endereço IP nem paralocalhost.Reinicie com as novas configurações
npm startAbra sua instância por HTTPS
Abra
https://status200.example.com. O Status200 pede o certificado ao iniciar e depois o verifica a cada hora, renovando-o quando faltam menos de 30 dias. Até o primeiro certificado chegar, normalmente em poucos minutos, o ingress serve um certificado autoassinado temporário e o navegador avisa você.
Usar seu próprio proxy reverso
Estes passos executam o proxy no mesmo servidor que o Status200. Se o seu proxy roda em outra máquina, pule o primeiro passo, aponte o proxy para a porta 80 deste servidor e, com o firewall do seu provedor de nuvem, deixe só o proxy alcançar as portas 80 e 443: um visitante que alcança o Status200 sem passar pelo proxy pode escolher o endereço pelo qual o Status200 o conta.
Tire o ingress das portas 80 e 443
O proxy precisa das portas 80 e 443, então mova o ingress para outras portas, publicadas apenas no endereço de loopback
127.0.0.1deste servidor, para que os visitantes alcancem o Status200 somente pelo seu proxy. A sonda e o Runner usam a rede do host e alcançam o Status200 porhttp://localhost, então mudam junto:ONEUPTIME_HTTP_PORT=127.0.0.1:8080 STATUS_PAGE_HTTPS_PORT=127.0.0.1:8443 GLOBAL_PROBE_1_STATUS200_URL=http://localhost:8080 ONEUPTIME_RUNNER_STATUS200_URL=http://localhost:8080Informe ao Status200 que ele está atrás de um proxy
HOST=status200.example.com HTTP_PROTOCOL=https PROVISION_SSL=false TRUSTED_PROXY_HOPS=2HTTP_PROTOCOL=httpsfaz os links que o Status200 monta usarem HTTPS.TRUSTED_PROXY_HOPS=2conta o seu proxy e o ingress do Status200, para que o Status200 leia o endereço real do visitante nas allowlists de IP e nos limites de taxa. Some um para cada proxy adicional que acrescente dados aoX-Forwarded-For, como uma CDN ou um balanceador de carga.Reinicie o Status200 nas novas portas
(export $(grep -v '^#' config.env | xargs) && docker compose up --remove-orphans -d) bash Tests/Scripts/status-check.sh localhost:8080O
npm startverificahttp://localhostna porta 80, onde ficará o seu proxy, então verifique você mesmo a nova porta. O script termina com Status200 is up!Configure o proxy
Caddy
status200.example.com { reverse_proxy localhost:8080 }O Caddy obtém e renova o certificado sozinho, redireciona HTTP para HTTPS e repassa conexões WebSocket. Recarregue o Caddy depois de alterar o arquivo, por exemplo com
sudo systemctl reload caddy.Nginx
map $http_upgrade $status200_connection_upgrade { default upgrade; "" close; } server { listen 80; server_name status200.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name status200.example.com; ssl_certificate /etc/letsencrypt/live/status200.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/status200.example.com/privkey.pem; # The limits Status200's own ingress uses. client_max_body_size 50M; proxy_read_timeout 300s; proxy_send_timeout 300s; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $status200_connection_upgrade; location / { proxy_pass http://127.0.0.1:8080; } # MCP clients keep a stream open. location /mcp { proxy_pass http://127.0.0.1:8080; proxy_buffering off; proxy_read_timeout 86400s; proxy_send_timeout 86400s; } }Os caminhos dos certificados são onde o Certbot coloca um certificado do Let's Encrypt; use os caminhos do seu próprio certificado se ele vier de outro lugar. Verifique o arquivo e recarregue o Nginx com
sudo nginx -t && sudo systemctl reload nginx.Os dois enviam
X-Forwarded-Proto, que avisa o Status200 de que um visitante veio por HTTPS. Qualquer outro proxy também precisa enviá-lo, senão os cookies de login das páginas de status e dos painéis nos seus domínios personalizados não ficam no HTTPS.Abra sua instância pelo proxy
Abra
https://status200.example.com. Você deve ver a página de login do Status200, servida com o certificado do seu proxy.
Atrás do seu próprio proxy, envie telemetria por OTLP/HTTP (/otlp). OTLP por gRPC só alcança o Status200 quando o próprio ingress dele termina o TLS (PROVISION_SSL=true).
Endereços dos visitantes
O Status200 conta cada visitante pelo endereço de onde ele se conecta: os limites de login, os outros limites por endereço e as allowlists de IP das páginas de status e dos dashboards leem esse endereço. Duas configurações precisam de um ajuste para que esse endereço seja o do próprio visitante:
| Configuração | Ajuste |
|---|---|
As pessoas alcançam o Status200 por IPv6, por exemplo por um registro AAAA | IPv6 na rede do Status200, no docker-compose.override.yml |
| Seu próprio proxy reverso fica na frente do Status200 | TRUSTED_PROXY_HOPS=2, com o ingress publicado em 127.0.0.1 (veja Usar seu próprio proxy reverso) |
Sem IPv6 na rede do Status200, o Docker repassa ao Status200 cada visitante que chega por IPv6 a partir de um endereço próprio, e o Status200 conta todos eles como um único visitante: as tentativas de login malsucedidas de uma pessoa podem bloquear as outras. Ativar o IPv6 exige o Docker Engine 27 ou mais recente (o docker version mostra a sua).
Ative o IPv6
Crie o
docker-compose.override.ymlao lado dodocker-compose.yml, ou acrescente isto ao que você já tem; onpm starte onpm run updateo leem:networks: oneuptime: enable_ipv6: trueReinicie o Status200
npm stop npm startO Status200 para e inicia de novo com IPv6 na rede dele. Seus dados são mantidos. O Docker não consegue remover uma rede à qual um contêiner seu ainda está conectado, como um proxy reverso: desconecte-o antes da rede do Status200 e conecte-o de novo depois. Se o
npm startparar comhas active endpoints, desconecte-o e execute de novo onpm stope onpm start.Verifique a rede
docker network ls --quiet --filter name=_oneuptime | xargs docker network inspect | grep EnableIPv6O comando mostra
"EnableIPv6": true,.
Quando várias pessoas entram a partir de um mesmo endereço de rede privada, a página Integridade do Status200 do Admin Dashboard avisa, com o ajuste que muda isso.
Checklist de produção
O Docker Compose executa uma única cópia de cada serviço em um único servidor, o que serve para equipes pequenas e homelabs. Antes de depender dele, passe por esta lista.
| Área | O que fazer |
|---|---|
| Segredos | Nenhum valor no config.env ainda é um please-change-this-to-random-value. Veja Gere segredos aleatórios, e Troque a senha do banco de dados para uma instalação que começou com o segredo de exemplo no DATABASE_PASSWORD. |
| HTTPS | As pessoas acessam o Status200 por HTTPS e HTTP_PROTOCOL=https está definido. Veja Configurar HTTPS. |
| Cadastros | Assim que sua equipe tiver contas, desative Permitir cadastro em Configurações > Autenticação no Admin Dashboard. |
| Firewall | Só as portas 80 e 443 (e SSH) estão abertas para a internet. O Status200 publica a porta 5400 do PostgreSQL só em 127.0.0.1. Feche qualquer outra porta que você publicar com o firewall do seu provedor de nuvem: as regras do ufw não se aplicam às portas que o Docker publica. |
| Endereços dos visitantes | A página Integridade do Status200 do Admin Dashboard não avisa que várias pessoas entram a partir de um mesmo endereço. Veja Endereços dos visitantes. |
| Backups | O PostgreSQL tem backup todos os dias e as cópias saem do servidor. Veja Backup e restauração. |
| Há um servidor de e-mail configurado em Configurações > Notificações > E-mails no Admin Dashboard, para que o Status200 possa enviar convites e notificações. Veja SMTP. | |
| Disco | O espaço livre é acompanhado. O ClickHouse cresce com a telemetria que você guarda (veja Dimensionamento e planejamento de capacidade); o log de cada contêiner é limitado a 1000 MB. |
| Atualizações | O Status200 é atualizado pelo menos uma vez por semana. As versões saem com frequência. Veja Atualizar o Status200. |
| Alta disponibilidade | Se precisar, passe para o chart do Helm no Kubernetes. |
Troque a senha do banco de dados
O PostgreSQL mantém a senha com que foi criado, então mudar só o DATABASE_PASSWORD no config.env deixa o Status200 sem acesso ao banco de dados. Para dar uma senha própria a uma instalação que começou com o segredo de exemplo, troque-a no PostgreSQL e no config.env ao mesmo tempo e depois inicie o Status200 de novo:
NEW_PASSWORD=$(openssl rand -hex 32) &&
(export $(grep -v '^#' config.env | xargs) && docker compose exec -T postgres psql -U "$DATABASE_USERNAME" -d "$DATABASE_NAME" -c "ALTER USER \"$DATABASE_USERNAME\" PASSWORD '$NEW_PASSWORD'") &&
sed -i "s/^DATABASE_PASSWORD=.*/DATABASE_PASSWORD=$NEW_PASSWORD/" config.env
npm startSe você definiu DATABASE_BACKUP_PASSWORD e DATABASE_RESTORE_PASSWORD, dê a eles também o novo valor.
Backup e restauração
O PostgreSQL guarda tudo o que você configura: monitores, incidentes, páginas de status, usuários. O npm run backup gera um dump dele em um arquivo na pasta Backups.
Dê ao script de backup a senha do banco de dados
No
config.env, definaDATABASE_BACKUP_PASSWORDcom o valor deDATABASE_PASSWORD. O script lê oconfig.envcomo texto simples, então o${DATABASE_PASSWORD}que vem com ele nunca é preenchido.Execute o backup
npm run backupEle pede sua senha de sudo e grava
Backups/db-<day of the month>.backup, de modo que os backups diários substituem os de um mês antes. Execute-o pelo menos uma vez por dia.Copie os backups para fora do servidor
Um backup no mesmo disco que o banco de dados não sobrevive à perda desse disco.
Só o próprio servidor alcança o PostgreSQL: ele responde na porta 5400 de 127.0.0.1. Para fazer o backup a partir de outra máquina, abra um túnel SSH nessa máquina e depois conecte-se à porta 5400 dela mesma:
ssh -N -L 5400:127.0.0.1:5400 you@status200.example.comPublique o PostgreSQL em um endereço de uma rede privada
Se uma ferramenta da sua rede privada precisa alcançar o PostgreSQL sem túnel, publique-o também no endereço do servidor nessa rede, em uma porta própria. Crie o docker-compose.override.yml ao lado do docker-compose.yml; o npm start e o npm run update o leem:
services:
postgres:
ports:
- "10.0.0.5:5401:5432"Coloque o endereço privado do próprio servidor no lugar de 10.0.0.5, nunca um público, e antes dê ao PostgreSQL uma senha própria (veja Troque a senha do banco de dados). Depois execute npm start, e o PostgreSQL passa a responder também na porta 5401 desse endereço.
O ClickHouse guarda sua telemetria no volume do Docker status200_clickhouse, e nenhum script faz backup dele. Se você precisa manter essa telemetria, faça backup do volume com uma ferramenta do ClickHouse como o clickhouse-backup, ou copie-o com o Status200 parado.
Para restaurar o PostgreSQL, defina os valores DATABASE_RESTORE_* no config.env: DATABASE_RESTORE_PASSWORD com o valor de DATABASE_PASSWORD, como nos backups, e DATABASE_RESTORE_FILENAME com o backup a restaurar, por exemplo db-31.backup. Depois execute bash restore.sh. O banco de dados em que ele restaura já precisa existir; em uma instalação em funcionamento, ele existe.
O restore.sh remove do banco de dados de destino cada objeto do backup antes de recriá-lo. Ele pergunta antes de começar; confira o nome do banco de dados que ele mostra.
Atualizar o Status200
Faça backup primeiro e depois execute:
git checkout release
git pull
npm run updateO npm run update pede sua senha de sudo, adiciona ao seu config.env as configurações novas do config.example.env (seus próprios valores ficam), baixa as imagens novas e reinicia o Status200. Como o npm start, ele termina com Status200 is up!
Passar para uma nova versão principal (da 13 para a 14, por exemplo) pode exigir mais: leia Atualizar o Status200 para uma nova versão antes de começar.
APP_TAG=release no config.env sempre baixa a versão mais recente da Community Edition. Para ficar em uma versão, defina APP_TAG com o número dela, por exemplo 14.0.22. Para a Enterprise Edition, as tags são enterprise-release e enterprise-14.0.22.
Desinstalar o Status200
Pare o Status200 e remova os contêineres e a rede dele:
npm run downSeus dados ficam nos volumes status200_postgres e status200_clickhouse, e a pasta oneuptime mantém o config.env e seus backups. Para apagar também os dados:
(export $(grep -v '^#' config.env | xargs) && docker compose down --volumes --remove-orphans)Depois apague a pasta oneuptime.
--volumes apaga para sempre cada monitor, incidente, usuário e toda a telemetria. Faça backup primeiro se você puder precisar de algo disso.Solução de problemas
O Docker diz "permission denied" quando você executa npm start
Seu usuário não consegue acessar o daemon do Docker. Adicione-o ao grupo docker e depois saia e entre de novo:
sudo usermod -aG docker $USERO ingress não inicia porque a porta 80 ou 443 está em uso
Outro programa no servidor, muitas vezes um servidor web, ocupa a porta. Pare-o, ou mova o ingress para outras portas e coloque esse programa na frente do Status200, como descrito em Usar seu próprio proxy reverso.
O npm start termina com "Maximum retries reached"
A verificação que encerra o npm start desistiu antes de o Status200 responder. A primeira inicialização pode demorar mais do que a verificação espera, enquanto as imagens são baixadas e os bancos de dados são criados. Veja o que está em execução e leia os logs:
npm run ps
npm run logsQuando todos os contêineres estiverem em execução, rode a verificação de novo com npm run status-check. Se você tirou o ingress da porta 80, verifique a nova porta dele: bash Tests/Scripts/status-check.sh localhost:8080.
Algumas páginas carregam, mas as atualizações ao vivo ou os uploads falham
Abra o Status200 no endereço que está em HOST. O ingress encaminha as requisições pelo nome de host: só HOST e localhost alcançam o aplicativo inteiro, e qualquer outro nome, como o endereço IP do servidor, é tratado como domínio de página de status. Defina HOST com o nome que as pessoas usam e depois execute npm start.
O cadastro ou o login falha com "Page not found"
A página de cadastro carrega, mas o cadastro falha com Page not found - /identity/signup e o login com Page not found - /identity/login. A requisição chegou ao Status200 com um nome de host diferente de HOST, então o ingress a encaminhou como o domínio próprio de uma página de status, onde o cadastro e o login do próprio Status200 não são servidos. Verifique as duas coisas:
HOSTé o endereço que as pessoas abrem, com a porta, se usarem uma, comostatus200.example.com:8080. Executenpm startdepois de alterá-lo.- Um proxy na frente do Status200 repassa o nome de host que o navegador pediu. O Caddy faz isso por padrão, o Nginx com
proxy_set_header Host $host;como em Usar seu próprio proxy reverso, e o Apache comProxyPreserveHost On.
O navegador avisa sobre o certificado depois que você define PROVISION_SSL
Até o Let's Encrypt emitir o certificado, o ingress serve um certificado autoassinado temporário. Se o aviso continuar por mais de alguns minutos, verifique se:
HOSTé um nome de domínio, e não um endereço IP nemlocalhost.- O registro DNS do domínio aponta para este servidor.
- A porta 80 é acessível pela internet, para que o Let's Encrypt possa validar o domínio.
Quando um pedido falha, o app registra um erro que começa com CoreSSL:EnsurePrimaryHostCertificate, seguido do motivo:
(export $(grep -v '^#' config.env | xargs) && docker compose logs app) | grep -A 5 CoreSSLA sonda incluída aparece como Desconectado depois que você mudou a porta do ingress
O Admin Dashboard lista a sonda em Configurações > Monitoramento > Sondas globais. Ela alcança o Status200 em GLOBAL_PROBE_1_STATUS200_URL, que por padrão é http://localhost (porta 80). Defina-a com a nova porta do ingress, por exemplo http://localhost:8080, defina ONEUPTIME_RUNNER_STATUS200_URL da mesma forma e reinicie o Status200.