docs: add Portuguese docs and English CLAUDE.md

Add README.md, docs/ (fluxo, configuracao, arquitetura) in PT-BR and a
CLAUDE.md technical reference in English describing the installer flow,
generated files, containers and architecture.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
jb
2026-06-19 11:53:56 -03:00
co-authored by Claude Opus 4.8
parent 009c4bc8d1
commit 25137eb5da
5 changed files with 675 additions and 0 deletions
+113
View File
@@ -0,0 +1,113 @@
# Fluxo do Instalador
Este documento detalha cada etapa do assistente, a ordem em que ocorrem e as ações
executadas em segundo plano. As etapas são definidas em
[`internal/tui/steps.go`](../internal/tui/steps.go).
## Visão geral das etapas
| # | Etapa (`step`) | O que acontece |
| -- | ---------------------------- | ------------------------------------------------------------------- |
| 1 | `StepCheckDocker` | Verifica se o binário `docker` está no `PATH`. |
| 2 | `StepDockerInstall` | Tela final exibida quando o Docker não é encontrado. |
| 3 | `StepDockerLogin` | Formulário de login no registry privado. |
| 4 | `StepDownloadImage` | `docker login` + `docker pull` da imagem do app cliente. |
| 5 | `StepIPQuestion` | Pergunta se há IP público disponível. |
| 6 | `StepWireguardConfig` | Formulário de configuração do vproxy (apenas sem IP público). |
| 7 | `StepGenerateWireguardFile` | Gera o arquivo `envs`. |
| 8 | `StepDownloadWireguard` | `docker login` + `docker pull` da imagem do vproxy. |
| 9 | `StepRunWireguard` | Sobe o container `vproxy`. |
| 10 | `StepAppConfig` | Formulário da aplicação (URL central, token). |
| 11 | `StepServerConfig` | Formulário do servidor (porta, timeout, ambiente, compatibilidade). |
| 12 | `StepDatabaseConfig` | Formulário do banco de dados. |
| 13 | `StepCertConfig` | Formulário do diretório de certificados. |
| 14 | `StepGenerateFile` | Gera o `config.toml`. |
| 15 | `StepRunDocker` | Sobe o container `app-dono-cliente`. |
| 16 | `StepDone` | Mensagem de sucesso. |
## Detalhamento
### 1. Verificação do Docker (`StepCheckDocker`)
Ao iniciar, o `Init()` dispara três comandos em paralelo: `CheckDockerCmd`,
`TickCmd` (anima a barra de progresso) e o tick do spinner. O `CheckDockerCmd`
executa `exec.LookPath("docker")`.
- **Encontrado:** ao pressionar qualquer tecla, segue para o login.
- **Não encontrado:** vai para `StepDockerInstall`, que orienta a instalação manual
e encerra. O instalador **não** instala o Docker.
### 3–4. Login e download da imagem do app
O formulário coleta usuário e senha do registry. Em seguida, `DownloadImageCmd`
executa:
```
docker login hub.davinti.com.br:443/app-dono/app-cliente:latest -u <user> -p <senha>
docker pull hub.davinti.com.br:443/app-dono/app-cliente:latest
```
As **mesmas credenciais** são reaproveitadas mais adiante para baixar a imagem do
vproxy. Em caso de erro de login ou pull, a mensagem do Docker é exibida e o
instalador encerra ao pressionar qualquer tecla.
### 5. Pergunta de IP público (`StepIPQuestion`)
- **Sim** → pula o bloco do vproxy e vai direto para `StepAppConfig`.
- **Não** → vai para `StepWireguardConfig`.
### 6–9. Bloco vproxy (somente sem IP público)
1. **`StepWireguardConfig`** — coleta `PRIVKEY`, `VIP`, `PSK`, `PROXY_EDPS`, `MTU`
e `PROTO` (UDP/TCP).
2. **`StepGenerateWireguardFile`** — grava o arquivo `envs`
(ver [`config.go`](../internal/tui/config.go), `GenerateWireguardConfig`).
3. **`StepDownloadWireguard`** — faz login e pull da imagem `davinti-vproxy`.
4. **`StepRunWireguard`** — sobe o container `vproxy` com `--cap-add=NET_ADMIN`,
`--device /dev/net/tun`, `--env-file envs` e o conecta à rede `app-dono_app`.
Após subir, espera 2s e verifica se o status é `running`; se não, mostra os
últimos logs do container.
Ao final do bloco, segue para `StepAppConfig`.
### 10–13. Configuração da aplicação
Quatro formulários sequenciais preenchem o `ConfigValues`:
- **Aplicação:** URL do servidor central e token de inscrição.
- **Servidor:** porta, timeout, ambiente (`development`/`production`) e modo
compatibilidade (`seccomp=unconfined`).
- **Banco de dados:** tipo (`postgres`/`oracle`), URL de conexão, conexões máx./mín.
- **Certificado:** diretório local com os certificados mTLS.
### 14. Geração do `config.toml` (`StepGenerateFile`)
`WriteConfigFile` valida os campos numéricos (`port`, `timeout`, `max_conns`,
`min_conns`) e grava o `config.toml`. Em caso de valor inválido, exibe o erro e
permite tentar novamente.
### 15. Subida do container do app (`StepRunDocker`)
`RunAppClienteContainer` remove um container homônimo existente, garante a rede
`app-dono_app`, e executa `docker run` com:
- usuário/grupo do host (`-u uid:gid`);
- mapeamento de porta `<porta do host>:8080`;
- volume do `config.toml` em `/app/config.toml`;
- volume do diretório de certificados em `/app/certs`;
- `--restart unless-stopped`.
Verifica o status `running` da mesma forma que o vproxy.
### 16. Conclusão (`StepDone`)
Exibe "Instalação realizada com sucesso!". Qualquer tecla encerra.
## Tratamento de erros
Em etapas de download, geração de arquivo e subida de container, qualquer falha:
- interrompe o avanço automático;
- mostra a mensagem/erro do Docker (ou do sistema de arquivos) com estilo de erro;
- permite **sair** (em downloads) ou **tentar novamente** (em geração/run) conforme
a etapa.