CLI tool to deploy and manage Silo Box on customer hardware.
Silo Box is a self-hosted AI chat application. This CLI installs and orchestrates Docker containers: PostgreSQL, backend, frontend, llama.cpp inference engine, and proxy agent.
- Docker 20.10+ with Compose v2
- Linux (Debian/Ubuntu) or macOS
- User in
dockergroup (Linux) or Docker Desktop (macOS) - 5GB+ free disk space
curl -fsSL https://raw.githubusercontent.com/EternisAI/silo/main/scripts/install.sh | bashgit clone https://github.com/EternisAI/silo.git
cd silo
make build
cp bin/silo ~/.local/bin/Add to PATH if needed (~/.bashrc or ~/.zshrc on macOS):
export PATH="$HOME/.local/bin:$PATH"silo up # first run installs, subsequent runs start
silo up --port 8080 # custom port (first install only)
silo up --image-tag 0.1.3 # specific versionServices auto-restart on system reboot (uses restart: unless-stopped).
silo down # stops containers, preserves datasilo status # show deployment and service statussilo logs # view all logs
silo logs -f # follow logs in real-time
silo logs --tail 50 # show last 50 lines
silo logs backend # logs for specific servicesilo upgrade # pull latest images and recreate containers
silo upgrade --json # JSON output for automationImportant: Upgrade only updates Docker images (backend, frontend). It preserves:
- Configuration files
- Database volumes
- Model files
- Application data
To change the LLM model after upgrade:
- Place new
.gguffile in~/.local/share/silo/data/models/ - Edit
inference_model_filein~/.config/silo/config.yml - Run
silo down && silo up
silo check # validate config and installation statesilo version # show CLI and application versions
silo version --json # JSON outputHTTP API for remote management over LAN:
make build-daemon
./bin/silod # localhost only
SILO_DAEMON_BIND_ADDRESS=0.0.0.0 ./bin/silod # LAN accesscurl http://localhost:9999/health # Health check
curl http://localhost:9999/status | jq # Container status
curl http://localhost:9999/api/v1/version | jq # Version info
curl -X POST http://localhost:9999/api/v1/up # Start/install
curl -X POST http://localhost:9999/api/v1/down # Stop
curl -X POST http://localhost:9999/api/v1/restart -d '{"service":"backend"}'
curl -X POST http://localhost:9999/api/v1/upgrade # Upgrade
curl "http://localhost:9999/api/v1/logs?service=backend&lines=50"
curl http://localhost:9999/api/v1/check | jq # Validate configEdit ~/.config/silo/config.yml then restart:
silo down && silo up| Setting | Default | Description |
|---|---|---|
port |
80 | Frontend port |
image_tag |
0.1.2 | Docker image version |
inference_model_file |
GLM-4.7-Q4_K_M.gguf | LLM model file |
inference_gpu_layers |
999 | GPU layers (999 = all) |
inference_context_size |
8192 | Token context window |
inference_gpu_devices |
"0", "1", "2" | GPU device IDs |
~/.local/bin/silo # CLI binary
~/.config/silo/config.yml # Configuration file
~/.local/share/silo/
├── docker-compose.yml # Generated compose file
├── state.json # Installation state
└── data/
├── models/ # LLM model files
└── postgres/ # Database data
-v, --verbose # Enable debug logging
--config-dir PATH # Custom config directorysilo down
rm -rf ~/.config/silo ~/.local/share/silo ~/.local/bin/silo
docker volume prunemake build # Build CLI binary to bin/silo
make build-daemon # Build daemon binary to bin/silod
make test # Run tests
make fmt # Format code
make lint # Run golangci-lint
make dev ARGS="up" # Run CLI without buildingReleases are automated via GitHub Actions. Do not manually create tags.
- Push your changes to
main(via PR or direct push) - Go to Actions → Release → Run workflow
- Choose version bump type:
patch(default): Bug fixes, minor updates (0.1.2 → 0.1.3)minor: New features, backward compatible (0.1.2 → 0.2.0)major: Breaking changes (0.1.2 → 1.0.0)
- Click Run workflow
- Tag created - Auto-increments version based on bump type
- GoReleaser runs - Builds binaries for Linux/macOS (amd64/arm64)
- GitHub Release created - With binaries, checksums, and changelog
- Install script updated - Users running
curl | bashget the new version
Each release includes:
silo_<version>_linux_amd64.tar.gzsilo_<version>_linux_arm64.tar.gzsilo_<version>_darwin_amd64.tar.gzsilo_<version>_darwin_arm64.tar.gzchecksums.txt
Pull requests to main trigger CI checks:
- Build (both
siloandsilod) - Tests
- Linting (golangci-lint)
- silo_box/ — The application this CLI deploys (Go backend + Next.js frontend)