Sessoes/2026 09 29 Coolify E Chats

← início

Sessão 29/09/2026 — Chats, Coolify e correções

Objetivo: incorporar ao projeto as novas premissas do ecossistema

(histórico de chats + deploy no Coolify) e corrigir o uso da Joule.

---

✅ Entregas

#EntregaOnde
1Chats exportados (esta conversa, 555 mensagens)chats/2026-09-27_09-56_sap-dev-development-environment.md
2Script de exportação de chatsautomacao/exportar_chat.py
3Site de documentação publicadohttps://sap-lab.visionai.com.br
4Gerador do site (docs HTML + galeria)automacao/gerar_site.py → site/
5Projeto isolado no CoolifySAP BTP Joule Lab (71bn6ggpai5hcv67vta9nw2j)
6App do site no Coolifysap-joule-lab-docs (nginx:alpine + bind mount)
7Correção do uso da Jouledocs/joule_comandos.md
8Convenção atualizada (regras 4, 7 e novas seções)docs/organizacao.md
9Repositório GitHub publicado (privado, 340 arquivos)https://github.com/hugomarquesit/sap-btp-joule-lab
10gh CLI instalado + autenticado (repo, read:org, workflow)keyring da máquina

---

🐙 Publicação no GitHub (o que foi feito)

  1. 1. Tokens antigos do cofre (pasta 00) estavam expirados — testados os 3 (2× ghp_, 1× github_pat_).
  2. 2. Instalado o gh CLI (v2.101.0, user-space em ~/.local/bin).
  3. 3. Fluxo de dispositivo (device flow) para autenticar sem token manual:

- Código em github.com/login/device → autorizar o "GitHub CLI"

- Escopos: repo, read:org, workflow

- Automação: página aberta/preenchida via CDP no Chrome headless (cookies do usuário)

  1. 4. Repositório criado via API (POST /user/repos, privado) e push dos 340 arquivos.
  2. 5. gh auth setup-git → próximos git push são automáticos (keyring), sem token no projeto.
  3. 6. Tokens temporários apagados (/tmp/opencode/gh_token.txt).
⚠️ Aprendizado: o gh auth login --with-token exige os escopos repo e read:org;
tokens só com repo funcionam na API/git, mas o gh recusa.

---

🔧 Como foi feito (Coolify via API)

API=http://192.168.15.4:8000/api/v1          # token: config do MCP do Coolify

1) projeto isolado (premissa: 1 projeto dedicado por projeto)

POST /projects {name, description} -> 71bn6ggpai5hcv67vta9nw2j

2) aplicação a partir de imagem (nginx servindo ./site)

POST /applications/dockerimage {project_uuid, server_uuid, environment_name,

docker_registry_image_name:"nginx",

docker_registry_image_tag:"alpine",

name, ports_exposes:"80"} -> phav2cfa8drlzdfgdgge82ma

3) domínio + volume + deploy

PATCH /applications/{uuid} {domains:"https://sap-lab.visionai.com.br"}

POST /applications/{uuid}/storages {type:"file", is_directory:true,

fs_path:"/home/hugo/vizionai/.../site",

mount_path:"/usr/share/nginx/html"}

POST /deploy?uuid={uuid}

Descobertas da API (Coolify v4):

---

🧱 Bloqueios e soluções

BloqueioCausaSolução
Descrição do projeto rejeitadacaractere — (em dash) não permitidousar hífen - (já previsto no AGENTS.md)
fqdn recusadocampo errado na API v4usar domains no PATCH
Storage recusadotipos válidos são persistent/filebind de diretório via type:"file" + is_directory:true
Deploy preso em queuedprimeira tentativa não processoure-disparar via control start (MCP) → finished
SSH sem chave da máquina localchave não pareada neste notebookusar a API do Coolify (não precisa de SSH)

---

📚 Aprendizados

  1. 1. Premissas da pasta 00: Coolify é o ambiente oficial; nada de containers manuais;

projeto isolado por projeto; Traefik + labels (sem expor portas).

  1. 2. Os arquivos de ~/Rede/vizionai/... (SMB) são /home/hugo/vizionai/... no servidor

→ bind mounts funcionam direto.

  1. 3. DNS wildcard *.visionai.com.br já existe (Cloudflare) → qualquer subdomínio novo

funciona sem criar registro.

  1. 4. Joule neste trial só aceita comandos (/ui5-create-app, /fiori-gen-cap-ui, ...) —

o modelo de dados é criado pelo Storyboard, não por prompt.

---

⏭️ Próximos passos

  1. 1. No Storyboard: criar entidade + serviço; depois /fiori-gen-cap-ui na Joule.
  2. 2. Sempre que atualizar docs/ ou prints/: rodar gerar_site.py + redeploy no Coolify.
  3. 3. Exportar o chat ao final de cada sessão (exportar_chat.py) — nova regra.