O Que É uma Porta? Endpoints Numerados para Serviços de Rede
Uma porta é um identificador numérico que, junto com um endereço IP, aponta para um serviço específico em um host para que o sistema operacional possa rotear o tráfego ao processo certo.
Um servidor pode executar muitos serviços ao mesmo tempo, então precisa de uma forma de enviar cada conexão ao serviço certo. As portas fazem isso: um processo escuta em um número de porta, e os clientes se conectam a esse número. Service containers de CI, servidores de teste locais e destinos de deploy fazem bind em portas, e incompatibilidades de porta são uma causa comum de "connection refused" em pipelines.
Endereço mais porta
Um endereço IP encontra o host; a porta encontra o serviço nele. O par identifica totalmente uma extremidade de uma conexão, então dois serviços no mesmo host simplesmente usam portas diferentes.
Portas bem conhecidas
- 80 para HTTP e 443 para HTTPS.
- 22 para SSH.
- 5432 para PostgreSQL, 3306 para MySQL.
- 6379 para Redis.
Escutando e fazendo bind
Um serviço faz bind em uma porta para aceitar conexões. Se outro processo já detiver essa porta, o bind falha com "address already in use", um erro frequente quando um servidor de teste não foi encerrado corretamente.
Portas em service containers de CI
Quando o CI sobe um banco de dados ou cache como service container, o job se conecta a ele em uma porta conhecida. Configurar essa porta incorretamente, ou conectar antes de o serviço estar escutando, produz erros de connection refused.
Portas em deployments
Containers expõem portas que load balancers e proxies mapeiam para portas públicas. Um deploy que mapeia a porta de container errada envia o tráfego para lugar nenhum, aparecendo como health checks falhos ou 502s.
Timing versus configuração
Conectar antes de um serviço ter feito bind em sua porta é uma questão de timing que uma breve espera ou retry resolve; conectar na porta errada é um bug de configuração. Os runners da Latchkey fazem retry do caso transitório "ainda não está escutando" para serviços comuns, para que corridas de inicialização não façam um job falhar.
Principais conclusões
- Um número de porta mais um endereço IP identificam um serviço específico em um host.
- O bind falha se uma porta já estiver em uso, e os clientes falham se apontarem para a porta errada.
- Uma corrida de inicialização em uma porta é passível de retry; um número de porta errado é um bug de configuração.