Hospedagem frontend e backend na mesma aplicação

Olá, tenho um repositório git com as pastas frontend e backend, o frontend feito com react e backend com express, não entendi muito bem como posso juntar os dois para fazer a hospedagem no mesmo site aqui na umbler, e gostaria de uma luz.

Olá, @Daniel_Gomes! Tudo bem?
Claro! Vou tentar explicar:

Acontece que um container NodeJS pode ter apenas 1 aplicação escutando na porta 3000. E essa porta é a única que é mapeada para fora do Container.

Tendo isso em vista, aplicações web que foram desenvolvidas em duas aplicações node diferentes tem as seguintes opções para poderem ser hospedadas com nós:

  1. Colocar a aplicação em duas hospedagens diferentes.
    Pode ser algo como o domínio principal hospedando o frontend, e um subdomínio api hospedando o backend. É uma solução bastante usada.

  2. Mas já que você não quer outra hospedagem, então é necessário fazer um “merge” das duas aplicações.
    Basicamente, é preciso criar uma aplicação só, que escute na 3000. Essa aplicação será capaz de de responder tanto para rotas do backend quanto as do frontend.
    Então se for acessado o /, essa aplicação responderia com o seu index.html, por exemplo.
    Já se for acessado o /api/v1/produtos, por exemplo, daí cai na rota do backend que responde com o dado desejado

Oi, Thiago, tudo e você? Obrigado por responder! Vou optar pela segunda opção e fazer o Merge da aplicação. Obrigado!

1 Curtida

Oi, Thiago, consegui fazer o merge da aplicação e aqui localmente funciona 100%, no entanto ao tentar dar deploy, no log aparece que não achou o módulo “knex”, ao verificar na pasta node_modules aqui na Umbler e comparando com a minha pasta local, não foi instalado todos os módulos, e não sei como posso resolver isso.

Seguindo o tutorial de configuração de uma aplicação react, modifiquei os scripts no package.json:

“start”: “node server”
“postinstall”: “npm run build”

Ah, certo!
O famoso módulo não encontrado :sweat_smile:

Isso normalmente acontece por o módulo não estar listado como dependência no package.json e/ou não foi executado o npm install depois de adicioná-lo.

No primeiro caso, bastaria dar um npm install no módulo pra instalá-lo e listá-lo como dependência e fazer um novo deploy

Já no segundo, normalmente significa que a aplicação não foi enviada para nós via Git Remote. Pois esse é o único método onde as dependências são instaladas automaticamente.
Para outros casos como deploy por sincronização com Github, FTP etc. é necessário instalar as dependências manualmente :sweat_smile:
Tenho um tutorial de alguns métodos que podem ser usados pra isso, se for o caso:

Daniel, tudo bem?

Cara, estou com o mesmo e não estou conseguindo fazer o ‘merge’, você poderia me explicar, se quiser me chamar no face, fico muito agradecido se puder brow.

EU nao recomendaria essa pratica, numero 2, FORTE acoplamento.

2 Curtidas