From admin-devops
Deploys infrastructure on Contabo using Cloud VPS and Object Storage. Focuses on cost‑effective provisioning and Contabo-specific CLI/API quirks. Use when: provisioning Contabo Cloud VPS, configuring Object Storage, or troubleshooting Contabo-specific issues. Keywords: contabo, cntb, VPS, cloud compute, budget hosting, best value, object storage, infrastructure
How this skill is triggered — by the user, by Claude, or both
Slash command
/admin-devops:contaboThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Status**: Production Ready | **Dependencies**: cntb CLI, SSH key pair
Status: Production Ready | Dependencies: cntb CLI, SSH key pair
references/OPERATIONS.mdSTOP. Before ANY deployment commands, collect ALL parameters from the user.
Copy this checklist and confirm each item:
Required Parameters:
- [ ] SERVER_NAME - Unique name for this server
- [ ] CONTABO_REGION - Region (EU, US-central, US-east, US-west, SIN, JPN, AUS)
- [ ] CONTABO_PRODUCT_ID - Product/plan ID (see profiles below)
- [ ] SSH_KEY_PATH - Path to SSH private key (default: ~/.ssh/id_rsa)
Deployment Purpose (determines recommended profile):
- [ ] Purpose: coolify / kasm / both / custom
coolify → V39 (Cloud VPS 10 SP, €5/mo)
kasm → V45 (Cloud VPS 20 SP, €8/mo)
both → V46 (Cloud VPS 30, €14/mo)
custom → Ask for specific product ID
Recommended profiles by purpose:
| Purpose | Product ID | Plan | vCPU | RAM | Monthly |
|---|---|---|---|---|---|
| coolify | V39 | Cloud VPS 10 SP | 4 | 8GB | €5 |
| kasm | V45 | Cloud VPS 20 SP | 6 | 18GB | €8 |
| both | V46 | Cloud VPS 30 | 8 | 24GB | €14 |
DO NOT proceed to Prerequisites until ALL parameters are confirmed.
Before using this skill, verify the following:
cntb version
Note: The CLI uses
cntb version(no--).cntb --versionis not a valid flag.
If missing, install with:
# Linux / WSL
curl -sL https://github.com/contabo/cntb/releases/latest/download/cntb_linux_amd64.tar.gz | tar xz
sudo mv cntb /usr/local/bin/
# macOS
curl -sL https://github.com/contabo/cntb/releases/latest/download/cntb_darwin_amd64.tar.gz | tar xz
sudo mv cntb /usr/local/bin/
# Windows (cmd / Git Bash)
curl -L -o "%TEMP%\cntb.zip" "https://github.com/contabo/cntb/releases/latest/download/cntb_windows_amd64.zip"
unzip -o "%TEMP%\cntb.zip" -d "%TEMP%\cntb-extract"
copy "%TEMP%\cntb-extract\cntb.exe" "%USERPROFILE%\.local\bin\cntb.exe"
Windows note: Ensure the target directory (e.g.
%USERPROFILE%\.local\bin) is on your PATH. The PowerShellInvoke-WebRequest/Expand-Archiveapproach may fail due to execution policies.
If you don't have a Contabo account:
Sign up at: https://contabo.com/?ref=YOUR_REFERRAL_CODE
Disclosure: This is a referral link from the CJ Affiliate program. The skill author may receive $25-$250 commission. Using this link helps support the development of these skills.
Get API Credentials: https://my.contabo.com/api/details
You need:
cntb get instances
If it shows an error, configure with set-credentials (writes to ~/.cntb.yaml):
cntb config set-credentials \
--oauth2-clientid "your_client_id" \
--oauth2-client-secret "your_client_secret" \
--oauth2-user "your_email" \
--oauth2-password 'your_password'
Important: Use
cntb config set-credentials, not environment variables. TheCNTB_OAUTH2_*env vars documented elsewhere are unreliable and may produceclientId is emptyerrors. The config file approach (~/.cntb.yamlon Linux,%USERPROFILE%\.cntb.yamlon Windows) is the only reliable method.
Special characters in password: If your password contains
*,^,!, or other shell metacharacters, wrap it in single quotes to prevent shell expansion.
Verify config was saved:
cntb config view
ls ~/.ssh/id_rsa.pub
If missing, generate with:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
Unlike other providers, Contabo requires you to specify the SSH key during instance creation via the --sshKeys parameter with the actual public key content.
cat ~/.ssh/id_rsa.pub
cntb get datacenters
If this fails: Credentials may be incorrect. Verify at https://my.contabo.com/api/details
| Profile | Plan | vCPU | RAM | Disk | Monthly Cost |
|---|---|---|---|---|---|
coolify | Cloud VPS 10 SP | 4 | 8GB | 100GB | €5 |
kasm | Cloud VPS 20 SP | 6 | 18GB | 150GB | €8 |
both | Cloud VPS 30 | 8 | 24GB | 200GB | €14 |
| Profile | Plan | vCPU | RAM | Disk | Monthly Cost |
|---|---|---|---|---|---|
standard-small | Cloud VPS S | 4 | 8GB | 200GB SSD | €8 |
standard-medium | Cloud VPS M | 6 | 16GB | 400GB SSD | €14 |
standard-large | Cloud VPS L | 8 | 30GB | 800GB SSD | €26 |
standard-xl | Cloud VPS XL | 10 | 60GB | 1600GB SSD | €39 |
| Provider | 6 vCPU, 16-18GB RAM | Monthly Cost |
|---|---|---|
| Contabo VPS 20 SP | 6 vCPU, 18GB | €8 |
| Hetzner CX42 | 8 vCPU, 16GB | €20 |
| DigitalOcean | 8 vCPU, 16GB | $96 |
| Vultr | 6 vCPU, 16GB | $96 |
| Linode | 6 vCPU, 16GB | $96 |
Contabo offers 5-10x better value than most competitors.
export CONTABO_REGION="EU" # EU, US-central, US-east, US-west, SIN, JPN, AUS
export CONTABO_PRODUCT_ID="V48" # See product IDs below (V48 verified working)
export SERVER_NAME="my-server"
| Code | Location | Region |
|---|---|---|
EU | Germany (Nuremberg) | Europe |
US-central | St. Louis, MO | US Central |
US-east | New York | US East |
US-west | Seattle | US West |
SIN | Singapore | Asia |
JPN | Tokyo | Japan |
AUS | Sydney | Australia |
Run cntb get datacenters for full list.
| Product ID | Plan | vCPU | RAM | Disk | Price | Status |
|---|---|---|---|---|---|---|
| V12 | VPS S NVMe | 4 | 8GB | 100GB | €5 | ✅ Verified |
| V48 | VPS M (Cloud VPS 2 SSD) | 6 | 16GB | 400GB | €14 | ✅ Verified |
| V92 | Cloud VPS 10 SSD | 4 | 8GB | 150GB | ~€5 | ✅ Verified |
| V101 | Cloud VPS 40 SSD | 12 | 48GB | 500GB | ~€20 | ✅ Verified |
| V35 | Cloud VPS 1 | 4 | 6GB | 100GB | €4.50 | Untested |
| V39 | Cloud VPS 10 SP | 4 | 8GB | 100GB NVMe | €5 | Untested |
| V45 | Cloud VPS 20 SP | 6 | 18GB | 150GB NVMe | €8 | ⚠️ May not work |
| V46 | Cloud VPS 30 | 8 | 24GB | 200GB | €14 | Untested |
| V47 | Cloud VPS S | 4 | 8GB | 200GB SSD | €8 | Untested |
| V49 | Cloud VPS L | 8 | 30GB | 800GB SSD | €26 | Untested |
| V50 | Cloud VPS XL | 10 | 60GB | 1600GB SSD | €39 | Untested |
Important: Contabo frequently restructures product IDs. Run cntb get products --productType vps for the current list. Verified working (Feb 2026): V12, V48, V92, V101.
# Get the SSH public key content
SSH_KEY_CONTENT=$(cat ~/.ssh/id_rsa.pub)
# Create instance
cntb create instance \
--productId "$CONTABO_PRODUCT_ID" \
--region "$CONTABO_REGION" \
--displayName "$SERVER_NAME" \
--imageId "ubuntu-22.04" \
--sshKeys "$SSH_KEY_CONTENT"
# List instances to get the ID
INSTANCE_ID=$(cntb get instances --output json | jq -r '.[] | select(.displayName=="'"$SERVER_NAME"'") | .instanceId')
echo "Instance ID: $INSTANCE_ID"
# Get instance details
cntb get instance "$INSTANCE_ID"
# Get IP address
SERVER_IP=$(cntb get instance "$INSTANCE_ID" --output json | jq -r '.ipConfig.v4.ip')
echo "SERVER_IP=$SERVER_IP"
# Wait for instance to be running
echo "Waiting for instance to be running..."
while [ "$(cntb get instance "$INSTANCE_ID" --output json | jq -r '.status')" != "running" ]; do
sleep 10
done
echo "Instance is running!"
# Wait for SSH to be available (typically 2-5 minutes for Contabo)
echo "Waiting for SSH to be available..."
until ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@$SERVER_IP "echo connected" 2>/dev/null; do
sleep 10
done
echo "Server is ready!"
ssh root@$SERVER_IP "uname -a && free -h && df -h /"
# Contabo only offers x86 architecture
SERVER_ARCH="amd64"
# Save to .env.local for downstream skills
echo "SERVER_IP=$SERVER_IP" >> .env.local
echo "SSH_USER=root" >> .env.local
echo "SSH_KEY_PATH=~/.ssh/id_rsa" >> .env.local
echo "SERVER_ARCH=$SERVER_ARCH" >> .env.local
echo "COOLIFY_SERVER_IP=$SERVER_IP" >> .env.local
echo "KASM_SERVER_IP=$SERVER_IP" >> .env.local
echo ""
echo "Instance deployed successfully!"
echo " IP: $SERVER_IP"
echo " Arch: $SERVER_ARCH"
echo " SSH: ssh root@$SERVER_IP"
ssh root@$SERVER_IP "echo 'Contabo instance connected successfully'"
Contabo supports auto-scaling limits for object storage to control costs.
# Create object storage bucket
cntb create objectStorage \
--region "$CONTABO_REGION" \
--displayName "my-storage" \
--totalPurchasedSpaceTB 0.5 \
--autoScaling.state enabled \
--autoScaling.sizeLimitTB 2
This allows storage to automatically grow up to 2TB as needed.
Warning: This is destructive and cannot be undone.
# Cancel instance (Contabo uses "cancel" not "delete")
cntb cancel instance "$INSTANCE_ID"
# Note: Cancellation may take effect at end of billing period
# For immediate deletion, contact Contabo support
Troubleshooting, best practices, configuration variables, and cost snapshots are in references/OPERATIONS.md.
When performing infrastructure operations, log to the centralized system:
# After provisioning
log_admin "SUCCESS" "operation" "Provisioned Contabo VPS" "id=$INSTANCE_ID provider=Contabo"
# After destroying
log_admin "SUCCESS" "operation" "Cancelled Contabo VPS" "id=$INSTANCE_ID"
# On error
log_admin "ERROR" "operation" "Contabo deployment failed" "error=$ERROR_MSG"
See admin skill's references/logging.md for full logging documentation.
npx claudepluginhub joshuarweaver/cascade-code-devops-misc-1 --plugin evolv3-ai-vibe-skillsAdvisory skill for Contabo resource planning across regions, instance tiers (VPS, VDS, Storage VPS), and add-ons with Cloud-Init and SSH key strategies. Use for new deployments, region evaluation, or tier comparisons.
Provisions and secures a Hetzner Cloud VPS with Docker, Nginx/Caddy, SSL, and monitoring for application deployment.
Covers Hetzner-specific operations: Cloud vs Robot vs Storage Box, server-type codes, IPv4 cost model, hcloud CLI, Terraform provider, and snapshot/backup/image distinctions.