diff --git a/DEPLOY-STATUS.md b/DEPLOY-STATUS.md new file mode 100644 index 0000000..96aac99 --- /dev/null +++ b/DEPLOY-STATUS.md @@ -0,0 +1,144 @@ +# Status Deploy: BI Dashboard Custom - 13/02/2026 19:11 + +## 🎯 Objetivo +Deploy dashboard Next.js custom para substituir Metabase, com PostgreSQL staging existente. + +## ✅ Estado Actual +- **Container:** Running (2 minutos) +- **Serviço Docker:** `descomplicar_bi-descomplicar` activo +- **Build:** Completou com sucesso +- **Logs:** "✓ Ready in 62ms" (Next.js iniciado) +- **Health Check:** ❌ HTTPS ainda não responde (erro SSL/domínio) + +## 🔧 Problemas Resolvidos (7 iterações) + +| # | Problema | Solução Aplicada | +|---|----------|------------------| +| 1 | Falta `class-variance-authority` | ✅ Adicionado ao package.json | +| 2 | `pnpm-lock.yaml` desatualizado | ✅ Regenerado lockfile | +| 3 | Prisma: `libssl.so.1.1` não encontrado (Alpine) | ✅ Instalado OpenSSL no builder | +| 4 | Runtime sem OpenSSL correcto | ✅ Tentado copiar Prisma client | +| 5 | Alpine OpenSSL 3.x incompatível com Prisma | ✅ Mudado para Debian slim | +| 6 | Prisma Alpine copiado para Debian | ✅ Copiar node_modules Prisma | +| 7 | `prisma` CLI não encontrado (devDependency) | ✅ **Fresh install no Debian** | + +## 📋 Dockerfile Final (v8 - Actual) + +```dockerfile +# Build: Alpine (rápido) +# Runtime: Debian slim (fresh install, Prisma nativo) +``` + +**Pontos-chave:** +- Builder: Alpine com build Next.js apenas +- Runner: Debian instala deps do zero + gera Prisma nativo +- **NÃO copia** node_modules do builder (evita conflito Alpine/Debian) + +## 🚨 Problema Pendente: Domínio/SSL + +**Sintoma:** Container running, Next.js "Ready", mas HTTPS não responde. + +**Possíveis causas:** +1. Domínio `bi-custom.descomplicar.pt` não criado no EasyPanel +2. Traefik routing não configurado +3. SSL certificate ainda não gerado +4. Port mapping incorreto (container:3000 <-> Traefik) + +## 🎯 Próximos Passos + +### 1. Verificar Domínio EasyPanel +```bash +TOKEN=$(cat /etc/easypanel/.api-token) +curl -s "http://localhost:3000/api/trpc/domains.listDomains" \ + -H "Authorization: Bearer $TOKEN" | jq '.result.data.json[] | select(.host | contains("bi-custom"))' +``` + +### 2. Criar Domínio (se não existir) +```bash +DOMAIN_ID="dom_$(date +%s)_bi-descomplicar" +curl -s -X POST "http://localhost:3000/api/trpc/domains.createDomain" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d '{ + "json": { + "id": "'$DOMAIN_ID'", + "projectName": "descomplicar", + "host": "bi-custom.descomplicar.pt", + "path": "/", + "https": true, + "certificateResolver": "letsencrypt", + "wildcard": false, + "middlewares": [], + "destinationType": "service", + "serviceDestination": { + "projectName": "descomplicar", + "serviceName": "bi-descomplicar", + "port": 3000, + "protocol": "http" + } + } + }' +``` + +### 3. Verificar Traefik +```bash +docker service logs descomplicar_traefik --tail 50 | grep bi-custom +``` + +### 4. Testar Direto (sem SSL) +```bash +# Via container IP interno +docker inspect $(docker ps -q --filter "name=bi-descomplicar") | jq '.[0].NetworkSettings.Networks' +curl http://:3000/ +``` + +### 5. Health Check Completo +Quando domínio funcionar: +- ✅ https://bi-custom.descomplicar.pt/ (200 OK) +- ✅ Dashboard carrega +- ✅ Conexão PostgreSQL funciona +- ✅ Métricas visíveis + +## 📊 Métricas Deploy + +- **Tentativas:** 8 deploys +- **Tempo total:** ~35 minutos +- **Commits:** 8 fixes +- **Build time:** ~4-5 minutos/deploy +- **Container:** Running estável + +## 🗂️ Ficheiros Críticos + +| Ficheiro | Estado | Notas | +|----------|--------|-------| +| `Dockerfile` | ✅ Funcional | v8: Fresh install Debian | +| `package.json` | ✅ Completo | class-variance-authority adicionado | +| `pnpm-lock.yaml` | ✅ Sync | Versão 10.29.3 | +| `prisma/schema.prisma` | ✅ OK | Multi-schema (staging) | +| `next.config.ts` | ✅ OK | output: standalone | + +## 📝 Lições Aprendidas + +1. **Alpine vs Debian:** Prisma precisa binary nativo. Alpine (musl) != Debian (glibc). +2. **Multi-stage builds:** NÃO copiar node_modules entre Alpine e Debian. +3. **pnpm build scripts:** Prisma CLI é devDependency, precisa de install completo. +4. **EasyPanel API:** `redeployService` não existe, usar `deployService`. +5. **Fresh install melhor:** Para Prisma, install do zero no target OS > copiar binaries. + +## 🔗 Repositório + +- **Gitea:** git.descomplicar.pt/ealmeida/bi-descomplicar +- **Branch:** main +- **Último commit:** 525e629 "Fix: Fresh install no Debian (não copiar Prisma Alpine)" + +## 👤 Sessão + +- **Data:** 13/02/2026 +- **Início:** ~18:20 +- **Fim:** 19:11 +- **Duração:** ~50 minutos +- **Status:** Container running, domínio pendente + +--- + +**Próxima sessão:** Configurar domínio/SSL e validar dashboard funcional.