Imagens Oficiais (GHCR)
As imagens Docker oficiais são publicadas automaticamente no GitHub Container Registry a cada release:Servidor ChatCLI
Última versão: 1.188.0
ghcr.io/diillson/chatcli:1.188.0Kubernetes Operator
Última versão: 1.188.0
ghcr.io/diillson/chatcli-operator:1.188.0As imagens suportam multi-arch (
linux/amd64 e linux/arm64).Docker
Build da Imagem (Local)
- Build stage:
golang:1.25-alpinecompila o binário - Runtime stage:
alpine:3.21com usuário não-root, health check integrado
Build da Imagem do Operator (Local)
- Build stage:
golang:1.25com suporte multi-arch (TARGETARCH) - Runtime stage:
gcr.io/distroless/static:nonroot(segurança máxima, sem shell)
Rodar com Docker
- Básico
- Com Auth
- Com Persistência
Docker Compose
O projeto inclui umdocker-compose.yml pronto para desenvolvimento:
1
Defina as variáveis
2
Inicie o container
3
Conecte do seu terminal
- Porta 50051 exposta
- Volumes persistentes para sessões e plugins
- Restart automático (
unless-stopped) - Todas as variáveis de LLM via environment
- Hardening de segurança: filesystem read-only,
no-new-privileges, limites de CPU/memória, tmpfs para/tmp
Arquivo docker-compose.yml
O container roda com filesystem read-only eno-new-privilegespor padrão. O diretório/tmpusa tmpfs em memória (limitado a 100MB). Os volumes nomeados (chatcli-sessions,chatcli-plugins) são os únicos pontos graváveis. Veja a documentação de segurança para detalhes.
Kubernetes (Helm)
Os Helm charts do ChatCLI estão disponÃveis como artefatos OCI no GHCR — não é necessário clonar o repositório.Pré-requisitos
- Cluster Kubernetes (kind, minikube, EKS, GKE, AKS, etc.)
- Helm 3.8+ instalado (suporte a OCI)
kubectlconfigurado para o cluster
Instalação Básica
- OpenAI
- Anthropic (com Auth)
Se preferir usar o chart local (após clonar o repo), substitua
oci://ghcr.io/diillson/charts/chatcli por ./deploy/helm/chatcli/ em todos os comandos abaixo.Instalação com Segurança (Helm)
Para deployments com segurança completa, incluindo rate limiting, autenticação JWT e modo agente seguro:Instalação com K8s Watcher (Single-Target)
Instalação com Multi-Target + Prometheus
Para monitorar múltiplos deployments com métricas Prometheus, use umvalues.yaml:
- Cria ServiceAccount com RBAC para o watcher ler pods, eventos, logs
- Auto-detecta multi-namespace: se targets estão em namespaces diferentes, usa
ClusterRoleem vez deRole - Gera ConfigMap
<name>-watch-configcom o YAML multi-target - Monta o config como volume e passa
--watch-configao container - Passa corretamente as flags
--token,--modele--mcp-configao servidor - Usa health probes gRPC nativas (liveness, readiness e startup) em vez de
pidof - Inclui todos os 17 CRDs do operator no diretório
crds/
Valores do Helm Chart
Servidor
TLS
LLM
Secrets (API Keys)
GitHub Copilot
Para autenticação, usesecrets.githubCopilotTokencom um token obtido via/auth login github-copilot, ou definaGITHUB_COPILOT_TOKENcomo variável de ambiente.
Ollama
K8s Watcher
Campos de cada target (
watcher.targets[].):
Fallback de Provedores
MCP (Model Context Protocol)
Bootstrap e Memória
Skill Registry
Quando habilitado, os valores são passados como variáveisCHATCLI_REGISTRY_*no ConfigMap. O container ChatCLI cria automaticamente~/.chatcli/registries.yamlcom os registries padrão (chatcli, clawhub). Use/skill searche/skill installpara gerenciar skills via registries.
Persistência
Segurança
QuandoreadOnlyRootFilesystemestátrue, o chart monta automaticamente um tmpfs em/tmpe um emptyDir em/home/chatcli/.chatcli(200Mi) para dados de runtime. A variávelHOME=/home/chatclié definida automaticamente. Para monitorar múltiplos namespaces, habiliterbac.clusterWide: true. Veja a documentação de segurança para detalhes. Nota: O ConfigMap e o Secret referenciados viaenvFromsão marcados comooptional: true, permitindo criar o Instance/Deployment antes dos recursos dependentes. O operator observa Secrets automaticamente e dispara rolling updates quando são criados ou atualizados.
Autoscaling (HPA)
Quandoautoscaling.enabledétrue, oreplicaCounté ignorado e o HPA controla o número de réplicas automaticamente.
Pod Disruption Budget
O PDB garante alta disponibilidade durante upgrades de nó, drain e manutenção do cluster.
Network Policy
A NetworkPolicy restringe tráfego de rede no nÃvel do pod. Requer um CNI com suporte a NetworkPolicy (Calico, Cilium, etc.).
Rede
gRPC e múltiplas réplicas: O gRPC usa conexões HTTP/2 persistentes que fixam em um único pod. ParareplicaCount > 1, habiliteservice.headless: truepara ativar balanceamento round-robin via DNS. O client já possui keepalive e round-robin integrados. Ingress gRPC: Quando o Ingress está habilitado comclassName: nginx, o chart adiciona automaticamente a annotationnginx.ingress.kubernetes.io/backend-protocol: "GRPC"para rotear tráfego gRPC corretamente.
Usando Secret Existente
Se você já tem um Secret com as API keys:Acessar o Servidor
- Port Forward (Dev)
- NodePort
- LoadBalancer
Ingress (com TLS)
Upgrade e Rollback
Configuração de Segurança
O Helm chart suporta configuração de segurança avançada para ambientes de produção:Em Kubernetes, o
bindAddress é automaticamente detectado como 0.0.0.0 via a variável de ambiente KUBERNETES_SERVICE_HOST. Não é necessário configurar manualmente.Exemplo Completo: Produção
Single-Target (Legado)
Multi-Target com Prometheus (Recomendado)
Quando targets estão em namespaces diferentes (ex:productionebatch), o chart cria automaticamente umClusterRoleem vez deRolenamespace-scoped.
Próximos Passos
Servidor
Configurar o servidor gRPC
Conexão Remota
Conectar ao servidor
K8s Watcher
Monitorar Kubernetes