Adiciona estrutura inicial do projeto NestJS com Docker, incluindo Dockerfile, docker-compose, scripts de deploy e configuração do Nginx.

This commit is contained in:
2026-04-17 23:19:27 -05:00
parent 2e76495db8
commit 80d25b2db7
8 changed files with 437 additions and 1 deletions

135
README.md
View File

@@ -1,2 +1,135 @@
# docker-nest-js
# 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
```bash
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
```bash
# 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
```bash
# 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-stack`**Restart** 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
```bash
# 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:
```typescript
// 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();
```