1
0
Fork
You've already forked sparrow
0
No description
  • Rust 92.9%
  • HTML 4.3%
  • Shell 2.6%
  • Dockerfile 0.2%
Andeerc 9527e401bc
Some checks failed
CI / build-and-test (push) Has been cancelled
fix: issue responder usa opencode-go/deepseek-v4-flash, secrets renomeados
2026年06月20日 23:27:26 -03:00
.forgejo/workflows fix: issue responder usa opencode-go/deepseek-v4-flash, secrets renomeados 2026年06月20日 23:27:26 -03:00
.opencode/context/project-intelligence feat: vault de secrets (AES-256-GCM) + API + MCP + CLI 2026年06月19日 21:17:03 -03:00
crates chore: bump v0.9.6 (versão real dos crates + tags anteriores) 2026年06月20日 13:39:24 -03:00
docs Log rotation config + monitoring docs 2026年06月19日 14:19:51 -03:00
src fix: MCP stdio transport + initialize handler 2026年06月20日 00:20:00 -03:00
.dockerignore ci: Dockerfile + Forgejo Actions workflows for Codeberg Packages 2026年06月18日 08:08:09 -03:00
.gitignore feat: add comprehensive unit tests, fix Raft data_dir, config path, and permission fallback 2026年06月18日 23:35:45 -03:00
Cargo.lock chore: bump v0.9.6 (versão real dos crates + tags anteriores) 2026年06月20日 13:39:24 -03:00
Cargo.toml chore: bump v0.9.6 (versão real dos crates + tags anteriores) 2026年06月20日 13:39:24 -03:00
Dockerfile Batch fixes: Mutex safety, JOIN queries, CI linting, Systemd hardening, Docker healthcheck 2026年06月19日 11:51:30 -03:00
install.sh chore: bump v0.9.6 (versão real dos crates + tags anteriores) 2026年06月20日 13:39:24 -03:00
README.md feat: vault de secrets (AES-256-GCM) + API + MCP + CLI 2026年06月19日 21:17:03 -03:00

Sparrow 🐦

Orquestrador de containers Rust + Podman — simples como Swarm, seguro como Podman, rápido como Rust.

Sparrow é um orquestrador multi-node que usa Podman como runtime de containers, com foco em simplicidade operacional, segurança rootless e performance. Preenche o gap entre Docker Swarm (abandonado) e Kubernetes (complexo demais).

Swarm (morto) K8s (complexo)
 │ │
 └───────── Sparrow ──────────────┘
 │
 Simplicidade do Swarm
 + Segurança do Podman
 + Velocidade do Rust
 + Auto-scaling real

Stack

Camada Tecnologia
Linguagem Rust (2021 edition)
Runtime Podman (daemonless, rootless)
Cluster Raft (openraft)
API CLI (clap) + HTTP (axum) + MCP (SSE)
Métricas Podman stats
Estado SQLite via rusqlite (WAL mode)
Networking Podman network proxy + hyper reverse proxy
Frontend Dashboard SPA (HTML/CSS/JS embutido)
Alertas Telegram Bot API + SMTP (lettre)
Criptografia AES-256-GCM (vault de secrets)

Estrutura do Projeto

sparrow/
├── Cargo.toml # Workspace root
├── src/main.rs # CLI entrypoint + handlers + health check + autoscale
├── crates/
│ ├── proto/ # Tipos compartilhados (ServiceSpec, ContainerStatus, NodeSpec, etc.)
│ ├── core/ # CLI, config, error, state store (SQLite), deploy YAML, autoscale, alerts, vault, crypto
│ ├── podman/ # Podman runtime wrapper (run, rm, logs, inspect, stats)
│ ├── raft/ # Raft consensus (openraft) — NodeId, storage, network, cluster init/join
│ ├── api/ # API HTTP (axum) — cluster, nodes, proxy routes, autoscale, alerts, dashboard
│ └── mcp/ # MCP server (SSE + JSON-RPC) — 5 tools, 2 resources
├── docs/ # Documentação completa
└── .gitignore

Funcionalidades

Categoria O que faz
Serviços create, list, ps, inspect, scale, logs (tail/follow), rm, rolling update
Cluster init (multi-node com Raft), join, status, members
Declarativo Deploy via YAML com autoscale incluso
Autoscale Auto-scaling por CPU/memória com cooldown, pause/resume
Rede Proxy reverso por domínio (porta 7444)
Alertas Telegram Bot API + Email SMTP
MCP Servidor SSE + JSON-RPC (8 tools, 2 resources)
Vault sparrow secret set/get/list/rm — AES-256-GCM, chave mestra em arquivo ou env var
Dashboard SPA dark theme embutido na porta 7443
Update sparrow update check e sparrow update install via Codeberg
Saúde Health check loop (restarta containers falhos, escala se necessário)
Monitoramento Métricas Prometheus em /metrics, health check endpoints

CLI Reference

