117 lines
3.9 KiB
Markdown
117 lines
3.9 KiB
Markdown
# Hermes Agent Vultr Marketplace — Packer Image Build
|
|
|
|
One-shot install for Hermes Agent on Ubuntu 24.04 with Vultr Inference, ttyd, code-server, Docker, Caddy, and Homebrew.
|
|
|
|
## Architecture
|
|
|
|
Bare-metal install via Packer → Vultr snapshot.
|
|
|
|
### File layout
|
|
|
|
```
|
|
├── Jenkinsfile # Pipeline: validate → install packer → init → build
|
|
├── hermes.pkr.hcl # Packer HCL template (Vultr plugin)
|
|
├── scripts/
|
|
│ ├── provision.sh # Bake-time: system deps, hermes, docker, caddy, ttyd
|
|
│ └── cloud-init.yaml # Deploy-time: metadata fetch, config, caddy TLS
|
|
├── install-hermes.sh # Standalone installer (for manual deploys)
|
|
└── README.md
|
|
```
|
|
|
|
### Bake-time (Packer snapshot)
|
|
|
|
Everything slow and static:
|
|
- `apt` packages (build-essential, curl, git, jq, python3-venv, zsh, ttyd, …)
|
|
- Hermes Agent from GitHub (v0.7.0)
|
|
- Docker CE
|
|
- Caddy (disabled until configured)
|
|
- code-server
|
|
- Oh My Zsh + Homebrew
|
|
- UFW with ssh/http/https/7681/8080 allowed
|
|
- Dedicated `hermes` system user with `~/.hermes/` pre-created
|
|
- ttyd and code-server systemd services created
|
|
|
|
### Deploy-time (cloud-init)
|
|
|
|
Per-instance secrets and activation:
|
|
1. Fetch `app-password`, `app-inf_api_key`, `app-domain` from Vultr metadata
|
|
2. Write `/home/hermes/.hermes/.env` with Vultr Inference API key
|
|
3. Write `/home/hermes/.hermes/config.yaml` with model/provider config
|
|
4. Configure code-server with password
|
|
5. Start ttyd and code-server services
|
|
6. Write `/etc/caddy/Caddyfile` with domain, ZeroSSL TLS, basic auth
|
|
7. Start Caddy and wait for cert issuance
|
|
8. Shred the temp env file
|
|
|
|
### Access URLs (after deploy)
|
|
|
|
- **Hermes Terminal:** `https://your-domain.com/` (via ttyd)
|
|
- **VS Code:** `https://your-domain.com/code/`
|
|
- **Basic Auth:** Username `hermes`, password from Vultr metadata
|
|
|
|
### Jenkins parameters
|
|
|
|
| Parameter | Default | Description |
|
|
|---|---|---|
|
|
| `HERMES_VERSION` | `v0.7.0` | Hermes Agent git tag |
|
|
| `VULTR_REGION` | `ewr` | Build region |
|
|
| `VULTR_PLAN` | `vc2-2c-4gb` | Build instance size |
|
|
| `VULTR_OS_ID` | `2284` | Ubuntu 24.04 LTS |
|
|
|
|
### Credentials needed in Jenkins
|
|
|
|
| Credential ID | Type | Purpose |
|
|
|---|---|---|
|
|
| `VULTR_API_KEY` | Secret text | Vultr API key for Packer to provision + snapshot |
|
|
|
|
### Vultr Marketplace Metadata Variables
|
|
|
|
Configure these in the Vultr marketplace app:
|
|
|
|
| Variable | Description |
|
|
|----------|-------------|
|
|
| `app-password` | Password for basic auth and code-server |
|
|
| `app-inf_api_key` | Vultr Inference API key |
|
|
| `app-domain` | Domain for TLS certificate |
|
|
|
|
|
|
## Available Models (Vultr Inference)
|
|
|
|
| Model ID | Context | Notes |
|
|
|----------|---------|-------|
|
|
| `zai-org/GLM-5-FP8` | 200K | Default, reasoning-capable |
|
|
| `deepseek-ai/DeepSeek-V3.2` | 128K | Reasoning-capable |
|
|
| `google/gemma-4-31B-it` | 256K | Reasoning-capable |
|
|
| `Qwen/Qwen2.5-Coder-32B-Instruct` | 131K | Code-focused |
|
|
| `MiniMaxAI/MiniMax-M2.5` | 128K | General purpose |
|
|
| `moonshotai/Kimi-K2.5` | 128K | General purpose |
|
|
|
|
## Manual Installation
|
|
|
|
For manual deploys without Packer, use the standalone installer:
|
|
|
|
```bash
|
|
# Without domain (HTTP only)
|
|
curl -fsSL https://raw.githubusercontent.com/.../install-hermes.sh | bash
|
|
|
|
# With domain (HTTPS via Caddy)
|
|
curl -fsSL https://raw.githubusercontent.com/.../install-hermes.sh | bash -s -- your-domain.com
|
|
```
|
|
|
|
## Services
|
|
|
|
| Service | Port | Description |
|
|
|---------|------|-------------|
|
|
| `ttyd-hermes` | 7681 | Hermes terminal (web) |
|
|
| `code-server-hermes` | 8080 | VS Code (web) |
|
|
| `caddy` | 80/443 | Reverse proxy with auto-HTTPS |
|
|
| `docker` | - | Container runtime |
|
|
|
|
## Notes
|
|
|
|
- ttyd runs as root, drops privileges to hermes user via `-u`/`-g` flags
|
|
- code-server runs as hermes user
|
|
- Homebrew installed at `/home/linuxbrew/.linuxbrew`
|
|
- `HOME` and `PATH` environment variables set in systemd services for brew compatibility
|
|
- Caddyfile uses ZeroSSL primary (avoids LE rate limits), Let's Encrypt fallback
|