Files
DashDescomplicar/okf/entidades/Docker-Deploy.md
T

82 lines
2.7 KiB
Markdown

---
type: Entity
layer: wiki
tags: [stack, dashdescomplicar, infra, docker, easypanel, deploy]
title: "Docker-Deploy"
---
# Docker-Deploy
Pipeline de containerização e deploy do DashDescomplicar via Docker + EasyPanel Swarm no servidor `easy` (VM 101, Proxmox).
## Responsabilidades
- **Build**: Imagem Docker multi-stage (`node:22-alpine`) com `npm ci` + build TypeScript
- **Deploy**: `docker service update --force` no EasyPanel Swarm
- **Runtime**: Node.js 22 Alpine, porta 3001, `NODE_ENV=production`
- **Static Serving**: Express serve o bundle Vite (`dist/`) em produção
- **Health**: `curl -sf https://dash.descomplicar.pt/api/health`
## Stack
- **Dockerfile**: 26 linhas, `node:22-alpine`
- **Build**: `tsc -b && vite build && tsc -p api/tsconfig.json`
- **Start**: `node api/dist/server.js` (compilado TS → JS)
- **Procfile**: `web: node api/dist/server.js` (EasyPanel)
- **Repo**: Gitea (`git.descomplicar.pt/ealmeida/DashDescomplicar`)
## Pipeline de Deploy
1. **Validar build local**: `npx tsc -b && npx vite build && npx tsc -p api/tsconfig.json`
2. **Push Gitea**: `git push origin main` (HTTPS, owner `ealmeida`)
3. **SSH easy**: `docker build -t easypanel/descomplicar/dashboard_descomplicar:latest .`
4. **Redeploy**: `docker service update --force descomplicar_dashboard_descomplicar`
5. **Verificar**: `curl -sf https://dash.descomplicar.pt/api/dashboard`
## Variáveis de Ambiente (Container)
```
DB_HOST=176.9.3.158
DB_USER=...
DB_PASS=...
DB_NAME=...
WP_MONITOR_API_KEY=...
HETZNER_TOKEN=...
N8N_API_KEY=...
BESZEL_URL=...
BESZEL_EMAIL=...
BESZEL_PASSWORD=...
EASY_HOST=5.9.90.70
EASY_USER=root
EASY_PASS=...
MCP_GATEWAY_URL=https://gateway.descomplicar.pt
OBSERVABILIDADE_DB=/data/sessions.db
NODE_ENV=production
API_PORT=3001
FRONTEND_URL=https://dash.descomplicar.pt
```
## Volumes
- `/root/data/dashboard-descomplicar/sessions.db:/data/sessions.db` (SQLite sessions)
## Localizações
- **Dockerfile**: `Dev/DashDescomplicar/Dockerfile`
- **Procfile**: `Dev/DashDescomplicar/Procfile`
- **Código no servidor**: `/etc/easypanel/projects/descomplicar/dashboard_descomplicar/code/`
- **Deploy**: `dash.descomplicar.pt` (EasyPanel Swarm, Traefik reverse proxy)
## Dependências
- **Gitea**: Push de código (`git.descomplicar.pt/ealmeida/DashDescomplicar`)
- **EasyPanel Server**: SSH (`5.9.90.70:22`, user `root`, password auth)
- **Express-API**: Servidor Node.js dentro do container
- **MySQL-Pool**: Conexão ao CWP (`176.9.3.158:3306`)
## Notas Operacionais
- EasyPanel MCP (`redeploy_service`) está quebrado — usar SEMPRE SSH directo
- Pre-commit hook (`Regra #47`): `npm audit --audit-level=moderate`
- `.env` no `.gitignore` — nunca commitar credenciais