mcpField
D
digital-ocean

digital-ocean

github.com/evolv3-ai云与 DevOps140 次安装14 周前更新
代码仓库

关于 digital-ocean

digital-ocean 是通过 doctl 命令行创建和管理 DigitalOcean Droplet 的技能。内容涵盖部署前参数确认、SSH 与防火墙设置、连接验证及资源清理。

主要功能

  1. 01部署前参数清单
  2. 02使用 doctl 创建 Droplet
  3. 03SSH 密钥与防火墙设置
  4. 04服务器就绪及连接检查
  5. 05清理 Droplet 和防火墙

适用场景

  1. 01创建 DigitalOcean 服务器
  2. 02为 Coolify 或 Kasm 准备基础设施
  3. 03验证 Droplet 的 SSH 访问
  4. 04删除 Droplet 和防火墙

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/evolv3-ai/vibe-skills --skill digital-ocean

安装后在 Claude Code 中输入/digital-ocean确认已加载。

附带文件assets/env-templatereferences/OPERATIONS.md

详细介绍

DigitalOcean 基础设施

关键:密钥与 .env

  • 切勿在任何 skill 文件夹中存储有效的 .env 文件或凭据。
  • .env.template 文件只能放在 skill 中的 assets/ 目录下。
  • 将有效密钥存储在 ~/.admin/.env 中,并从该文件中引用。

状态:可用于生产环境 | 依赖项:doctl CLI、SSH 密钥对


导航

  • 操作、故障排除、配置和费用概览:references/OPERATIONS.md

步骤 0:收集所需信息(必须)

暂停。在执行任何部署命令之前,向用户收集所有参数。

复制此清单并确认每一项:

Required Parameters:
- [ ] SERVER_NAME      - Unique name for this server
- [ ] DO_REGION        - Region (nyc1, sfo3, lon1, fra1, sgp1, etc.)
- [ ] DO_SIZE          - Droplet size (see profiles below)
- [ ] SSH_KEY_NAME     - Name of SSH key in DigitalOcean
- [ ] SSH_KEY_PATH     - Path to local SSH private key (default: ~/.ssh/id_rsa)

Deployment Purpose (determines recommended profile):
- [ ] Purpose: coolify / kasm / both / custom
      coolify → s-2vcpu-4gb ($24/mo)
      kasm    → s-4vcpu-8gb ($48/mo)
      both    → s-8vcpu-16gb ($96/mo)
      custom  → Ask for specific size

按用途推荐的配置:

用途规格vCPURAM月费
coolifys-2vcpu-4gb24GB$24
kasms-4vcpu-8gb48GB$48
boths-8vcpu-16gb816GB$96

在确认所有参数之前,请勿继续执行先决条件步骤。


先决条件

使用此 skill 前,请确认以下事项:

1. 已安装 DigitalOcean CLI
doctl version

如果未安装,请使用以下命令安装:

# macOS
brew install doctl

# Linux (snap)
sudo snap install doctl

# Linux (download binary)
cd ~
wget https://github.com/digitalocean/doctl/releases/download/v1.104.0/doctl-1.104.0-linux-amd64.tar.gz
tar xf doctl-1.104.0-linux-amd64.tar.gz
sudo mv doctl /usr/local/bin

# Windows (scoop)
scoop install doctl
2. DigitalOcean 账户和 API 令牌

如果你没有 DigitalOcean 账户:

注册:https://m.do.co/c/YOUR_REFERRAL_CODE

披露:这是一个推荐链接。你将在 60 天内获得 $200 额度,skill 作者也会获得账户额度。使用此链接有助于支持这些 skill 的开发。

获取 API 令牌:https://cloud.digitalocean.com/account/api/tokens

创建具有 Read & Write 权限范围的令牌。

3. 已配置 doctl CLI
doctl account get

如果显示错误,请使用以下命令进行身份验证:

doctl auth init
# Paste your API token when prompted

或者通过环境变量设置:

export DIGITALOCEAN_ACCESS_TOKEN="your_token_here"
doctl account get
4. SSH 密钥对
ls ~/.ssh/id_rsa.pub

如果没有,请使用以下命令生成:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
5. 已将 SSH 密钥上传到 DigitalOcean
doctl compute ssh-key list

如果为空,请使用以下命令上传:

doctl compute ssh-key import my-key --public-key-file ~/.ssh/id_rsa.pub
6. 测试身份验证
doctl compute region list

如果失败:令牌可能无效或已过期。请创建新令牌。


服务配置

Coolify/Kasm 部署
配置Droplet 类型vCPURAM磁盘月费
coolifys-2vcpu-4gb24GB80GB$24
kasms-4vcpu-8gb48GB160GB$48
boths-8vcpu-16gb816GB320GB$96
高级 CPU(性能更高)
配置Droplet 类型vCPURAM磁盘月费
premium-smallc-4-8gib48GB50GB$84
premium-mediumc-8-16gib816GB100GB$168
premium-largec-16-32gib1632GB200GB$336
通用型(最适合混合工作负载)
Droplet 类型vCPURAM磁盘月费
g-2vcpu-8gb28GB25GB$63
g-4vcpu-16gb416GB50GB$126
g-8vcpu-32gb832GB100GB$252

部署步骤

