Saltar para o conteúdo principal
Como o Replit executa seus projetos em um ambiente de nuvem, as portas funcionam de forma diferente no Replit do que no seu computador local. (Se você precisar de uma explicação mais básica sobre o que são portas TCP, comece por aqui.) Em um computador, você tem apenas uma camada de gerenciamento de portas: seus programas definem uma porta na qual escutam e, quando o tráfego chega a essa porta no seu computador vindo da internet, é roteado para o processo apropriado.
computador
A parte 0.0.0.0 é o endereço, ou host. Se um processo está escutando em 0.0.0.0, isso significa que ele deve escutar em todas as interfaces de rede — o que significa que, se outro computador (na internet) enviar uma requisição para o endereço IP do seu computador, ele a verá. Ou seja, escutar em 0.0.0.0 significa que esses processos são acessíveis pela internet pública (se seu computador estiver conectado). A maioria dos frameworks de programação não vai escutar em 0.0.0.0 enquanto você está desenvolvendo, porque você não necessariamente quer que seu trabalho fique exposto ao público enquanto você está trabalhando nele, por questões de privacidade e segurança. Em vez disso, eles escutam em um endereço diferente — 127.0.0.1, também conhecido como localhost. Isso significa que apenas aquele computador pode fazer requisições para essa porta.
Portas localhost só são visíveis no computador que as hospeda.
No Replit, para que um processo que você está executando seja acessível no webview ou através de uma requisição externa, ele precisa ter uma porta externa definida. Isso ocorre porque a “porta interna” que os processos normalmente usam só é visível de dentro do ambiente de nuvem isolado (sandboxed) que o Replit fornece. Essa porta interna precisa estar conectada a uma porta externamente acessível para enviar o tráfego correto para os seus programas. Mesmo que o seu processo escute em uma porta normalmente disponível ao público, como 0.0.0.0, ainda é necessário vinculá-lo a uma porta externa.
Portas externas encaminham o tráfego para portas internas, que os programas escutam.
O Replit faz isso vinculando portas externas a portas internas específicas — por exemplo, no diagrama acima, a porta externa :80 está vinculada à porta interna :3000. Isso significa que qualquer tráfego que o Replit App receber na porta 80 irá para a porta interna 3000. Essa configuração é registrada na seção [[ports]] do arquivo de configuração .replit. Por padrão, o Replit vincula a primeira porta que você abre à porta externa padrão 80, o que permite que esse processo fique disponível no domínio sem um endereço de porta (por exemplo, customdomain.com/ em vez de customdomain.com:3000/). Portas internas adicionais que forem abertas são vinculadas a outras portas externas disponíveis (veja a lista completa abaixo).

Preview

Na ferramenta Preview, você pode mudar qual porta externa o webview está renderizando clicando no domínio e selecionando uma porta diferente. Você também pode abrir a ferramenta de rede pelo ícone de “engrenagem” para mais detalhes.
Clicar no domínio no webview permite escolher qual porta visualizar.

Porta padrão

A porta :80 é a “porta padrão” para tráfego http, então o tráfego http enviado para o domínio raiz será automaticamente roteado para a porta 80. Por isso, o caminho da porta não é exibido na URL para a porta 80. Portas diferentes de :80 aparecerão no caminho do domínio (por exemplo, customdomain.com:4200/). (O Replit fornece TLS por padrão, então tecnicamente o tráfego passará pela porta 443, que é a porta padrão para https. Para todos os efeitos práticos, você pode tratá-las como intercambiáveis.)

Ferramenta de rede

Para mais detalhes sobre a configuração de portas e rede, você pode abrir a ferramenta de rede. Ela mostra o status das portas abertas no seu Replit App, a qual porta externa elas estão vinculadas e permite adicionar ou remover configurações.
A ferramenta de rede mostra sua configuração de portas.

Publicação

As publicações do tipo Autoscale e Reserved VM só suportam a exposição de uma única porta externa, e a porta interna correspondente não pode estar usando localhost. Se você expuser mais portas, ou expuser uma única porta em localhost, seu app publicado falhará. Uma forma fácil de garantir que suas publicações Autoscale funcionem como esperado é remover todas as entradas externalPort das portas na sua configuração, exceto a porta do serviço com o qual você quer interagir a partir da internet.

Depuração

Um motivo comum para algo não funcionar como você esperaria é que, embora sua configuração de portas pareça correta, seu programa está na verdade olhando para uma porta diferente. Por exemplo, se sua configuração for:
Então o tráfego da internet para a porta 80 irá para a porta interna 3000. No entanto, se o seu programa não estiver de fato escutando na porta 3000, mas sim em outra porta (como a 8080), vai parecer que nenhum tráfego está passando. Isso pode acontecer se você mudar a porta no seu código sem mudar a porta correspondente na sua configuração, ou copiar e colar a configuração de um projeto para outro.
Programas podem mudar as portas nas quais escutam.
Cada framework tem portas padrão diferentes nas quais escuta — por exemplo, o Flask usa a 5000, o react usa a 3000, e o laravel usa a 8000. Certifique-se de que a porta correta está configurada!

Preferências

O Replit vincula automaticamente as portas que são abertas no seu Replit App a portas externas disponíveis quando elas são abertas, e registra essa vinculação no arquivo de configuração .replit. No entanto, isso não acontece por padrão para portas internas que abrem em localhost, porque os serviços que costumam rodar em localhost geralmente assumem que só serão acessíveis pelo mesmo computador que está executando o processo (portas localhost só são visíveis para o mesmo computador que está executando o processo). Isso significa que esses serviços costumam ser menos seguros do que serviços construídos com a premissa de que estarão disponíveis para a internet pública. Você sempre pode sobrepor esse comportamento definindo a opção de configuração exposeLocalhost como true para a porta que você quer expor. Se você quiser sempre expor portas localhost por padrão, você pode definir sua configuração de “encaminhamento automático de portas” na ferramenta de Configurações do Usuário como “All ports”. Se você quiser nunca criar configuração para as portas que são abertas, e controlar manualmente a configuração de portas para todo o seu Replit App, você pode definir isso como “never”.

Portas suportadas

O Replit App definirá a porta 80 como a porta externa padrão quando a primeira porta for aberta. Um Replit App pode expor as portas 3000, 3001, 3002, 3003, 4200, 5000, 5173, 6000, 6800, 8000, 8008, 8080, 8081, como portas externas adicionais. As portas 22 e 8283 não são encaminháveis, pois são usadas internamente.

Configuração [[ports]] do .replit

Tipo: {localPort, externalPort, exposeLocalhost} A configuração [[ports]] permite configurar qual porta HTTP expor para a saída web do seu app. Por padrão, qualquer porta HTTP exposta com host 0.0.0.0 será exposta como a saída web do seu Replit App. Portas extras podem ser servidas sem sobrescrever a porta padrão adicionando uma nova entrada [[ports]] ao seu arquivo .replit. É necessário especificar tanto uma entrada localPort quanto externalPort. Você pode adicionar várias portas extras adicionando várias entradas [[ports]] ao seu arquivo .replit, conforme definido abaixo.

localPort

Determina a qual porta externa o Replit vai vincular essa porta.

externalPort

Determina qual porta deve ser exposta como a porta publicamente acessível dessa porta local.
Se você quiser nunca expor uma porta específica, você pode manter a configuração localPort mas simplesmente não adicionar um externalPort:

exposeLocalhost

Determina se uma porta interna usando localhost pode ser vinculada a uma porta externa. Pode ser true, false, ou nulo.