返回 Skill 列表
extension
分类: 开发与工程无需 API Key

contabo

在Contabo上使用Cloud VPS和对象存储部署基础设施。专注于成本效益的资源配置以及Contabo特有的CLI/API特性。当您需要配置Contabo Cloud VPS、设置对象存储或解决Contabo特有的问题时,请使用此功能。关键词:contabo, cntb, VPS, 云计算, 预算托管, 最佳价值, 对象存储, 基础设施

person作者: jakexiaohubgithub

Contabo Infrastructure

CRITICAL: Secrets and .env

  • NEVER store live .env files or credentials inside any skill folder.
  • .env.template files belong only in assets/ within a skill.
  • Store live secrets in ~/.admin/.env and reference from there.

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

Note: The CLI uses cntb version (no --). cntb --version is 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 PowerShell Invoke-WebRequest / Expand-Archive approach may fail due to execution policies.

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-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. The CNTB_OAUTH2_* env vars documented elsewhere are unreliable and may produce clientId is empty errors. The config file approach (~/.cntb.yaml on Linux, %USERPROFILE%\.cntb.yaml on 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

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 |

<details> <summary><strong>Price Comparison - Why Contabo?</strong></summary>

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

</details>

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"
<details> <summary><strong>Region options</strong></summary>

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

</details> <details> <summary><strong>Product ID reference</strong></summary>

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

</details>

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