步骤 1:设置环境变量
export DO_REGION="nyc1"                    # See regions below
export DO_SIZE="s-2vcpu-4gb"               # See profiles above
export DO_IMAGE="ubuntu-22-04-x64"
export SERVER_NAME="my-server"
export SSH_KEY_NAME="my-key"
区域选项
代码位置区域
nyc1纽约 1美国东部
nyc3纽约 3美国东部
sfo2旧金山 2美国西部
sfo3旧金山 3美国西部
tor1多伦多加拿大
lon1伦敦英国
ams3阿姆斯特丹荷兰
fra1法兰克福德国
blr1班加罗尔印度
sgp1新加坡亚洲
syd1悉尼澳大利亚
步骤 2:获取 SSH 密钥 ID
SSH_KEY_ID=$(doctl compute ssh-key list --format ID,Name --no-header | grep "$SSH_KEY_NAME" | awk '{print $1}')
echo "SSH Key ID: $SSH_KEY_ID"

# Verify
if [ -z "$SSH_KEY_ID" ]; then
  echo "ERROR: SSH key '$SSH_KEY_NAME' not found. Upload it first."
  exit 1
fi
步骤 3:创建防火墙
# Create firewall
doctl compute firewall create \
  --name my-firewall \
  --inbound-rules "protocol:tcp,ports:22,address:0.0.0.0/0,address:::/0" \
  --inbound-rules "protocol:tcp,ports:80,address:0.0.0.0/0,address:::/0" \
  --inbound-rules "protocol:tcp,ports:443,address:0.0.0.0/0,address:::/0" \
  --inbound-rules "protocol:tcp,ports:8000,address:0.0.0.0/0,address:::/0" \
  --inbound-rules "protocol:tcp,ports:6001-6002,address:0.0.0.0/0,address:::/0" \
  --inbound-rules "protocol:tcp,ports:8443,address:0.0.0.0/0,address:::/0" \
  --inbound-rules "protocol:tcp,ports:3389,address:0.0.0.0/0,address:::/0" \
  --inbound-rules "protocol:tcp,ports:3000-4000,address:0.0.0.0/0,address:::/0" \
  --outbound-rules "protocol:tcp,ports:all,address:0.0.0.0/0,address:::/0" \
  --outbound-rules "protocol:udp,ports:all,address:0.0.0.0/0,address:::/0" \
  --outbound-rules "protocol:icmp,address:0.0.0.0/0,address:::/0"
步骤 4:创建 Droplet
doctl compute droplet create "$SERVER_NAME" \
  --region "$DO_REGION" \
  --size "$DO_SIZE" \
  --image "$DO_IMAGE" \
  --ssh-keys "$SSH_KEY_ID" \
  --tag-names "myproject" \
  --wait
步骤 5:获取 Droplet IP
SERVER_IP=$(doctl compute droplet get "$SERVER_NAME" --format PublicIPv4 --no-header)
echo "SERVER_IP=$SERVER_IP"
步骤 6:将防火墙应用到 Droplet
FIREWALL_ID=$(doctl compute firewall list --format ID,Name --no-header | grep "my-firewall" | awk '{print $1}')
DROPLET_ID=$(doctl compute droplet get "$SERVER_NAME" --format ID --no-header)

doctl compute firewall add-droplets "$FIREWALL_ID" --droplet-ids "$DROPLET_ID"
步骤 7:等待服务就绪
# Wait for SSH to be available (typically 30-60 seconds)
echo "Waiting for server to be ready..."
until ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@$SERVER_IP "echo connected" 2>/dev/null; do
  sleep 5
done
echo "Server is ready!"
步骤 8:验证连接
ssh root@$SERVER_IP "uname -a && free -h && df -h /"
步骤 9:输出供下游 skill 使用
# DigitalOcean 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 "Droplet deployed successfully!"
echo "  IP: $SERVER_IP"
echo "  Arch: $SERVER_ARCH"
echo "  SSH: ssh root@$SERVER_IP"

验证部署

ssh root@$SERVER_IP "echo 'DigitalOcean Droplet connected successfully'"

Kasm Workspaces 自动扩缩容

DigitalOcean 与 Kasm Workspaces 原生集成,可自动配置 Agent。

在 Kasm 管理后台启用
  1. 前往 基础设施 → 资源池 → 编辑资源池
  2. 启用 Digital Ocean Scaling Enabled
  3. 配置:
    • DO API Key:你的 DigitalOcean API 令牌
    • DO Region:新 Agent 所在的区域
    • DO Droplet Size:自动配置的 Droplet 规格
    • DO SSH Key ID:你的 SSH 密钥 ID
工作原理
  • 用户需求增加时,Kasm 会自动配置新的 Droplet
  • 不再需要时会销毁 Droplet
  • 确保资源利用率和成本效益

清理

警告:此操作具有破坏性,且无法撤销。

# Delete droplet
doctl compute droplet delete "$SERVER_NAME" --force

# Delete firewall
FIREWALL_ID=$(doctl compute firewall list --format ID,Name --no-header | grep "my-firewall" | awk '{print $1}')
doctl compute firewall delete "$FIREWALL_ID" --force

# Optionally delete SSH key
# doctl compute ssh-key delete "$SSH_KEY_ID" --force

运维

故障排查、最佳实践、配置变量和成本快照见 references/OPERATIONS.md。


日志集成

执行基础设施操作时,请将日志写入集中式系统:

# After provisioning
log_admin "SUCCESS" "operation" "Provisioned DigitalOcean droplet" "id=$DROPLET_ID provider=DigitalOcean"

# After destroying
log_admin "SUCCESS" "operation" "Deleted DigitalOcean droplet" "id=$DROPLET_ID"

# On error
log_admin "ERROR" "operation" "DigitalOcean deployment failed" "error=$ERROR_MSG"

完整的日志文档请参见 admin 技能的 references/logging.md。


参考资料

评论

支持 Markdown