[DÚVIDAS] Deploy API + banco de dados + web

Há algum tempo venho desenvolvendo uma aplicação composta por: api em NestJS, banco de dados Postgres e Web em React. É uma aplicação pequena e com poucos usuários.

Cheguei num ponto em que preciso subir essa aplicação para produção e avaliando as opções o que mais me agradou foi o droplet da Digital Ocean.

Com base nas informações acima, surgiram algumas dúvidas:

  1. Somente um droplet é suficiente para os itens citados?
  2. Devo usar Docker?
  3. Faz sentido usar Github Actions neste momento para automatizar o CI/CD ou trará uma complexidade desnecessária neste momento?
  4. Caso a opção acima seja não, como fazer o deploy de maneira adequada e simples? Clone do repo?
  5. Preciso de um proxy reverso como NGINX para redirecionamento?
  6. No caso de uso do NGINX, também posso utilizá-lo para hospedagem da aplicação Web?

Espero ter feito perguntas que façam sentido. Agradeço de antemão qualquer ajuda.

Uma explicação inicial, sou 'apenas' um freelancer, nunca trabalhei num projeto 'grande', mas já fiz alguns deploys, então os pontos são esses:

  1. Apenas um droplet é suficiente, até porque você define o poder computacional da máquina, o que mais faz diferença é isso.
  2. Eu sempre opto por docker, mas no final é decisão sua, acredito que docker é meio 'padrão' hoje em dia, talvez a pergunta fosse devo usar Docker Swarm ou Kubernetes? Independente disso acredito que essa parte é opção, da pra fazer de qualquer jeito, o importante é funcionar.
  3. Qualquer CI/CD é ok, não tem como repsonder isso, você pretende manter isso? É um SaaS que vai ter atualização constante? Existe um time trabalhando? Etc. Como freelancer até hoje nunca fiz algo com CI/CD até porque eu entrego um projeto e 'acabou', tenho poucos clientes 'constantes'.
  4. Como fazer deploy? Se for docker monta a imagem faz o pull e cria um compose pra instalar tudo, a questão é que você pode tornar isso desde algo simples como clonar um repo e usar pm2 até usar kubernetes/terraform/CI/CD etc.
  5. Sobre Nginx, se você precisa? Qual sentido dessa pergunta? Deve precisar né, usar um dominio/dns ao inves de ip:porta, além de deixar apenas a porta 80/443 aberta da VPS.
  6. Usar Nginx como hospedagem? Você vai usar o Nginx pra redirecionar, a 'hospedagem' fica na VPS, se você ta usando React é só direcionar pro 'ip' do react.

Pra mim os pontos acima não responderam 'nada', porque no final quem tem que julgar é você, mas deixo um direcionamento meu, primeiro 'siga' o KISS (Keep It Simple Stupid), faz um deploy com git clone e pronto, coloca pra funcionar primeiro, colocar em docker, criar um CI/CD, etc, isso pode ser implementado depois, não é porque você usou git clone que automaticamente não da mais pra usar docker.

Eu sempre tento optar por usar provodores nacionais apesar de um pouco mais caro:

  • Suporte em português
  • Menor latência para usuários no Brasil
  • Serviços integrados adaptados ao mercado local - Pagamentos, Mensagens
  • Conhecimento do ecosistema local - Clientes e Competidores
  • Estímulo à economia nacional. BRASIL!!

Sobre o Deploy em si:

  1. Sim.
  2. A priori sim, a menos que tenha um bom motivo para não usar.
  3. Se você não está utilziando ferramentas de CI/CD durante o desenvolvimento - quando são realmente proveitosas - não é em produção que vai começar. Não faz sentido.
  4. Recomendaria apenas usar uma boa e velha checklist em papel ou txt mesmo - talvez um scipt em python. Neste caso o clone do repo, é apenas um dos passos. O importante é você elicitar com clareza todos passos necessarios e ter uma forma eficiente e efetitiva de exercita-los no momento do deploy.
  5. O nginx pode ser usado para servir tanta a api como o frontend no mesmo dominio.