在 DigitalOcean Droplet 上部署 AI 智能体(2026)
2026 年 DigitalOcean Droplet 自托管 AI 智能体完整教程:机型选择、Cloud Firewall、Docker、Telegram 与真实成本核算。
为什么大家都跑到 DigitalOcean 上跑 AI 智能体
一旦你决定自托管一个 AI 智能体,早晚会遇到同一个三选一:Hetzner、AWS EC2,还是 DigitalOcean。三家的用户画像完全不同。Hetzner 吸引的是欧洲的成本优化派。AWS 吸引的是"我们公司本来就在用"的那批人。DigitalOcean 吸引的是独立 SaaS 开发者:想要一台干净的 Ubuntu 机器、一个体面的控制台、一份官方 1-Click Docker 镜像,以及一份不假设你身份的文档。
DigitalOcean 在这个小圈子里出现得特别多,还有一个原因:DigitalOcean Community 有一整套关于 AI 智能体的教程,Marketplace 里也有越来越多的 1-Click 镜像(Docker Agent、Ollama,以及一批对智能体友好的基础镜像),把安装的第一小时缩短了不止一半。如果你的智能体运行时本身就是容器发布的,"把智能体跑起来"的战役其实已经赢了一半。
这份指南写给已经选定 DigitalOcean 的你:想把一个自托管的 AI 智能体真正上线(Hermes Agent、带 LLM 节点的 n8n 工作流、OpenAI Assistants 代理,凡是从长期在线的服务器上调用模型 API 的东西都算),并且不打算跳过那些凌晨三点最重要的细节。选型、加固、Docker Compose、一次 Telegram 联通测试,还有一份诚实的"迟早会出问题"清单。
如果你还在几家 VPS 之间摇摆,可以先看我们的 Hetzner 部署指南 和 便宜 VPS 对比。这篇假设你选的就是 DigitalOcean。
第一步:选对 Droplet
2026 年 DigitalOcean 的共享 CPU 机型在创建 Droplet 页面上分成三组:
- Regular Intel —— 经典共享 vCPU,最老,性价比最低
- Premium Intel / Premium AMD —— 更新的芯片,单线程更快
- Basic AMD(秒级计费) —— 目前小型服务的最佳选择
对于一个由 API 驱动的智能体(调用 OpenAI、Anthropic、OpenRouter 或你自己的 Ollama,把工具调用留在本地编排),模型推理是在提供方那边跑的。Droplet 只需要跑智能体进程、一个 Telegram 网关和 Docker 守护进程,CPU 用量并不高,真正的瓶颈是内存。
| 机型 | vCPU | 内存 | NVMe | 价格 | 结论 |
|---|---|---|---|---|---|
| s-1vcpu-512mb-10gb | 1 | 512 MB | 10 GB | 4 美元/月 | 太紧,第一个 skill 加载时就 OOM |
| s-1vcpu-1gb | 1 | 1 GB | 25 GB | 6 美元/月 | 纯 API 调用的轻量智能体够用 |
| s-1vcpu-2gb | 1 | 2 GB | 50 GB | 12 美元/月 | 单智能体可以,加第二个服务就没余地 |
| s-2vcpu-4gb-amd | 2 | 4 GB | 80 GB | 28 美元/月 | 推荐默认:智能体 + 记忆 + Playwright + 反向代理 |
| s-2vcpu-4gb(Intel) | 2 | 4 GB | 80 GB | 24 美元/月 | 同规格,老 CPU |
DigitalOcean 从 2026 年 1 月 1 日起改为按秒计费(最少 60 秒),所以拿一台 Droplet 起来测试、当天下午就销毁,只花几分钱,而不是一个月的费用。每台 Droplet 都包含一定流量额度(6 美元档 1 TB,24-28 美元档 4 TB),对于一个主要转发聊天消息的智能体已经绰绰有余。
建议:从 s-2vcpu-4gb-amd 起步。两核 vCPU 加 4 GB 内存足以留出余地给智能体、一个小的 IMAP 轮询任务、一个 headless 浏览器 skill 以及一个反向代理,也不会在记忆后端第一次刷盘时被 OOM 打脸。如果你的唯一负载就是一个走云模型的聊天智能体,6 美元的 s-1vcpu-1gb 档确实够用。
同时跑 Docker、记忆卷和 Telegram 网关时,别用 4 美元档,一周之内就会跨过 OOM 线。
第二步:SSH 进去之前先把 Droplet 锁死
这是最容易被跳过、最后又最痛的一步。DigitalOcean 的 Cloud Firewall 工作在 hypervisor 层,包还没到 VM 就已经被过滤了。请在 Droplet 启动之前就配好它,让机器永远不会在你没想开的端口上收包。
打开 DigitalOcean 控制台,进入 Networking > Firewalls > Create Firewall。入站规则:
- SSH(TCP 22) 只允许 My IP(如果你有固定的办公室 IP,可以给一个小 CIDR)
- HTTP(TCP 80) 来自 All IPv4, All IPv6(仅当你要跑反向代理时)
- HTTPS(TCP 443) 来自 All IPv4, All IPv6(仅当你需要 HTTPS webhook 或 Web UI 时)
- ICMP 来自 All IPv4, All IPv6(保证监控 ping 能打通)
出站保持默认 —— 智能体需要访问模型 API。创建 Droplet 时就把这个防火墙挂上,不要先建机器再补防火墙。
想要更硬的方案,可以彻底把 22 端口对外关掉,通过 Tailscale 进入。DigitalOcean 有 Tailscale 的 1-Click 镜像,Tailscale 官方文档里也有"永久关闭 22 端口"的完整流程。Cloud Firewall 会在边界把 SSH 扫描全部丢掉,你的 fail2ban 和日志都不会被打扰。
创建 Droplet 时选择 Ubuntu 24.04 LTS,粘贴 SSH 公钥,挂上防火墙,点 Create。Droplet 起来以后用 root 登录 SSH,马上做四件事:
# 1. 打补丁
apt update && apt upgrade -y && apt install -y ufw fail2ban unattended-upgrades
# 2. 创建非 root 用户
adduser --disabled-password --gecos "" agent
usermod -aG sudo agent
mkdir -p /home/agent/.ssh && cp ~/.ssh/authorized_keys /home/agent/.ssh/
chown -R agent:agent /home/agent/.ssh && chmod 600 /home/agent/.ssh/authorized_keys
# 3. 锁死 SSH
sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart ssh
# 4. 主机防火墙(UFW),与 Cloud Firewall 冗余但作为安全网
ufw default deny incoming && ufw default allow outgoing
ufw allow OpenSSH && ufw allow 80/tcp && ufw allow 443/tcp
ufw --force enable
然后启用无人值守安全更新和 fail2ban:
dpkg-reconfigure -plow unattended-upgrades # 选 Yes
systemctl enable --now fail2ban
退出 root,改用 agent 登录,从这里继续。
第三步:装 Docker(或直接用 1-Click 镜像)
有两条路。
路径 A:在纯净 Ubuntu 上装 Docker。 标准做法,一行命令,处处能用:
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker agent
newgrp docker
docker run --rm hello-world
路径 B:使用 DigitalOcean Marketplace 的 Docker 镜像。 在创建 Droplet 的页面里选 Marketplace > Docker(Ubuntu 24.04 预装 Docker)。跳过安装环节,直接得到一份预配置好的环境,结果一样,只是少打一条命令。
如果你用的运行时在 DigitalOcean 上有官方 1-Click 镜像(Docker Agent、Ollama,以及越来越多的智能体运行时都有),你甚至可以再进一步:直接用它,之后只需要 Compose 上自己的 env 文件和数据卷。
第四步:用 Docker Compose 部署智能体
创建 ~/agent/docker-compose.yml。下面的例子是通用的,把镜像换成你用的运行时即可。
services:
agent:
image: ghcr.io/your-runtime/agent:latest
container_name: agent
restart: unless-stopped
env_file: .env
volumes:
- ./data:/data
- ./skills:/skills
- ./memory:/memory
ports:
- "127.0.0.1:8080:8080" # Web UI 仅绑定到 localhost
然后是 ~/agent/.env:
# 模型提供方(BYOK - 自带密钥)
OPENAI_API_KEY=sk-...
# 或 ANTHROPIC_API_KEY / OPENROUTER_API_KEY
# 消息网关
TELEGRAM_BOT_TOKEN=...
TELEGRAM_ALLOWED_USERS=12345678
# 持久化
DATA_DIR=/data
MEMORY_DIR=/memory
chmod 600 .env,让机器上的其他用户读不到你的密钥,然后启动:
docker compose up -d
docker compose logs -f agent
restart: unless-stopped 让智能体在 Droplet 重启后自动回来(DigitalOcean 有时会因为维护重启机器)。
挂一个持久化 Volume
Droplet 的系统盘足够跑容器,但智能体的状态(记忆文件、skill、对话历史)应该放到独立的 DigitalOcean Volume 上。它能挺过 Droplet 销毁,可以单独做快照,也能在你换机型时挂到新的 Droplet 上。
在控制台里:Volumes > Create > 10 GB > attach to your Droplet。然后在机器上:
sudo mkdir -p /mnt/agent-state
sudo mount -o discard,defaults,noatime /dev/sda /mnt/agent-state
echo '/dev/sda /mnt/agent-state ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
sudo chown agent:agent /mnt/agent-state
把 docker-compose.yml 里的 ./data、./skills、./memory 指向 /mnt/agent-state 下的子目录。10 GB 的 Volume 大约 1 美元/月。
第五步:接上 Telegram 并测试
如果 Telegram 是你的消息渠道(多数自托管用户都会落到这里,因为 Bot API 免费且即时),测试循环很短:
- 找 @BotFather 聊天,运行
/newbot,把 token 存到.env。 - 找 @userinfobot 拿到你的 Telegram 数字用户 ID,写进
TELEGRAM_ALLOWED_USERS。 docker compose restart agent。- 打开你的新 bot,发一句"你好"。
正常几秒钟内就有回应。如果没有,docker compose logs -f agent 通常会直接指出问题:缺 token、允许用户 ID 写错,或者模型提供方返回了 401。
想更深入地了解 Telegram 侧(群组、话题、语音模式、故障排查),请看 如何在 Telegram 上构建 AI 智能体。
第六步:备份与监控
两个便宜到不能不做的习惯,第一次出事就回本:
- DigitalOcean Backups 或 Snapshots。 Backups 每周自动,保留四周,价格是 Droplet 的 20%。Snapshots 手动触发,按 GB 计费(大约 0.05 美元/GB/月)。最起码,在每次
docker compose pull之前打一个标记为 "before-update" 的 snapshot。 - 一个 uptime ping。 BetterStack、UptimeRobot,或者 DigitalOcean 自家的 Uptime 都行。让它每 5 分钟打一次
https://your-domain/health(或者一个 TCP 检查)。Telegram 长轮询第一次在凌晨三点掉线的时候,你能在午饭前发现,而不是午饭时才发现。
至于 Volume 上智能体自己的状态,一行 cron 把 /mnt/agent-state 打包成 /var/backups/agent-$(date +%F).tar.gz,再用 rsync 把包同步到 DigitalOcean Spaces(S3 兼容,入门套餐 5 美元/月)就够了。Spaces 按对象存储价格保存这些 tarball,比"再挂一台 Droplet"便宜得多。
第七步:升级
每周一次,先打好 snapshot:
cd ~/agent
docker compose pull
docker compose up -d
docker image prune -f
通常不到一分钟。如果新镜像有问题,从控制台把 snapshot 恢复回去。你唯一会丢的是从 snapshot 到现在之间写入的数据,它们都在记忆 Volume 里。
迟早会坏的那些东西
一份诚实、与厂商无关、经受过时间考验的清单:
- Telegram 长轮询会在网络抖动时掉线。多数运行时会自己重连;如果你的不重连,就靠 uptime ping 兜底。
docker compose pull :latest有时会带来破坏性配置改动。 生产环境请把镜像 tag 固定到具体版本。- 模型提供方会对你限流,智能体就默默不响应,也没有明显错误。请把提供方客户端的 HTTP 状态码记进日志。
- 系统盘会被撑满,通常是某个 skill 往
/tmp里写但不轮转。du -sh /*和docker system df应该是你的肌肉记忆。这也正是为什么持久化状态要放在 Volume 上。 - 加新服务时你会忘了改防火墙。Cloud Firewall 和 UFW 都需要开对应端口,否则你会花 20 分钟从错误的方向调试 "connection refused"。
这些问题都和 DigitalOcean 无关,是自己运维的成本。
一笔真实账单
一个小规模生产环境跑在 DigitalOcean 上的大概月费用,2026 年年中:
- Droplet(s-2vcpu-4gb-amd):28 美元
- 10 GB Volume:1 美元
- Weekly Backups:约 5.60 美元
- Spaces(异地备份,250 GB 存储 / 1 TB 流量):5 美元
- Uptime ping:0 美元(免费套餐)
合计大约 40 美元/月,就能在 DigitalOcean 上得到一台备份、监控、隔离都到位的 AI 智能体主机。同样的配置在 Hetzner 大约是 8-10 美元/月(欧盟区、可比 CPU、含 20 TB 流量),在 AWS EC2 上加上 EBS 和数据出站费之后大约要 60-80 美元/月。DigitalOcean 稳稳地落在中间,多出来的钱买的是精致度、文档、1-Click 镜像,以及不用去研究计费档位的省心。
VPS 这笔账不划算时
如果上面的步骤读起来让你觉得有意思,那这正是 DigitalOcean 擅长的工作流:清爽的控制台、一键镜像、一堆"如何跑 X"的教程。
如果读起来像在压榨你的周末,账算法就变了。托管方案用一小笔月费和一个周日下午的时间,换到一个已经包含 Telegram 网关、面向你自己模型提供方的 BYOK、持久化记忆、快照和"你睡觉时它一直在线"的现成环境。我们那篇 托管 vs 自托管指南 把这本账连同你时间的价值都算了个明白。
如果想走托管路线,开始使用 Hermify:约一分钟就能得到一台跑在生产基础设施上的 Hermes Agent,不需要配 Cloud Firewall,也不用挂 Volume。想在 DigitalOcean 上自己动手,这篇指南应该能把你送到终点。
参考资料
- How To Build a Multi-Agent AI System with Docker Agent - DigitalOcean
- Docker Agent 1-Click - DigitalOcean Marketplace
- AI Agents category - DigitalOcean Marketplace
- Droplet Pricing 2026 - DigitalOcean
- DigitalOcean vs Hetzner Cloud 2026 - Better Stack
- SSH Access Through Tailscale Behind a Cloud Firewall - KBeezie
- Using DigitalOcean Droplets as Ephemeral Sandboxes for AI Agents - dev.to