Parte IV — Copa, chão e cuidado
10 · O chão: empacotamento e operação
Um baobá vive séculos se o chão for bom. A mucua vive em escolas, pontos de cultura e casas de reza, longe de quem programa: instalar e atualizar tem de ser um comando só, e ela tem de se levantar sozinha depois de cair.
Arquivos para ler (repositório bbx-make-deb)
COMO-USAR.txt— como gerar o pacote.build.sh— copia o backend e o build do front para a árvore e chamadpkg-deb;--vendor-wheelspara instalação sem internet.debian-tree/DEBIAN/postinst— a instalação inteira.debian-tree/lib/systemd/system/*.service|*.timer.debian-tree/etc/nginx/sites-available/baobaxia.debian-tree/usr/sbin/baobaxia-enriquecimento— liga/instala OCR e Whisper.debian-tree/usr/share/doc/baobaxia/README.Debian— o manual da mucua.
O que o postinst faz
flowchart TD
A[configure] --> B[Node ≥ 18?]
B --> C[usuário baobaxia<br/>shell = git-annex-shell]
C --> D[~/.ssh/authorized_keys pronto]
D --> E[rsync do código para /opt/baobaxia]
E --> F[venv + pip<br/>requirements + extras ou vendor-wheels]
F --> G[backend.env com BBX_SECRET_KEY nova<br/>xmpp.env, frontend.env — só se não existem]
G --> G2[rádio/TV? → BBX_CANAIS on/manual/off]
G2 --> H[nginx: site baobaxia<br/>+ RTMP :1935 se há o módulo e BBX_CANAIS ≠ off]
H --> I[avahi: baobaxia.local]
I --> J["/usr/local/bin/bbx (wrapper --api-url)<br/>baobaxia-healthcheck"]
J --> K{credenciais.yaml existe?}
K -- não --> L[bbx criar-galaxia<br/>pergunta UUID para reinstalar mucua existente]
K -- sim --> M[verificar_legado.py: avisa dado antigo]
L --> N[enriquecimento: OCR/Whisper?]
M --> N
N --> O[systemd: api, front, timers]
O --> P[resumo em /etc/baobaxia/instalacao.html]
Regras que o script segue: nunca sobrescreve backend.env (o segredo não pode mudar depois que a mucua tem dados); cria a galáxia antes de subir a API (senão a API sobe com uma visão vazia); nunca trava esperando terminal (as perguntas têm 30 s e só aparecem se houver /dev/tty).
As variáveis. São mais de cem, e quase todas são ajuste fino. O backend.env novo vem agrupado por tema (núcleo, endereço público, sync, SSH/Tor, federação, enriquecimento, rádio/TV) só com as que uma mucua costuma mexer; a seção 4 do README.Debian explica essas e só lista as de ajuste fino; a referência completa, com padrões, é docs/baobaxia-configuracao.md no back. Atenção às três parecidas do endereço público: BBX_MUCUA_PUBLIC_URI (identidade), BBX_ORIGEM_PUBLICA (links absolutos — sem ela vale o Host da requisição) e BBX_AP_BASE_URL (ActivityPub).
Serviços
| Unidade | O que faz | Quando |
|---|---|---|
baobaxia-api | bbx api --host 0.0.0.0 --port 8000 | sempre, Restart=always |
baobaxia-front | node build/index.js em 127.0.0.1:3000 | sempre |
baobaxia-sincronizar.timer | bbx sincronizar (sync + pedidos) | a cada 30 min |
baobaxia-enriquecer.timer | bbx enriquecer | 20 min depois do fim da rodada anterior |
baobaxia-healthcheck.timer | reinicia API/front que não respondem em 5 s | a cada 2 min |
baobaxia-xmpp-bot | o bot | instalado desligado |
Os serviços rodam com NoNewPrivileges, ProtectSystem=strict, ProtectHome, PrivateTmp e só escrevem em /var/lib/baobaxia, /var/log/baobaxia e /opt/baobaxia/back.
Gerar e atualizar
cd bbx-v3-front && npm ci && npm run build
cd ../bbx-make-deb
./build.sh --back ../bbx-v3-back --front-build ../bbx-v3-front/build --version 3.3.0
sudo apt install ./dist/baobaxia_3.3.0_all.deb
Antes de atualizar uma mucua antiga para a 3.3:
sudo -u baobaxia /opt/baobaxia/back/venv/bin/python \
/opt/baobaxia/back/ferramentas/verificar_legado.py
Diagnóstico
journalctl -u baobaxia-api -f
systemctl list-timers 'baobaxia-*'
bbx tor-diagnostico
bbx diagnostico-shell
curl -s http://127.0.0.1:8000/api/v3/health
Práticas
- Leia o
postinstinteiro e marque cada passo que só roda na primeira instalação. O que acontece se a luz cair no meio debbx criar-galaxia? - Gere um
.debe liste o conteúdo (dpkg-deb -c). O.gitfoi junto? - Instale numa máquina virtual Debian sem internet usando
--vendor-wheels. - Por que o
nginxfecha/api/v3/xmpp/extauthpara fora da máquina? - Instale respondendo "não" à rádio/TV. O que muda no
backend.env, em/etc/nginx/modules-enabled/e no editor de um canal?
Para conversar
- Quem, na comunidade, vai ler o
instalacao.html? O que precisa estar escrito ali para essa pessoa?
