Pular para conteúdo

VPS Dev — inventário técnico

Último snapshot: 2026-07-31 (pós-desligamento Luiz). Fonte: docker ps -a, docker inspect, crontab, systemctl, docker network inspect, logs ao vivo — TODOS coletados do sistema real, nada inferido. Snapshot bruto: /tmp/vps-dev-inventory.md na VPS + cópia local em C:/tmp/vps-dev-inventory.md.

O que é

VPS Hostinger em 2.24.117.172 (srv1692513, KVM2 Ubuntu 24.04.4, kernel 6.8, Docker + containerd + monarx-agent scanner de segurança da Hostinger). Chamada "Dev" por convenção histórica — na prática hospeda produção informal (fora do Coolify) de sistema herdado do cliente GCI-GO + POC de agenda Cadencia + Motor Autônomo do framework + laboratório pessoal do Felipe.

O snapshot antigo em docs/snapshots/vps-dev-2026-05-25.md afirmava "sem cron, sem systemd customizado, ambiente puro pra sessões SSH". Está desatualizado — desde jun/26 acumulou cron + systemd + 4 stacks Docker + cloudflared tunnel expondo endpoints públicos.

Contexto pós-desligamento Luiz (30/07/2026)

Duas coisas mudaram no dia D:

  1. User luiz inerte — sem chave SSH, sem senha, sem grupos privilegiados (removido de sudo e docker, sudoers NOPASSWD deletado). Home /home/luiz/ preservado (Felipe pediu "só corte o acesso"). Backup em /root/luiz-preserve/ (304KB — bash_history, .config, PROCESSO-PR-DEPLOY-VERCEL.md, 2 patches: DEV-1465 QR prep e DEV-1614 snapshot-completo).
  2. User renan deletado (userdel -r). Backup em /root/renan-preserve/ (104KB — bash_history, .config, patch cadencia-docs-cli.md).

Colaterais do desligamento: - pkill -9 -u luiz seguido de reboot manual causou downtime ~15min dos containers rodando na VPS Dev. Nada oficial da Cadencia caiu — Master intocada. Todos os containers com restart=unless-stopped subiram sozinhos. - Compose files físicos SUMIRAM com o userdel -r luiz: lara/docker-compose.yml (vivia em /home/luiz/projetos/gci-go/lara/) e agenda-spike/docker-compose.yml (vivia em /tmp/claude-*/scratchpad/). Containers rodam (Docker daemon guarda config em /var/lib/docker/), mas se cair não há como docker compose up — precisa reconstituir via docker inspect. Runbook em runbook-recuperar-compose.md. - Sudoers /etc/sudoers.d/luiz (NOPASSWD:ALL) foi criado quando Luiz recuperou acesso nos 18min entre kill e reboot (achando que era invasão) — removido. - Cron luiz-state (/opt/luiz-state/luiz_state_cron.sh, 21h40 dias úteis) ficou órfão — precisa desligar ou reescrever. - Systemd pd-syslog.service roda --users luiz — vai começar a errar em silêncio agora que Luiz é inerte.

4 stacks Docker ativas + 1 histórica

Stack Containers Status Responsável Doc
Lara GCI-GO lara-api, lara-worker, lara-postgres, lara-redis Up (modo degradado — sem ecuro-middleware nem confirmation-queue-api) Cliente PD encerrado; 3 tenants Sorria Goiás continuam processando reconcile stack-lara-gci-go.md
Cadencia Agenda spike cadencia-agenda-app (Easy!Appointments), cadencia-agenda-mysql Up (POC do Luiz virou de facto produção — DEV-1364 previa Easy!Appointments como provider agenda Lara) Felipe (herdado do Luiz) stack-cadencia-agenda.md
PD Motor Autônomo pd-motor Up (sobe OFF por default — kill switch soberano) Felipe (framework oficial) stack-pd-motor.md
Hermes Agent (rodaria hermes, network_mode: host) Compose existe, container não está rodando agora Third-party Nous Research (lab pessoal Felipe) stack-hermes-agent.md
~~Attemys/Nexo (Luiz)~~ 9 containers em 3 stacks (attemys-verify-f4c1/f4e0/f4e1-{nats,redis,postgres}) Exited (parados desde o pkill) Ex-projeto pessoal do Luiz (COM-98 Done) Safe deletar

Cloudflared Tunnel — porta única de entrada pública

cloudflared.service (systemd, active) expõe portas locais via Cloudflare sem abrir a VPS pra internet direta. Peça central da arquitetura da VPS Dev — sem ele nenhum endpoint funciona externamente.

5 hostnames configurados no tunnel: | Hostname | Local | Status container | Uso | |---|---|---|---| | lara.cadencia.ia.br | 127.0.0.1:8095 | ✅ lara-api UP | Webhook WhatsApp Sorria Goiás | | queue.cadencia.ia.br | 127.0.0.1:3000 | ❌ sem container | Era confirmation-queue-api — sumiu | | ecuro.cadencia.ia.br | 127.0.0.1:8099 | ❌ sem container | Era ecuro-middleware — sumiu | | ue.cadencia.ia.br | 127.0.0.1:5173 | ❌ sem container | Vite dev server — abandonado | | testes.cadencia.ia.br | localhost:3000 | ❌ sem container | Env de testes — abandonado |

