82 lines
2.7 KiB
Markdown
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
|