NYC
skills/smithery/ai/admin-infra-contabo

admin-infra-contabo

SKILL.md

Contabo Infrastructure

Status: Production Ready | Dependencies: cntb CLI, SSH key pair


Navigation

  • Operations, troubleshooting, config, and cost snapshot: references/OPERATIONS.md

Step 0: Gather Required Information (MANDATORY)

STOP. 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.


Prerequisites

Before using this skill, verify the following:

1. Contabo CLI Installed

cntb --version

If missing, install with:

# Download from GitHub releases
# Linux
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 (PowerShell)
Invoke-WebRequest -Uri "https://github.com/contabo/cntb/releases/latest/download/cntb_windows_amd64.zip" -OutFile cntb.zip
Expand-Archive cntb.zip -DestinationPath .

2. Contabo Account & API Credentials

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:

  • Client ID (OAuth2)
  • Client Secret (OAuth2)
  • API User (your email)
  • API Password (your account password or generated one)

3. cntb CLI Configured

cntb get instances

If it shows an error, configure with:

# Set via environment variables
export CNTB_OAUTH2_CLIENT_ID="your_client_id"
export CNTB_OAUTH2_CLIENT_SECRET="your_client_secret"
export CNTB_OAUTH2_USER="your_api_user"
export CNTB_OAUTH2_PASS="your_api_password"

# Or configure interactively
cntb config set-credentials

4. SSH Key Pair

ls ~/.ssh/id_rsa.pub

If missing, generate with:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""

5. SSH Key Available

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

6. Test Authentication

cntb get datacenters

If this fails: Credentials may be incorrect. Verify at https://my.contabo.com/api/details


Server Profiles

Coolify/Kasm Deployments - BEST VALUE

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

Standard Plans (More Storage)

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.


Deployment Steps

Step 1: Set Environment Variables

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
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: Some product IDs from Contabo documentation may be outdated. V48 and V12 are verified working. Run cntb get products --productType vps for current list.

Step 2: Create Instance

# 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"

Step 3: Get Instance Details

# 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"

Step 4: Wait for Server Ready

# 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!"

Step 5: Verify Connection

ssh root@$SERVER_IP "uname -a && free -h && df -h /"

Step 6: Output for Downstream Skills

# 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"

Verify Deployment

ssh root@$SERVER_IP "echo 'Contabo instance connected successfully'"

Object Storage Auto-Scaling

Contabo supports auto-scaling limits for object storage to control costs.

Create Object Storage with Auto-Scaling

# 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.


Cleanup

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

Operations

Troubleshooting, best practices, configuration variables, and cost snapshots are in references/OPERATIONS.md.


Logging Integration

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.


References

Weekly Installs
2
Repository
smithery/ai
First Seen
13 days ago
Installed on
cursor1
claude-code1