Detalhe completo + token + como recuperar: cloudflared-tunnel.md.

Portas listening (host)

:22    sshd
:8085  docker-proxy → cadencia-agenda-app:80 (Easy!Appointments UI)
:8095  docker-proxy → lara-api:8090 (Lara FastAPI)

Nada em :3000, :5173, :8099 — endpoints do tunnel apontam pra portas sem serviço.

Cron + systemd — automação viva

Ver detalhe em crons-e-services.md. Resumo:

Cron root (2 entries): - daily-brief (/opt/daily-brief/brief.py, 11h00 e 21h30 dias úteis) — Stamper Gestão async fase 3a - luiz-state (/opt/luiz-state/luiz_state_cron.sh, 21h40 dias úteis) — órfão (DEV-866, snapshot dev do Luiz)

Cron felipe (7 entries): - sync-dev-docs (/opt/sync-dev-docs.py, 23h) - cadencia-autofix (/home/felipe/cadencia-autofix/run.sh, 15min, flock=1) — CAD-689 pega own:agente in-progress - health-dev (/home/felipe/health-dev/dev_selfreport.py, 10min) - pos-briefing (/home/felipe/pos-briefing-trigger.sh, 5min de cada hora 8h-22h) — CSE-97 dry-run transcrição Fireflies - motor-notify (_core/motor_notify_cron.sh, 10min) - stale-claim-reaper (_core/stale_claim_reaper_cron.sh, hourly) — DEV-1344 libera claims own:agente órfãos, 2 estágios cap 5/run

Systemd (2 customizados): - cloudflared.service — tunnel Cloudflare (crítico) - pd-syslog.servicepd-syslog --users luiz (vai errar agora que luiz é inerte)

Docker resources

/var/lib/docker/volumes    2.5G
/var/lib/docker/containers 65M
/var/lib/docker/image      128K

18 volumes locais (docker volume ls), sendo os persistentes conhecidos: cadencia-agenda-mysql-data, lara-redis-data, lara-postgres-data. Demais são anônimos (Attemys e outros).

16 networks (3 são attemys-verify-* da stack parada + cadencia-agenda-network, lara-internal, pd-motor_default, pd-shared).

Índice de docs

Doc Sobre
architecture.md Diagrama C4 mermaid — como as peças se ligam
cloudflared-tunnel.md Tunnel Cloudflare + 5 hostnames expostos
stack-lara-gci-go.md 4 containers Lara (cliente encerrado) + ENV vars mascarados
stack-cadencia-agenda.md Spike Easy!Appointments do Luiz (POC DEV-1364)
stack-pd-motor.md Motor Autônomo (link pra _core/deploy/motor/)
stack-hermes-agent.md Hermes Agent Nous Research (third-party, lab pessoal)
crons-e-services.md Cron root/felipe + systemd customizados
paths-e-storage.md /home/felipe/, /opt/, /root/*-preserve/, /var/lib/docker/
runbook-recuperar-compose.md Reconstituir compose files perdidos via docker inspect

Regras absolutas VPS Dev

  1. Nunca pkill -u <user> sem docker ps antes. Container rodando com --user <uid> no host morre com pkill do uid, mesmo com o Docker daemon como root. Aprendido em 30/07/2026.
  2. Compose files em /tmp/ são efêmeros — reboot apaga. /tmp/claude-*/scratchpad/*/docker-compose.yml é caminho de morte lenta. Se um compose for pra sobreviver, mover pra /home/felipe/compose/ ou /opt/compose/.
  3. Cloudflared tunnel é a única porta pública (fora do SSH). Firewall UFW default DENY incoming. Nunca abrir porta em 0.0.0.0 sem passar pelo tunnel — expõe direto na internet.
  4. monarx-agent (systemd) pode adicionar regras UFW automáticas bloqueando IPs suspeitos. Se SSH cair após várias tentativas do mesmo IP externo, checar sudo ufw status verbose — pode ter regra explícita DENY IN <ip>.

Refs

  • Snapshot anterior (desatualizado): docs/snapshots/vps-dev-2026-05-25.md
  • _core/VPS-ACCESS.md — como conectar (chaves SSH, sudo, troubleshoot)
  • _core/REPO-MAP.md — mapa completo de repos
  • _core/deploy/motor/compose.yml — compose oficial do Motor
  • times/produto/cadencia/docs/architecture/lara.md — arquitetura Lara Cadencia (a nova, na Master — não confundir com a GCI-GO daqui)
  • times/produto/cadencia/docs/features/lara/agendamento.md — spec agendamento Lara (contexto pra entender o spike Easy!Appointments)
  • times/produto/consultorias/encerrados/gci-go/ — STATE + PRD + EPICs do cliente encerrado
  • stamper/skills/{ligar,desligar,logar}-motor/ — skills operar Motor Autônomo
  • Sessão do desligamento (30/07): sessions-log/2026-07-30/comercial-desligamento-*.md