Self-hosting do Saiku
O Saiku distribui um build self-hosted sob Apache 2.0 + EPL — o mesmo build que rodamos no Saiku Cloud. Todo recurso que está no repositório OSS está no binário self-hosted. Sem SKUs enterprise, sem camada MCP com gate, sem conector Excel só-Cloud.
O trade-off é responsabilidade operacional: você roda a caixa, você lida com updates, você é dono dos backups. Esta seção é o playbook atual do operador.
Qual build pegar
| Distribuição | Quando usá-la |
|---|---|
ghcr.io/spiculedata/saiku:development | Acompanha a branch development — novos recursos chegam aqui primeiro. Melhor para avaliação e deployments não-críticos. |
ghcr.io/spiculedata/saiku:4.6.2 (fixe numa versão) | Aponte para uma tag imutável. Recomendado para qualquer coisa rodando em produção. |
saiku-dist-<version>.zip de Releases | Fat-JAR executável em Java 21 + wrappers run.sh/run.bat. Para times que não rodam Docker. |
Tudo abaixo assume a imagem Docker; o fluxo do fat-JAR são as mesmas env vars + os mesmos volume mounts, menos o container.
Primeiro boot
-
Puxe a imagem e inicie-a com um volume
saiku-homepersistente e uma senha de admin. O Saiku se recusa a servir enquanto as credenciais defaultadmin/adminestiverem inalteradas, então defina sua senha logo no primeiro boot comSAIKU_ADMIN_PASSWORD:Terminal window docker volume create saiku-homedocker run -d --name saiku \--restart unless-stopped \-p 8080:8080 \-v saiku-home:/app/saiku-home \-e SAIKU_HOME=/app/saiku-home \-e SAIKU_ADMIN_PASSWORD='a-strong-password' \ghcr.io/spiculedata/saiku:4.6.2No primeiro boot, o Saiku a hasheia com bcrypt em
saiku-home/users.propertiesno volume. A variável de ambiente só é necessária na primeira vez — ela persiste entre reinícios, então você pode removê-la depois (ou deixá-la; redefini-la apenas reaplica a mesma senha). -
Abra http://localhost:8080/ui/ e faça login como
admincom a senha que você definiu. -
Adicione seu primeiro datasource em Admin → Connections. Postgres, MySQL, BigQuery, Snowflake, ClickHouse, DuckDB, MotherDuck e H2 estão conectados out of the box.
Dimensionamento
Regras de bolso, extraídas de deployments reais. Cada dimensão escala independentemente — a maioria dos gargalos aparece na camada do warehouse, não no container do Saiku.
| Formato de deployment | RAM | CPU | Heap JVM (-Xmx) |
|---|---|---|---|
| Avaliação / demo | 2 GB | 1 vCPU | 1 GB (default) |
| Time pequeno (< 20 usuários) | 4 GB | 2 vCPU | 2 GB |
| Médio (20-100 usuários) | 8 GB | 4 vCPU | 4 GB |
| Grande (100+ usuários) | 16 GB+ | 8 vCPU | 8 GB |
| Workload AI pesado | +50% de RAM sobre a base | +2 vCPU sobre a base | Iguale a base |
Disco: /app/saiku-home cresce com sua contagem de workbooks e
retenção de histórico de query. 20 GB é confortável para a maioria dos
deployments single-tenant; escale para 100 GB+ se você está mantendo
anos de histórico de auditoria.
Heap JVM: definido via -e JAVA_OPTS="-Xmx4g" na linha docker run.
O heap default é intencionalmente conservador — aumente-o se você vê
OutOfMemoryError em saiku-home/logs/.
Upgrades
O Saiku segue semver: 4.5.2 → 4.5.3 é patch,
4.5 → 4.6 é minor, 4.x → 5.x é major. Upgrades minor e patch são
drop-in — puxe a nova imagem, reinicie o container, seu volume
saiku-home carrega cada workbook e conexão adiante.
-
Faça snapshot do volume primeiro (veja Backups abaixo — faça isso antes de cada upgrade).
-
Pare o container em execução.
Terminal window docker stop saiku && docker rm saiku -
Puxe a nova tag e inicie-a contra o mesmo volume.
Terminal window docker pull ghcr.io/spiculedata/saiku:4.5.3docker run -d --name saiku \--restart unless-stopped \-p 8080:8080 \-v saiku-home:/app/saiku-home \ghcr.io/spiculedata/saiku:4.5.3 -
Cheque o changelog para quaisquer notas de migração na versão que você acabou de instalar. A maioria dos releases não tem nenhuma; os que carregam peso são chamados explicitamente no topo da entrada.
Fazer rollback é o reverso: docker pull uma tag mais antiga,
reinicie contra o mesmo volume. Compatível contanto que você não tenha
cruzado uma versão major — o changelog sinaliza as incompatíveis.
Backups
saiku-home guarda tudo que vale a pena fazer backup: conexões,
workbooks, queries salvas, usuários, histórico de auditoria, metadados
de tenant. Faça backup dele na mesma cadência que qualquer outra coisa
na sua plataforma de dados.
Snapshot de volume Docker (simples):
# Oncedocker run --rm \ -v saiku-home:/data \ -v $(pwd):/backup \ alpine tar czf /backup/saiku-home-$(date +%F).tar.gz -C /data .
# Restoredocker run --rm \ -v saiku-home:/data \ -v $(pwd):/backup \ alpine tar xzf /backup/saiku-home-2026-07-10.tar.gz -C /dataBackups agendados (cron Linux):
0 2 * * * /usr/local/bin/saiku-backup.shOnde saiku-backup.sh roda o comando docker run --rm ... alpine tar ... acima e rotaciona arquivos antigos (find /backup -mtime +30 -delete).
Armazenamento fora da caixa. O snapshot de volume é um tarball simples — faça rsync dele para S3, wasabi ou qualquer object store num schedule. Replicação cross-region se você precisar.
Point-in-time recovery exige um backup do lado do warehouse dos dados que o Saiku consulta. O próprio estado do Saiku é pequeno (metadados + queries salvas); perder 24 horas dele é geralmente recuperável do último backup + arquivos de schema commitados no git.
Autenticação
Out of the box, o Saiku vem com auth in-memory respaldado por
users.properties — bom para avaliação, substitua antes da produção.
Três caminhos de substituição, em ordem crescente de esforço de
integração:
- Usuários autoritativos file-backed. A senha de admin fica em
saiku-home/users.propertiesno volume (o launcher a escreve lá a partir deSAIKU_ADMIN_PASSWORDno primeiro boot). Edite esse arquivo para adicionar contas — as entradas sãouser={bcrypt}$2y$...,ROLE_USER,ROLE_ADMIN; gere um hash comhtpasswd -nbBC 12 <user> '<password>'. Para rotacionar a senha de admin depois, reinicie com um novoSAIKU_ADMIN_PASSWORD, ou edite o arquivo diretamente e reinicie. O store embutido é somente-leitura para as telas de gestão de usuários da UI de admin. - LDAP / Active Directory. Config padrão de LDAP do Spring
Security em
applicationContext-security-ldap.xml. Veja o guia de wiring LDAP (link em breve). - SSO SAML 2.0. Conectado via Spring Security SAML. Guia de wiring (link em breve).
- OAuth 2.0 / OIDC. Mesma história via Spring Security OIDC. Guia de wiring (link em breve).
O Saiku Cloud usa o caminho SAML com Auth0 como IdP; a config é a mesma que é distribuída no build OSS.
Observabilidade
O Saiku vem com OpenTelemetry opt-in — nenhum dado deixa a caixa a menos que você configure. Para ligá-lo, aponte o endpoint OTLP para seu collector:
docker run -d --name saiku \ -e OTEL_EXPORTER_OTLP_ENDPOINT="https://otel-collector:4317" \ -e OTEL_SERVICE_NAME="saiku-prod" \ ghcr.io/spiculedata/saiku:4.6.2O agente Java auto-instrumenta:
- Jetty (request / response HTTP)
- Jersey (endpoints REST)
- JDBC (cada query SQL ao seu warehouse — cuidado com a cardinalidade)
java.net.http.HttpClient(chamadas ao provider de LLM, MCP outbound)- Log4j 2 (
trace_id/span_idno MDC) - Métricas de JVM (heap, GC, threads)
- Estatísticas do pool de conexão DBCP2
Sem a env var, o agente nunca é carregado. Zero overhead quando a observabilidade está desligada.
Configuração
Toda configuração é uma variável de ambiente padrão do SDK OpenTelemetry — o Saiku as passa direto para o agente. As que você vai realmente usar:
| Variável | Default | Propósito |
|---|---|---|
OTEL_EXPORTER_OTLP_ENDPOINT | não-definido | URL do collector OTLP. Definir isto é o que ativa o agente. gRPC (:4317) ou HTTP/protobuf (:4318). |
OTEL_EXPORTER_OTLP_PROTOCOL | grpc | grpc ou http/protobuf — case com seu collector. |
OTEL_SERVICE_NAME | saiku | Identificador de serviço na sua UI de tracing. |
OTEL_RESOURCE_ATTRIBUTES | não-definido | ex.: deployment.environment=prod,service.version=4.5.2. |
OTEL_METRICS_EXPORTER | otlp | otlp / prometheus / none. |
OTEL_EXPORTER_OTLP_HEADERS | não-definido | Para collectors SaaS que precisam de auth: api-key=…. |
OTEL_TRACES_SAMPLER | parentbased_always_on | Estratégia de sampling — veja abaixo. |
Sampling. O default captura cada trace — certo para a demo, errado sob carga. Para produção, faça sampling de root traces:
export OTEL_TRACES_SAMPLER=parentbased_traceidratioexport OTEL_TRACES_SAMPLER_ARG=0.05 # 5% of root traces; children follow the rootTenda a 1–5% para backends SaaS cobrados por uso; um Tempo ou Jaeger self-hosted lida com 25–100% confortavelmente no volume de query típico do Saiku.
Quando escalar para o Cloud
Self-hosted é a opção honesta para times que podem prover pessoal para ele. Limiares aproximados onde a economia do Cloud começa a vencer:
- Você precisa de isolamento multi-tenant. O isolamento de tenant do Cloud (auditoria + billing + escopo de conexão) é uma camada de plataforma substancial em cima do build OSS. Viável de construir você mesmo; não barato.
- Você precisa de auditoria + integração SIEM que você não quer rodar.
- Você precisa de SSO com SLAs. Self-host + Auth0 funciona, mas se você ainda não tem um IdP rodando, o Cloud é mais rápido do que subir um.
- Você quer SOC 2 sem fazer o trabalho de compliance. O alvo do Cloud é Q4 2026 (veja a página de postura de segurança).
Obtendo ajuda
- GitHub Discussions — Q&A público.
- GitHub Issues — reportes de bug.
- Suporte Enterprise — respaldado por SLA, escalonado por tempo de resposta.
Se você está avaliando self-hosted vs Cloud e quer uma segunda opinião, marque uma call de 30 minutos — respostas honestas, sem assinar contrato.