Instalar o Tatuzim Server
Este guia cobre o setup detalhado do hub (Tatuzim Server + step-ca) em containers. Pra um passo a passo mais condensado, ver Inicio Rapido.
Requisitos
- Linux (Ubuntu 24.04+ ou Debian 12+)
- Docker 24.0+ + Docker Compose v2.x
jq(apt install jq)- Dominio publico apontando pro host (ex:
tatuzim.dev.borlot.com.br) - Reverse proxy com Let's Encrypt (Traefik, Caddy, nginx + acme.sh)
1. Clone do repo
git clone https://github.com/devborlot/tatuzim
cd tatuzim2. Configurar `.env`
cat > .env << 'EOF'
# Senha do step-ca (gera root + intermediate)
STEP_CA_PASSWORD=COLOQUE-UMA-SENHA-FORTE-AQUI
# Passphrase do vault Tatuzim (Argon2id KDF)
TATUZIM_MASTER_PASSPHRASE=COLOQUE-OUTRA-SENHA-FORTE-AQUI
EOF
chmod 600 .envImportante: guarde essas duas senhas em password manager. Sem elas, voce perde o vault.
3. Subir step-ca primeiro
step-ca precisa estar rodando antes do Tatuzim Server (que vai pedir certs pra ele).
docker compose up -d step-ca
sleep 10
# Verificar
docker logs dev_stepca_tatuzim | tail
curl -sk https://localhost:9000/health
# Esperado: {"status":"ok"}4. Capturar provisioner JWK
O Tatuzim Server precisa assinar tokens (OTT) que o step-ca aceita. Pra isso usa o JWK do provisioner:
PROV_KID=$(docker exec dev_stepca_tatuzim step ca provisioner list | jq -r '.[0].key.kid')
ENC_KEY=$(docker exec dev_stepca_tatuzim step ca provisioner list | jq -r '.[0].encryptedKey')
PROV_KEY=$(docker exec -i dev_stepca_tatuzim sh -c \
"echo '$ENC_KEY' | step crypto jwe decrypt --password-file /run/secrets/ca_password")
# Adiciona ao .env
echo "TATUZIM_STEPCA_PROVISIONER_KID=$PROV_KID" >> .env
echo "TATUZIM_STEPCA_PROVISIONER_KEY=$(echo "$PROV_KEY" | jq -c .)" >> .env
echo "OK — kid: $PROV_KID"5. Extrair root CA
mkdir -p certs
docker exec dev_stepca_tatuzim cat /home/step/certs/root_ca.crt > certs/root_ca.pem
chmod 0644 certs/root_ca.pemEsse certs/root_ca.pem:
- Sera montado no container do Tatuzim Server (pra confiar no step-ca via HTTPS)
- Sera distribuido pros agents (pra confiar no server mTLS) — copia pra
/etc/tatuzim-agent/stepca-root.pemem cada VPS
6. Editar `docker-compose.yml` (CN do server + Traefik)
O server precisa do CN correto pra auto-bootstrap do TLS cert:
environment:
- TATUZIM_SERVER_CN=tatuzim.dev.borlot.com.br # <-- seu dominioE o Traefik label aponta pro mesmo dominio:
labels:
- "traefik.http.routers.tatuzim_enroll.rule=Host(`tatuzim.dev.borlot.com.br`)"Tambem confirme que a porta 8443 (mTLS) esta exposta:
ports:
- "8443:8443"7. Subir o Tatuzim Server
docker compose up -d tatuzim-server
docker logs -f dev_tatuzim_serverSaida esperada:
[entrypoint] Vault not initialized at /var/lib/tatuzim, running init...
Vault initialized at /var/lib/tatuzim
[entrypoint] Starting tatuzim-server...
INFO tatuzim_server: vault unsealed
INFO tatuzim_server: schema verified
INFO tatuzim_server: stepca client ready
INFO tatuzim_server::server_identity: requesting fresh server cert from step-ca cn=tatuzim.dev.borlot.com.br
INFO tatuzim_server::server_identity: server cert saved path=/var/lib/tatuzim/server.crt
INFO tatuzim_server: health endpoint listening addr=0.0.0.0:8080
INFO tatuzim_server: enroll endpoint listening addr=0.0.0.0:8444
INFO tatuzim_server: mTLS endpoint listening (strict) addr=0.0.0.0:84438. Validar publicamente
Health (via Traefik)
# Enroll endpoint exposto via Traefik
curl -X POST https://tatuzim.dev.borlot.com.br/v1/enroll -d '{}'
# Esperado: {"error":"token_not_found"} (HTTP 401)mTLS (porta 8443 direta)
# Verifica que server apresenta cert do step-ca
echo | openssl s_client -connect tatuzim.dev.borlot.com.br:8443 \
-servername tatuzim.dev.borlot.com.br 2>/dev/null | \
openssl x509 -noout -subject -issuerEsperado:
subject=CN=tatuzim.dev.borlot.com.br
issuer=O=Tatuzim Dev CA, CN=Tatuzim Dev CA Intermediate CA9. Backup do vault
Apos o setup, faca backup do vault:
docker exec dev_tatuzim_server tar czf - /var/lib/tatuzim/config.json /var/lib/tatuzim/db.enc \
> tatuzim-vault-backup-$(date +%Y%m%d).tgz
gpg --symmetric tatuzim-vault-backup-*.tgz # opcional, mas recomendadoSem config.json + db.enc + passphrase mestra, voce nao consegue recuperar.
Ver Backup & Recovery pra detalhes.
Producao vs Dev
| Aspecto | Dev | Producao |
|---|---|---|
Passphrase em .env |
OK | Pref. systemd-creds ou keyring |
| Step-ca root CA online | OK | Mover root pra USB/HSM apos init |
| Traefik wildcard cert | OK | Idem |
| Porta 8443 exposta na internet | OK | Pref. so via WireGuard |
docker-compose.yml rodado manualmente |
OK | systemd unit + auto-restart |