Implements three UX improvements (TODO #1–#3): - Back navigation: Esc returns to the previous input step. The Model keeps a history stack of input steps (advance/goBack helpers); action/wait steps are excluded via isInputStep so back never re-enters a side-effecting step. Form values are preserved. - Review step (StepReview): shows all collected config for confirmation before any file is written; Enter installs, Esc edits. - Retry vs. fix: transient failures (image pull, container run) offer "r: tentar novamente" instead of quitting; validation failures route back to the relevant form to correct the value. Adds nav_test.go for the history/navigation logic and updates README/CLAUDE/docs (incl. docs/TODO.md tracking the remaining ideas). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6.5 KiB
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.
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 | StepReview |
Revisão de todas as configurações antes de instalar. |
| 15 | StepGenerateFile |
Gera o config.toml. |
| 16 | StepRunDocker |
Sobe o container app-dono-cliente. |
| 17 | StepDone |
Mensagem de sucesso. |
Navegação e tratamento de erros
- Voltar (
Esc): retorna à etapa de entrada anterior (formulários, pergunta de IP e revisão). OModelmantém uma pilhahistoryde etapas; etapas de ação (downloads, geração de arquivo, subida de container) ficam de fora e não são reexecutadas ao voltar. Os valores já digitados nos formulários são preservados. - Revisão (
StepReview): antes de gravar qualquer arquivo, todas as configurações coletadas são exibidas para confirmação.Enterconfirma e gera oconfig.toml;Escvolta ao formulário anterior para editar. - Tentar novamente: falhas transitórias (download de imagem, subida de container)
oferecem
rpara reexecutar apenas aquele passo (qsai). Erros de validação (geração de arquivo) levam de volta ao formulário correspondente para correção.
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)
StepWireguardConfig— coletaPRIVKEY,VIP,PSK,PROXY_EDPS,MTUePROTO(UDP/TCP).StepGenerateWireguardFile— grava o arquivoenvs(verconfig.go,GenerateWireguardConfig).StepDownloadWireguard— faz login e pull da imagemdavinti-vproxy.StepRunWireguard— sobe o containervproxycom--cap-add=NET_ADMIN,--device /dev/net/tun,--env-file envse o conecta à redeapp-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.tomlem/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.