# Sparrow - Container orchestrator for Podman
sparrow --help
# Service management
sparrow service create --name myapp --image nginx --replicas 3 --port 80:80
sparrow service list
sparrow service ps myapp
sparrow service inspect myapp
sparrow service scale myapp --replicas 5
sparrow service logs myapp --tail 100
sparrow service logs myapp --follow # streaming real
sparrow service rm myapp
sparrow service update myapp --image nginx:latest --parallelism 2
# Cluster (multi-node)
sparrow cluster init --name prod --listen 0.0.0.0:7443
sparrow cluster status
sparrow cluster members
# Declarative deploy (YAML)
sparrow deploy service.yaml
# Networking
sparrow network create mynet --subnet 10.88.0.0/16
sparrow network list
sparrow network rm mynet
# Autoscale config
sparrow autoscale set myapp --min 2 --max 10 --cpu-target 70
sparrow autoscale status myapp
sparrow autoscale pause myapp
sparrow autoscale resume myapp
# Alert channels
sparrow alert set
sparrow alert list
sparrow alert history
# MCP server (controle por IA)
sparrow mcp
# Update (via Codeberg releases)
sparrow update check
sparrow update install
# Secrets Vault (AES-256-GCM)
sparrow secret init # gerar chave mestra
sparrow secret set myapp/DB_PWD "s3cr3t" # armazenar cifrado
sparrow secret get myapp/DB_PWD # descriptografar
sparrow secret list # listar nomes (nunca decripta)
sparrow secret rm myapp/DB_PWD # remover
# Status
sparrow status

API HTTP (porta 7443)

GET /api/v1/health
GET /api/v1/nodes
POST /api/v1/nodes/{id}/heartbeat
GET /api/v1/cluster/status
GET /api/v1/proxy/routes
POST /api/v1/proxy/routes
DELETE /api/v1/proxy/routes/{domain}
GET /api/v1/autoscale
POST /api/v1/autoscale
DELETE /api/v1/autoscale/{service_id}
GET /api/v1/alerts/channels
POST /api/v1/alerts/channels
GET /api/v1/alerts/events
GET /api/v1/secrets # listar secrets
GET /api/v1/secrets/{name} # obter secret (decriptado)
POST /api/v1/secrets/{name} # criar/atualizar secret
DELETE /api/v1/secrets/{name} # remover secret
GET / # Dashboard SPA

Reverse Proxy (porta 7444)

Proxy HTTP baseado em domínio. Rotas configuradas via API em /api/v1/proxy/routes.

MCP (porta 7445)

Conexão SSE em /sse, mensagens JSON-RPC em /messages.

  • Tools: list_services, get_service, list_nodes, scale_service, cluster_status, service_logs, deploy_service, remove_service, get_secret
  • Resources: sparrow://status, sparrow://logs/{service}

Config

# /etc/sparrow/sparrow.yamlcluster:name:sparrowlisten:0.0.0.0:7443raft_port:7444data_dir:/var/lib/sparrowruntime:backend:podmanrootless:truelogging:level:infoformat:plain

Instalação

Docker (Codeberg Packages)

docker pull codeberg.org/andeerc/sparrow:latest
docker run --rm codeberg.org/andeerc/sparrow:latest --help

Installer (recomendado)

curl -sfL https://codeberg.org/andeerc/sparrow/raw/main/install.sh | bash

Ou com systemd services:

curl -sfL https://codeberg.org/andeerc/sparrow/raw/main/install.sh | bash -s -- --systemd

Binário (Releases)

Baixe o binário da última release:

# Linux x86_64 — baixa a última release
curl -L -o sparrow $(curl -s https://codeberg.org/api/v1/repos/andeerc/sparrow/releases/latest | \
 grep -o '"browser_download_url":"[^"]*x86_64-linux"' | cut -d'"' -f4)
chmod +x sparrow
sudo mv sparrow /usr/local/bin/

Compilando da fonte

git clone https://codeberg.org/andeerc/sparrow.git
cd sparrow
cargo build --release
./install.sh # copia binário + configura completions + config

Quickstart

# Ver instalação
sparrow --help
# Check podman
podman --version
# Run
./target/release/sparrow status
# Create a service
./target/release/sparrow service create --name hello --image nginx:alpine --port 80:80
# Check containers
./target/release/sparrow service ps hello
# View logs
./target/release/sparrow service logs hello --tail 20
./target/release/sparrow service logs hello --follow
# Scale
./target/release/sparrow service scale hello --replicas 3
# Deploy from YAML
cat > service.yaml <<EOF
apiVersion: sparrow/v1
kind: Service
metadata:
 name: web
spec:
 image: nginx:alpine
 replicas: 3
 ports:
 - published: 80
 target: 80
 autoscale:
 min_replicas: 2
 max_replicas: 10
 cpu_target_percent: 70
EOF
./target/release/sparrow deploy service.yaml
# Initialize cluster
./target/release/sparrow cluster init --name prod --listen 0.0.0.0:7443
# API now available at http://localhost:7443/
# Dashboard at http://localhost:7443/
# Remove
./target/release/sparrow service rm hello
# Secrets Vault
./target/release/sparrow secret init
./target/release/sparrow secret set staging/PASSWORD "minha-senha"
./target/release/sparrow secret get staging/PASSWORD

Roadmap

  • mTLS entre nodes — cifrar comunicações Raft/API
  • Snapshots Raft — persistir estado compactado do cluster
  • HTTPS no proxy — terminação TLS com Let's Encrypt
  • Autoscale preditivo — baseado em histórico, não apenas instantâneo
  • Dashboard com WebSocket — atualizações ao vivo
  • Testes end-to-end — integração real com Podman em CI

Licença

Apache 2.0