Files
docker-nest-js/README.md

3.1 KiB

NestJS Multi-Projeto Stack — Portainer

Estrutura no Host (VPS)

/home/deploy/
├── nest-stack/              ← este repositório
│   ├── Dockerfile
│   ├── docker-compose.yml
│   ├── nginx/nginx.conf
│   ├── scripts/
│   │   ├── start.sh         ← entrypoint do container
│   │   └── deploy.sh        ← deploy dentro do container
│   └── host-deploy.sh       ← atalho para rodar do host
│
└── projects/                ← SEUS PROJETOS (volume montado)
    ├── projeto1/            ← git clone aqui
    └── projeto2/

Setup inicial

1. No servidor (VPS), clone este repo

git clone <este-repo> /home/deploy/nest-stack
mkdir -p /home/deploy/projects
chmod +x /home/deploy/nest-stack/host-deploy.sh

2. No Portainer → Stacks → Add Stack

  • Name: nestjs-stack
  • Build method: Repository (aponta para este repo)
    — OU —
  • Build method: Upload → sobe o docker-compose.yml

3. Clique em Deploy the stack

O container vai:

  • Buildar a imagem (Nginx + Node + PM2)
  • Montar /home/deploy/projects como volume
  • Subir projetos que já tiverem build em dist/

Adicionando um novo projeto

# No HOST (fora do container)
cd /home/deploy/projects
git clone https://github.com/seu-usuario/meu-projeto.git projeto1

# Roda o deploy
./home/deploy/nest-stack/host-deploy.sh projeto1

# Pronto! Acessível em:
# http://nest.juancjc.com.br/projeto1

Atualizando um projeto existente

# Atualiza o código
cd /home/deploy/projects/projeto1
git pull

# Redeploya
/home/deploy/nest-stack/host-deploy.sh projeto1

Reset do container (via Portainer)

  1. Portainer → Containers → nestjs-stackRestart ou Reset
  2. O container sobe e automaticamente relança todos os projetos que tiverem dist/main.js
  3. Os arquivos dos projetos continuam intactos (estão no volume do host)

Comandos úteis

# Ver logs do container
docker logs nestjs-stack -f

# Ver processos PM2 rodando
docker exec nestjs-stack pm2 list

# Ver logs de um projeto específico
docker exec nestjs-stack pm2 logs projeto1

# Entrar no container
docker exec -it nestjs-stack bash

# Ver status do nginx
docker exec nestjs-stack nginx -t

Regras de porta

Projeto Porta interna
projeto1 3001
projeto2 3002
projeto3 3003
projetoN 300N

A porta é determinada pela ordem alfabética das pastas em /home/deploy/projects.


Seu projeto NestJS não precisa de nenhuma config especial

O Nginx remove o prefixo /projeto1 antes de repassar ao NestJS. Seu app recebe as rotas normalmente como /.

Único requisito: seu main.ts deve aceitar a porta via variável de ambiente ou argumento:

// main.ts
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  const port = process.argv.find((_, i, a) => a[i-1] === '--port') || process.env.PORT || 3000;
  await app.listen(port);
}
bootstrap();