- Castro/
- blog/
- Quatro aplicações no mesmo host usando portas distintas, Nginx local e Certbot: organização sem conflito/
Quatro aplicações no mesmo host usando portas distintas, Nginx local e Certbot: organização sem conflito
Como inventariar e organizar várias aplicações Docker no mesmo host com portas distintas, Nginx em 80/443 e certificado cobrindo múltiplos hostnames.
Um único host pode atender várias aplicações sem conflito, desde que exista uma separação clara entre porta interna/publicada, hostname e camada de entrada.
Em uma coleta real, quatro aplicações Docker estavam publicadas no host em portas diferentes:
| |
No mesmo servidor, Nginx escutava em 80 e 443, e o inventário do Certbot mostrava um certificado cobrindo múltiplos hostnames da aplicação.
O ponto interessante não é a numeração das portas. É a organização que permite descobrir rapidamente quem recebe a conexão e para onde ela precisa seguir.
Comece pelo estado real das portas #
Antes de abrir configuração de Nginx, eu verifico o que realmente está escutando:
| |
Na coleta, isso separava claramente:
| |
Esse mapa já responde metade do troubleshooting.
Se a aplicação funciona em 127.0.0.1:3000, mas o hostname falha em HTTPS, o problema provavelmente está depois da aplicação: Nginx, TLS, DNS ou rota externa.
Depois, confirme containers e portas #
| |
O objetivo é montar algo como:
| |
Esse relacionamento deveria ser documentado, não deduzido toda vez que ocorrer incidente.
Nginx precisa ser validado como uma unidade #
Antes de reload:
| |
Na coleta analisada, o teste de sintaxe estava OK.
Isso prova que a configuração carregada era sintaticamente válida; não prova que cada server_name ou proxy_pass estava correto.
Para isso, vale inspecionar a configuração efetiva:
| |
E procurar:
| |
Um hostname por responsabilidade ajuda muito #
Quando existem frontends, backend e landing page no mesmo host, uma organização comum é:
| |
O desenho exato depende do produto. O importante é evitar um único vhost cheio de condicionais por path sem necessidade.
Cada server_name pode encaminhar para uma porta local distinta.
Exemplo genérico:
| |
Certbot também precisa entrar no inventário #
| |
No ambiente recuperado, um certificado válido cobria vários identificadores/hostnames da mesma aplicação.
Isso ajuda a responder:
| |
Não basta o certificado existir no filesystem. O vhost precisa apontar para ele.
Testar cada camada separadamente #
Aplicação local #
| |
Nginx preservando hostname #
| |
DNS público #
| |
Certificado entregue #
| |
Esse método mostra em qual salto o comportamento diverge.
Portas publicadas não precisam ficar abertas para a internet #
A coleta mostrava portas de containers vinculadas em interfaces do host. Isso descreve o estado encontrado, não uma recomendação universal.
Quando somente Nginx precisa acessar a aplicação, é normalmente preferível restringir o bind:
| |
ou usar rede Docker interna quando o reverse proxy também está containerizado.
Assim a camada pública continua concentrada em 80/443.
O inventário que eu manteria #
| |
Com isso, adicionar uma quinta aplicação deixa de ser tentativa e erro.
O que a fonte prova #
A coleta real sustenta:
- quatro aplicações Docker distintas nas portas 3000, 3001, 4000 e 5000;
- Nginx escutando em 80 e 443;
nginx -tválido;- Certbot com certificado válido cobrindo múltiplos hostnames;
- Redis e MongoDB coexistindo no host como componentes adicionais.
O artigo anonimiza domínio, nomes internos, IPs e demais identificadores do ambiente.
Checklist #
| |
O principal aprendizado #
Várias aplicações no mesmo host não são problema por si só.
O problema começa quando ninguém consegue responder rapidamente:
qual hostname entra em qual vhost, que encaminha para qual porta, que pertence a qual container?
Se essa cadeia está explícita, Nginx, Docker e Certbot conseguem coexistir de forma previsível.
Me chama.
Manda o contexto, os sintomas e o que já foi testado. Bora organizar as evidências antes de sair mexendo.