Distribuicao via CDN

O Tatuzim Agent e distribuido publicamente via https://get.tatuzim.com. Backbone: Cloudflare (TLS na borda) → Traefik (production) → CDN sys (proxy) → Backblaze B2 (storage).

Back-compat: o dominio anterior https://tatuzim.ccs.systems permanece servindo o mesmo conteudo pra nao quebrar self-update de agents v0.1.0 ja instalados. Novas instalacoes devem usar get.tatuzim.com.

URLs publicas

Latest stable

https://get.tatuzim.com/x86_64/tatuzim-agent          binario
https://get.tatuzim.com/x86_64/tatuzim-agent.minisig  assinatura
https://get.tatuzim.com/x86_64/tatuzim-agent.zip      ZIP original do release

https://get.tatuzim.com/aarch64/tatuzim-agent
https://get.tatuzim.com/aarch64/tatuzim-agent.minisig
https://get.tatuzim.com/aarch64/tatuzim-agent.zip

Versionado (preservado)

https://get.tatuzim.com/v0.1.0/x86_64/tatuzim-agent
https://get.tatuzim.com/v0.1.0/x86_64/tatuzim-agent.minisig
https://get.tatuzim.com/v0.1.0/aarch64/tatuzim-agent
https://get.tatuzim.com/v0.1.0/aarch64/tatuzim-agent.minisig

Util pra pinning de versao em ambientes que nao podem ir pro latest.

Release Candidates (canal RC)

https://get.tatuzim.com/rc/x86_64/tatuzim-agent
https://get.tatuzim.com/rc/v0.1.1-rc.1/x86_64/tatuzim-agent

Download direto

# Detect arch
ARCH=$(uname -m)   # x86_64 ou aarch64

# Baixar binario + assinatura
curl -fsSLo /tmp/tatuzim-agent     https://get.tatuzim.com/$ARCH/tatuzim-agent
curl -fsSLo /tmp/tatuzim-agent.sig https://get.tatuzim.com/$ARCH/tatuzim-agent.minisig

chmod +x /tmp/tatuzim-agent
/tmp/tatuzim-agent --help

Verificacao de assinatura

Todo binario publicado e assinado com a chave minisign de release. Verificacao obrigatoria antes de executar (o self-update ja faz automaticamente).

Via `minisign` (off-the-shelf)

PUBKEY="RWSeTpgYV+16Z//WwZku61OpIYgaU8iyyN/dEYm7bOGru0vFTbdLSAcD"

minisign -V -P "$PUBKEY" \
    -x /tmp/tatuzim-agent.minisig \
    -m /tmp/tatuzim-agent

# Esperado: "Signature and comment signature verified"

Via `rsign2` (Rust CLI, mesmo formato)

rsign2 verify -P "$PUBKEY" \
    -x /tmp/tatuzim-agent.minisig \
    /tmp/tatuzim-agent

Via o proprio agent

Se ja tem uma versao instalada, ela tem a pubkey embutida:

sudo tatuzim-agent self-update --url https://get.tatuzim.com/$ARCH

Falha com Error: signature does NOT match binary — refusing to install se a assinatura nao bater.

Headers HTTP

Resposta tipica:

HTTP/2 200
content-type: application/octet-stream
content-length: 7578584
content-disposition: inline; filename="tatuzim-agent"
cache-control: public, max-age=300, s-maxage=3600
access-control-allow-origin: https://app.cdn.borlot.com.br
cf-ray: <cloudflare-ray-id>
server: cloudflare
Header Significado
cache-control: max-age=300 Cliente pode cachear 5 min
s-maxage=3600 Cloudflare cacheia 1h
content-disposition: inline; filename=... wget/curl -O salvam com nome certo

Layout interno (B2)

ccs-systems/                              (bucket)
  tatuzim/                                (folder)
    latest                                ponteiro texto (futuro)
    x86_64/
      tatuzim-agent                       binario latest stable
      tatuzim-agent.minisig
      tatuzim-agent.zip                   ZIP original
    aarch64/
      ...
    v0.1.0/                               versionado (preservado)
      x86_64/...
      aarch64/...
    rc/                                   canal RC
      x86_64/...
      aarch64/...
      v0.1.1-rc.1/...

CDN faz proxy direto: https://get.tatuzim.com/x86_64/foo -> b2://ccs-systems/tatuzim/x86_64/foo. O /tatuzim/ no path B2 e adicionado pelo CDN pela path_rule /tatuzim/** do dominio.

Cache

Camada TTL Invalidacao
Cloudflare edge s-maxage=3600 (1h) Manual via dashboard, ou aguardar
Browser/curl max-age=300 (5min) Cliente
CDN backend nenhum (proxy direto B2) n/a

Apos um release novo, novos binarios aparecem em ate 1h via cache CF, ou imediato com purga manual + ?nocache=... query string.

Bandwidth e quotas

Recurso Limite
B2 download/mes (account total CCS) ~10 GB free, depois $0.01/GB
Cloudflare bandwidth ilimitado (Free plan)
CDN rate-limit sem rate-limit hoje

Como o Cloudflare cacheia, requests repetidos batem em CF, nao em B2. Custos B2 reais sao baixissimos (so quando cache expira).

Confianca da cadeia

[GitOps Worker]  <-- HTTPS auth via webhook secret + token GitHub
       |
       |  upload via B2 SDK + minisign signature
       v
[Backblaze B2]   <-- aws_access_key_id/secret stored em GitOps env
       |
       |  HTTPS proxy
       v
[CDN backend]    <-- credenciais B2 stored em CDN sys env
       |
       |  Traefik (TLS termination Let's Encrypt)
       v
[Cloudflare CDN] <-- TLS na borda (CF cert)
       |
       v
[Cliente]        <-- verifica minisign com pubkey embutida ou conhecida

Compromisso de cada camada:

Camada Compromisso evita
Minisign pubkey embutida no binario CDN/CF servindo binario maligno seria detectado
HTTPS end-to-end MITM em transito
Cloudflare cache aceleracao + ocultacao do origin B2

Troubleshooting

404 num path valido

  1. Confere se o release foi processado: B2 list.
  2. Cache CF cacheou 404 antigo? Adicionar ?cb=$(uuidgen) na URL pra bypass.
  3. Se persistir: verificar config Traefik em production (/opt/traefik/dynamic/cdn_tatuzim_ccs_systems.yml).

Assinatura nao bate

Indica que:

  • O binario foi modificado em transito (improvavel, HTTPS)
  • Voce esta usando pubkey errada (verifica que e a stable, nao a de dev)
  • O agent local tem pubkey antiga embutida (atualizou? esse binario vem de quando?)

Self-update trava em "downloading"

  • Verifica conectividade do agent: curl -I https://get.tatuzim.com/x86_64/tatuzim-agent da pra rodar a partir do VPS?
  • Cloudflare bloqueio do VPS IP? (raro mas acontece em IPs de hostings menores)
By Borlot.com.br on 07/06/2026