feat(desktop-agent,admin/inventory): secure token storage via keyring; extended inventory collectors per OS; new /api/machines/inventory endpoint; posture rules + tickets; Admin UI inventory with filters, search and export; docs + CI desktop release
This commit is contained in:
parent
c2050f311a
commit
479c66d52c
18 changed files with 1205 additions and 38 deletions
|
|
@ -134,6 +134,20 @@ healthcheck:
|
|||
|
||||
Observação: o CI já força `docker service update --force` após `stack deploy` e passa `RELEASE_SHA` no ambiente para variar a spec em todo commit, assegurando rollout.
|
||||
|
||||
## App Desktop (Tauri)
|
||||
- Build local por SO:
|
||||
- Linux: `pnpm -C apps/desktop tauri build`
|
||||
- Windows/macOS: executar o mesmo comando no respectivo sistema (o Tauri gera .msi/.dmg/.app).
|
||||
- Por padrão, o executável em modo release usa `https://tickets.esdrasrenan.com.br` como `APP_URL` e `API_BASE_URL`.
|
||||
- Para customizar, crie `apps/desktop/.env` com `VITE_APP_URL` e `VITE_API_BASE_URL`.
|
||||
- Saída dos pacotes: `apps/desktop/src-tauri/target/release/bundle/`.
|
||||
|
||||
### Alertas de postura (opcional)
|
||||
- Variáveis de ambiente para geração automática de tickets em alertas de postura (CPU alta, serviço parado, SMART em falha):
|
||||
- `MACHINE_ALERTS_CREATE_TICKETS=true|false` (padrão: true)
|
||||
- `MACHINE_ALERTS_TICKET_REQUESTER_EMAIL=admin@sistema.dev` (usuário solicitante dos tickets automáticos)
|
||||
|
||||
|
||||
### Dashboard (opcional)
|
||||
Você pode expor o painel do Convex para inspeção em produção.
|
||||
|
||||
|
|
@ -263,7 +277,7 @@ Benefícios
|
|||
- `MAILER_SENDER_EMAIL` com erro de parsing:
|
||||
- Adicionar aspas no `.env`.
|
||||
- `pnpm` reclama de workspace:
|
||||
- `pnpm-workspace.yaml` já aponta só para `.` (evita apps/desktop no deploy).
|
||||
- O `pnpm-workspace.yaml` inclui `apps/desktop`. No deploy do web isso não impacta pois usamos filtros/paths do projeto. Se preferir isolar, ajuste para apenas `.`.
|
||||
- Portainer erro de bind relativo:
|
||||
- Usar caminho absoluto `/srv/apps/sistema:/app` no stack (feito).
|
||||
- Prisma CLI “not found”:
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
- `.github/workflows/ci-cd-web-desktop.yml` — pipeline de deploy web + desktop + deploy do Convex.
|
||||
- `docs/OPERACAO-PRODUCAO.md` — runbook de operação (deploy, seeds, CI/CD, troubleshooting).
|
||||
- `docs/SETUP-HISTORICO.md` — este histórico.
|
||||
- `pnpm-workspace.yaml` — restrito a `packages: ['.']` para evitar o apps/desktop no deploy (corrige lockfile/CI).
|
||||
- `pnpm-workspace.yaml` — inclui `packages: ['.', 'apps/desktop']` para permitir comandos e builds do desktop. No deploy do web usamos filtros/paths; se preferir isolar, volte para apenas `'.'`.
|
||||
- `scripts/deploy-from-git.sh` — fallback de deploy pull‑based na VPS (sem Actions).
|
||||
|
||||
## Gestão de .env
|
||||
|
|
@ -60,8 +60,8 @@
|
|||
- Solução: `NPM_CONFIG_PRODUCTION=false` e `pnpm install --prod=false` no container de build.
|
||||
|
||||
5) Lockfile/Workspace quebrando CI
|
||||
- Causa: incluir `apps/desktop` no workspace.
|
||||
- Solução: `pnpm-workspace.yaml` com `packages: ['.']`.
|
||||
- Causa: conflito de versões quando o desktop entrou no workspace.
|
||||
- Solução: hoje mantemos `['.', 'apps/desktop']` e usamos filtros no CI/deploy. Alternativa: isolar o desktop fora do workspace.
|
||||
|
||||
6) Bind relativo no Swarm/Portainer
|
||||
- Causa: `./:/app` vira path inválido.
|
||||
|
|
@ -86,4 +86,3 @@
|
|||
- Fixar versão do `convex-backend` (ao invés de `latest`) para releases mais controladas.
|
||||
- Substituir bind‑mount por imagens construídas no CI (tempo de deploy menor, reprodutibilidade).
|
||||
- Adicionar cache de dependências pnpm no container de build.
|
||||
|
||||
|
|
|
|||
31
docs/admin-inventory-ui.md
Normal file
31
docs/admin-inventory-ui.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# Admin UI — Inventário por máquina
|
||||
|
||||
A página Admin > Máquinas agora exibe um inventário detalhado e pesquisável do parque, com filtros e exportação.
|
||||
|
||||
## Filtros e busca
|
||||
- Busca livre por hostname, e-mail, MAC e número de série.
|
||||
- Filtro por status: Online, Offline, Desconhecido.
|
||||
- Filtro por sistema operacional (OS).
|
||||
- Filtro por empresa (slug).
|
||||
- Marcação “Somente com alertas” para investigar postura.
|
||||
|
||||
## Painel de detalhes
|
||||
- Resumo: hostname, status, e-mail vinculado, SO/arch, sincronização do token (expiração/uso).
|
||||
- Métricas recentes: CPU/Memory/Disco.
|
||||
- Inventário básico: hardware (CPU/mem/serial), rede (IP/MAC), labels.
|
||||
- Discos e partições: nome, mount, FS, capacidade, livre.
|
||||
- Inventário estendido (varia por SO):
|
||||
- Linux: SMART (OK/ALERTA), `lspci`, `lsusb` (texto), `lsblk` (interno para discos).
|
||||
- Windows: serviços (amostra), softwares instalados (amostra), Defender.
|
||||
- macOS: pacotes (`pkgutil`), serviços (`launchctl`).
|
||||
- Postura/Alertas: CPU alta, serviço parado, SMART em falha com severidade e última avaliação.
|
||||
|
||||
## Exportação
|
||||
- Copiar JSON: copia para a área de transferência todo o inventário exibido (métricas + inventário + alertas).
|
||||
- Exportar JSON: baixa um arquivo `inventario-<hostname>.json` com os dados atuais.
|
||||
|
||||
## Notas
|
||||
- Os dados vêm de duas fontes:
|
||||
- Agente desktop (Tauri): envia inventário básico + estendido por SO via `POST /api/machines/heartbeat`.
|
||||
- FleetDM (osquery): opcionalmente, via webhook `POST /api/integrations/fleet/hosts`.
|
||||
- Postura é avaliada no servidor (Convex) a cada heartbeat/upsert. Tickets automáticos podem ser gerados se habilitado.
|
||||
46
docs/desktop-build.md
Normal file
46
docs/desktop-build.md
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
# Build do App Desktop (Tauri)
|
||||
|
||||
Guia rápido para gerar instaladores do app desktop em cada sistema operacional.
|
||||
|
||||
## Pré‑requisitos
|
||||
- Node.js 20+ e pnpm (Corepack habilitado):
|
||||
- `corepack enable && corepack prepare pnpm@9 --activate`
|
||||
- Rust toolchain (stable) instalado.
|
||||
- Dependências nativas por SO:
|
||||
- Linux (Debian/Ubuntu):
|
||||
```bash
|
||||
sudo apt update && sudo apt install -y \
|
||||
libwebkit2gtk-4.1-dev build-essential curl wget file \
|
||||
libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev
|
||||
```
|
||||
- Windows: Visual Studio Build Tools + WebView2 Runtime.
|
||||
- macOS: Xcode Command Line Tools.
|
||||
|
||||
## Configuração de URLs
|
||||
- Produção: por padrão o app usa `https://tickets.esdrasrenan.com.br`.
|
||||
- Desenvolvimento: crie `apps/desktop/.env` a partir de `apps/desktop/.env.example` e ajuste:
|
||||
```
|
||||
VITE_APP_URL=http://localhost:3000
|
||||
VITE_API_BASE_URL=
|
||||
```
|
||||
|
||||
## Comandos de build
|
||||
- Linux/macOS/Windows (rodar no próprio sistema):
|
||||
```bash
|
||||
pnpm -C apps/desktop tauri build
|
||||
```
|
||||
- Apenas frontend (Vite):
|
||||
```bash
|
||||
pnpm -C apps/desktop build
|
||||
```
|
||||
|
||||
Saída de artefatos: `apps/desktop/src-tauri/target/release/bundle/`.
|
||||
|
||||
## Dicas
|
||||
- Primeira compilação do Rust pode demorar (download de crates e linkedição).
|
||||
- Se o link‑editor for lento no Linux, considere instalar `lld` e usar:
|
||||
```bash
|
||||
RUSTFLAGS="-Clink-arg=-fuse-ld=lld" pnpm -C apps/desktop tauri build
|
||||
```
|
||||
- Para logs detalhados em dev, rode `pnpm -C apps/desktop tauri dev`.
|
||||
|
||||
|
|
@ -14,6 +14,7 @@
|
|||
- Web atual permanece operacional com login por usuário/senha.
|
||||
- Novas features serão adições compatíveis (machine login opcional).
|
||||
- Melhor abordagem para inventário: usar **osquery + FleetDM** (stack pronta) integrando registros no Convex.
|
||||
- Agente desktop coleta inventário básico + estendido por SO (Linux: dpkg/rpm + systemd + lsblk/lspci/lsusb/smartctl; Windows: WMI/registry via PowerShell; macOS: system_profiler/pkgutil/launchctl) e envia via heartbeat e/ou `/api/machines/inventory`.
|
||||
|
||||
## Marcos & Progresso
|
||||
| Macro-entrega | Status | Observações |
|
||||
|
|
@ -22,6 +23,7 @@
|
|||
| Projeto Tauri inicial apontando para UI Next | 🔄 Em andamento | Estrutura `apps/desktop` criada; pendente testar build após instalar toolchain Rust. |
|
||||
| Schema Convex + tokens de máquina | ✅ Concluído | Tabelas `machines` / `machineTokens` criadas com TTL e fingerprint. |
|
||||
| API de registro/heartbeat e exchange Better Auth | 🔄 Em andamento | Endpoints `/api/machines/*` disponíveis; falta testar fluxo end-to-end com app desktop. |
|
||||
| Endpoint upsert de inventário dedicado | ✅ Concluído | `POST /api/machines/inventory` (modo por token ou provisioningSecret). |
|
||||
| Integração FleetDM → Convex (inventário básico) | 🔄 Em andamento | Endpoint `/api/integrations/fleet/hosts` criado; falta validar payload real e ajustes de métricas/empresa. |
|
||||
| Admin > Máquinas (listagem, detalhes, métricas) | ✅ Concluído | Página `/admin/machines` exibe parque completo com status ao vivo, inventário e métricas. |
|
||||
| Ajustes na UI/Next para sessão por máquina | ⏳ A fazer | Detectar token e exibir info da máquina em tickets. |
|
||||
|
|
@ -38,8 +40,9 @@ Legenda: ✅ concluído · 🔄 em andamento · ⏳ a fazer.
|
|||
- **Infra extra:** Endpoints públicos para updater do Tauri, armazenamento de inventário seguro, certificados para assinatura de builds.
|
||||
|
||||
## Próximos Passos Imediatos
|
||||
1. Instalar toolchain Tauri local (Rust + dependências nativas) e testar `pnpm --filter appsdesktop tauri dev` apontando para o Next (`pnpm dev`).
|
||||
2. Detalhar fluxo de provisioning de máquina no Convex e atualizar este documento.
|
||||
1. Finalizar coletores específicos para Windows/macOS (ajustes finos e parse de dados).
|
||||
2. Adicionar UI administrativa para visualizar inventário estendido e alertas de postura por máquina.
|
||||
3. Refinar regras (janela temporal para CPU alta, whitelists de serviços, severidades por SMART).
|
||||
|
||||
## Notas de Implementação (Atual)
|
||||
- Criada pasta `apps/desktop` via `create-tauri-app` com template `vanilla-ts`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue