Roteiro do primeiro deploy¶
As seções 0 a 17 explicam cada parte e trazem os arquivos. Esta página só põe tudo na ordem da primeira subida, com o vault gerado pelo scripts/gerar_vault.py (seção 1): como os segredos aleatórios já estão nele, os passos "gere o segredo X" das seções viram só "rode o playbook". Siga as fases em ordem; dentro de cada uma, os detalhes estão no link.
Todos os comandos rodam na máquina de controle, a partir de server/ansible. Antes de cada playbook, rode-o com --check; depois, sem.
ansible-playbook -i inventories/home/hosts.ini playbooks/<playbook>.yml --ask-vault-pass --check
ansible-playbook -i inventories/home/hosts.ini playbooks/<playbook>.yml --ask-vault-pass
"Stack no Portainer" quer dizer: Stacks → Add stack (ou Update the stack, se ela já existe), no ambiente indicado, com o compose do repositório no Web editor e o /opt/portainer_stack_envs/<stack>.env colado em Environment variables → Advanced mode (seção 7).
Fase 0 — Fora do servidor¶
| Passo | Onde | Detalhe |
|---|---|---|
| Domínio na Cloudflare, token de API com edição de DNS e o túnel criado (token do conector) | Painel da Cloudflare | Seção 6 |
| Chaves dos provedores de LLM (Anthropic, OpenAI, Gemini, TypeSafe) | Console de cada um | Seção 8 |
| Bot de avisos no @BotFather e o id do seu chat; outro bot para o assistente | Telegram | Seção 9, seção 17 |
| Configuração WireGuard da ProtonVPN com NAT-PMP | account.protonvpn.com | Seção 10 |
| Conta Tailscale e auth key de uso único, pré-aprovada | login.tailscale.com | Seção 14 |
| Disco externo para o backup e bucket B2 com chave de aplicação | Host e Backblaze | Backup |
Proteção da main do wiki-home-server (PR obrigatório, sem force push) e, para os agentes, um token do GitHub sem escrita neste repositório |
GitHub → Settings → Rules | Seção 16 |
Fase 1 — Máquina de controle e vault¶
scripts/bootstrap.she a chave SSH da máquina de controle (seção 1).- Ajuste o
group_vars/all/main.ymlpela wiki (seção 1): IPs, gateway, CIDRs, discos. Onotes_nextcloud_usuariofica para a fase 8. python3 scripts/gerar_vault.py(na pastaserver/). Anote o que ele mostra no gerenciador de senhas, principalmente a senha do vault e a do restic.ansible-vault edit inventories/home/group_vars/all/vault.ymle preencha o que a fase 0 trouxe: Cloudflare,base_domain,letsencrypt_email, chaves de LLM,telegram_bot_token,telegram_chat_id,hermes_telegram_bot_token, ProtonVPN,tailscale_auth_key, B2 e a senha do root do Proxmox. Os tokens criados nas telas (Grafana, Portainer, Home Assistant, n8n, widgets) ficam para depois.- Commit do
vault.ymlcriptografado (opython tools/dev.py checkacusa se não estiver): o runner doopsclona o repositório e precisa dele.
Fase 2 — Host e VMs¶
- Instale o Proxmox VE e crie o pool ZFS e os datasets, incluindo o
data/notesda seção 12 (seção 2). - Usuário Ansible no host (ações manuais prévias) e
setup-proxmox-host.yml(NFS, Alloy, restic). - Template Cloud-Init (seção 3.1) e
vm-deploy.yml. setup-base-ubuntu.yml(Docker, UFW, firewall das portas do Docker, Alloy, Portainer na core e o agente na VM de IA) (seção 4).- A chave pública do runner que o
gerar_vault.pymostrou vai para o~/.ssh/authorized_keysdo usuário Ansible das duas VMs (não no host) (seção 13).
Fase 3 — Rede, VPN e Portainer¶
setup-core-networking.yml: sobe a stackcore(Traefik, Cloudflared, Authelia) (seção 6).- Public Hostnames do túnel (seção 5.5); abra
auth.e registre o 2FA. A senha do admin do Authelia é a que ogerar_vault.pymostrou. setup-vpn.ymle, no painel do Tailscale, rotas, expiração da chave, DNS e ACL (seção 14).- Portainer, nos primeiros 5 minutos: administrador, ambiente
locale o agenteai-desktop-vm; crie o token de API e grave emportainer_api_key(seção 7).
Fase 4 — Apps da core¶
setup-productivity-automation-volumes.yml,setup-n8n-volumes.ymlesetup-monitoring-stack-volumes.yml.- Stack
appsno ambientelocal(seção 7). - Importe e ative o workflow
notificardo n8n (seção 9) e configure o Home Assistant (seção 7).
Fase 5 — IA¶
setup-ai-volumes.yml(imagem do Ollama, LiteLLM,ai.env).- Stack
aino ambienteai-desktop-vm(seção 8). setup-ai-keys.yml: cria no LiteLLM todas as chaves do vault (Open WebUI, Claude Code, n8n, observador, agentes, assistente) com os orçamentos.docker exec -it ollama ollama pull llama3.2:3b.
Fase 6 — Mídia¶
setup-media-stack-volumes.ymle stackmediano ambientelocal(seção 10).- Logo em seguida, Jellyfin e Seerr (quem chegar primeiro vira administrador); depois o resto da primeira configuração.
sudo docker restart prometheus grafana, para carregar os alertas da mídia.
Fase 7 — Fotos e arquivos¶
setup-photos-stack-volumes.yml,setup-cloud-stack-volumes.ymle as stacksphotosecloudno ambientelocal(seção 11).- Logo em seguida, o administrador do Immich com o e-mail do Authelia; depois o Nextcloud (primeiro acesso).
Fase 8 — Segundo cérebro¶
notes_nextcloud_usuarionogroup_vars(pela wiki) com o seu id no Nextcloud.setup-notes-volumes.yml, stacknotesno ambienteai-desktop-vme Update the stack daai(seção 12).- Timers
notes-documentosenotes-indice, pareamento do Syncthing e os conectores do Claude.
Fase 9 — Base dos agentes¶
- Tokens nas telas: as duas service accounts do Grafana, o MCP do Home Assistant e o do n8n (seção 13); grave no vault.
setup-agents-volumes.yml,setup-langfuse-volumes.yml,setup-ai-volumes.ymlesetup-monitoring-stack-volumes.yml.- Stack
langfuse(ambienteai-desktop-vm), Update the stack daai, stackagents(ambientelocal) e Update the stack daapps(o Grafana recebe o token do observador) (seção 13, seção 15). - Conecte o Claude: o conector Servidor no claude.ai e a rota de controle no Claude Code, com o Tailscale ligado (seção 13).
Fase 10 — Posto e assistente¶
setup-posto-volumes.yml(a primeira compilação do Vibe Kanban leva dezenas de minutos) e stackpostono ambienteai-desktop-vm(seção 16).setup-assistente-volumes.ymle stackassistenteno ambienteai-desktop-vm; mande/startao bot (seção 17).
Fase 11 — Painel e backup¶
- Chaves dos widgets nas telas de cada aplicação, gravadas em
homepage_widget_keys;setup-monitoring-stack-volumes.ymle Update the stack daapps(seção 9). - Rode um backup e teste uma restauração (backup).
Depois de cada fase¶
Faça o teste de ponta a ponta da seção correspondente e confira a linha dela em A conferir no primeiro deploy. Depois de tudo de pé, o full-deploy.yml reaplica a configuração inteira de uma vez (sem criar VMs nem subir stacks).