mirror of
https://github.com/OpenRouterTeam/spawn.git
synced 2026-05-05 23:50:48 +00:00
Replace unsafe '$var' bash string interpolation inside Python code with
sys.argv parameter passing across 9 cloud provider libs. This eliminates
a class of potential injection bugs where values containing single quotes
could break the Python string context.
Affected functions:
- binarylane: _binarylane_build_server_body
- contabo: _contabo_build_instance_body
- digitalocean: _build_droplet_request_body
- hostinger: _hostinger_build_create_body
- ionos: ionos_register_ssh_key, _ionos_create_datacenter,
_ionos_build_volume_body, _ionos_build_server_body
- linode: _linode_build_create_payload
- ovh: ovh_register_ssh_key, _ovh_find_flavor_id,
_ovh_get_ssh_key_id, _ovh_build_instance_body
- upcloud: _build_upcloud_server_body
- vultr: _vultr_build_instance_body
This aligns with the pattern already used by cherry, scaleway, netcup,
and ramnode providers.
Agent: complexity-hunter
Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| lib | ||
| aider.sh | ||
| amazonq.sh | ||
| claude.sh | ||
| cline.sh | ||
| codex.sh | ||
| continue.sh | ||
| gemini.sh | ||
| goose.sh | ||
| gptme.sh | ||
| interpreter.sh | ||
| kilocode.sh | ||
| nanoclaw.sh | ||
| openclaw.sh | ||
| opencode.sh | ||
| plandex.sh | ||
| README.md | ||
Contabo Cloud
Deploy AI agents on Contabo - a budget-friendly European VPS provider with affordable CPU instances starting at $4.95/month.
Why Contabo?
- Budget-friendly: VPS plans starting at $4.95/month
- European provider: Multiple European data centers (Germany, UK, etc.)
- Full root access: Complete control over your instances
- REST API: Full API support for automation
- Cloud-init support: Easy provisioning with user_data
- Fast provisioning: Instances typically ready in 2-5 minutes
Prerequisites
API Credentials
Get your API credentials from the Contabo Customer Control Panel:
- Log in to https://my.contabo.com
- Navigate to API → API Details
- Note down all 4 required values:
- Client ID: OAuth2 client identifier
- Client Secret: OAuth2 client secret
- API User: Your API username (email)
- API Password: Your API password
Set them as environment variables:
export CONTABO_CLIENT_ID="your_client_id"
export CONTABO_CLIENT_SECRET="your_client_secret"
export CONTABO_API_USER="your_api_user@example.com"
export CONTABO_API_PASSWORD="your_api_password"
Or the script will prompt you interactively and save them to ~/.config/spawn/contabo.json.
SSH Key
The scripts will automatically:
- Generate an SSH key at
~/.ssh/spawn_ed25519(if it doesn't exist) - Register it with Contabo as a secret
- Use it to access your instances
Usage
Deploy Claude Code
bash <(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/contabo/claude.sh)
Deploy Aider
bash <(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/contabo/aider.sh)
Deploy OpenClaw
bash <(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/contabo/openclaw.sh)
Environment Variables
Required (if not set, you'll be prompted):
CONTABO_CLIENT_ID- OAuth2 client ID from Contabo API detailsCONTABO_CLIENT_SECRET- OAuth2 client secretCONTABO_API_USER- API username (email address)CONTABO_API_PASSWORD- API password
Optional:
CONTABO_SERVER_NAME- Instance display name (default: prompt)CONTABO_PRODUCT_ID- VPS product ID (default:V45= 2 vCPU, 8GB RAM)CONTABO_REGION- Region code (default:EU)CONTABO_IMAGE_ID- OS image (default:ubuntu-24.04)CONTABO_PERIOD- Billing period in months (default:1)OPENROUTER_API_KEY- Your OpenRouter API key (or use OAuth)
Common Product IDs
| Product ID | vCPUs | RAM | Disk | Price/month |
|---|---|---|---|---|
| V8 | 4 | 6 GB | 50 GB | ~$6.99 |
| V45 | 2 | 8 GB | 100 GB | ~$8.99 |
| V16 | 6 | 16 GB | 400 GB | ~$14.99 |
| V32 | 8 | 30 GB | 800 GB | ~$26.99 |
Check Contabo VPS pricing for current rates.
Available Regions
EU- European data centers (Germany, UK)US-east- US East CoastUS-central- US CentralUS-west- US West CoastSIN- Singapore
How It Works
-
Authentication: Uses OAuth2 password grant flow
- Exchanges client credentials + user credentials for an access token
- Token is cached for the session
- API calls include
Authorization: Bearer <token>header
-
SSH Key Management:
- Registers your SSH public key as a Contabo secret
- Includes the secret ID in instance creation request
- Root access is enabled by default
-
Instance Provisioning:
- Creates instance via
POST /v1/compute/instances - Includes cloud-init userData for agent installation
- Polls instance status until "running"
- Extracts public IPv4 address
- Creates instance via
-
Agent Setup:
- Waits for SSH connectivity
- Waits for cloud-init to complete
- Verifies agent installation (or installs manually)
- Injects OpenRouter API key
- Starts interactive session
Pricing
Contabo offers monthly billing (not hourly):
- Minimum commitment: 1 month
- Billed monthly in advance
- No prorated refunds for early termination
- Unlimited traffic included
Example costs:
- VPS S (V45): 2 vCPU, 8GB RAM → ~$8.99/month
- VPS M (V16): 6 vCPU, 16GB RAM → ~$14.99/month
Check current pricing on their website.
Troubleshooting
Authentication Errors
If you see "Failed to obtain Contabo OAuth token":
- Verify all 4 credentials are correct
- Check API user has API access enabled
- Ensure API password is set (not your login password)
- Visit https://my.contabo.com/api/details to verify
Instance Creation Fails
Common issues:
- Insufficient balance: Add funds to your account
- Account limits: Contact support to increase limits
- Product unavailable: Try different
CONTABO_PRODUCT_IDorCONTABO_REGION
SSH Connection Timeout
- Contabo instances can take 2-5 minutes to provision
- Check instance status in Customer Control Panel
- Verify SSH key was registered correctly
- Check firewall settings allow SSH (port 22)
Cloud-init Not Completing
- Check
/var/log/cloud-init-output.logon the instance - Verify image supports cloud-init (default Ubuntu images do)
- May need to wait longer (use higher timeout)
API Documentation
- Official API docs: https://api.contabo.com/
- Customer Control Panel: https://my.contabo.com/
- API Details: https://my.contabo.com/api/details
Notes
- Contabo uses monthly billing, not hourly/per-second like many other clouds
- Budget-friendly but less flexible than pay-per-hour providers
- Good for long-running development environments or stable workloads
- European data centers make it GDPR-friendly
- Full root access on all VPS instances
- Unlimited traffic included in all plans