EQVPS

面向 AI 代理的 Docker Compose:在一台 VPS 上的完整自托管技术栈

2026年9月6日 · 1 分钟阅读 · EQVPS Team

一个 AI 代理很少是单个进程。有代理循环本身、用于记忆的向量存储、一个缓存、通常还有用于状态的数据库,也许还有一个小仪表板。手动运行其中每一个——启动它们、重启后再拉起、记住哪个端口是哪个——很快就烦了。Docker Compose 用一个文件描述整件事,并用一条命令运行它。这就是把代理整洁地放到 VPS 上的复制粘贴技术栈。

如果你只想要不用 Docker 的部署版本,全天候运行 AI 代理指南 讲的是 systemd。本页是容器原生版本。

技术栈

一个典型的自托管代理身边想要四样东西:代理进程、Qdrant(向量记忆)、Redis(缓存/队列)和 Postgres(状态)。这里有一个 docker-compose.yml 运行所有这些,内部服务被挡在公共互联网之外:

# /opt/agent/docker-compose.yml
services:
  agent:
    build: .                      # your agent image (or image: your/agent:latest)
    restart: unless-stopped
    env_file: [.env]              # OPENAI/ANTHROPIC keys etc. — never in this file
    environment:
      QDRANT_URL: http://qdrant:6333
      REDIS_URL: redis://redis:6379
      DATABASE_URL: postgres://agent:${DB_PASSWORD}@postgres:5432/agent
    depends_on: [qdrant, redis, postgres]
    # no ports: — this agent only makes outbound calls. Publish one only if it serves webhooks.

  qdrant:
    image: qdrant/qdrant:latest
    restart: unless-stopped
    volumes: ["qdrant:/qdrant/storage"]   # internal only — not published

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: ["redis-server", "--save", "60", "1"]
    volumes: ["redis:/data"]

  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: agent
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: agent
    volumes: ["pg:/var/lib/postgresql/data"]

volumes: { qdrant: {}, redis: {}, pg: {} }

机密放在 .env 里,不放进 compose 文件:

# /opt/agent/.env  (chmod 600, never committed)
ANTHROPIC_API_KEY=sk-ant-...
DB_PASSWORD=a-long-random-string

拉起它:

apt update && apt install -y docker.io docker-compose-v2
systemctl enable --now docker
cd /opt/agent && docker compose up -d
docker compose logs -f agent

每个内部服务(Qdrant、Redis、Postgres)在 compose 网络里通过服务名可达——没有一个被发布到互联网。代理通过那个私有网络与它们通信,那些端口上没有任何东西面向外界。

真正重要的细节

真正属于我们的部分:代理能自己造机器

因为 EQVPS 提供一个 MCP 服务器,运行这个技术栈的代理可以自行开通另一台干净的 VPS——下单、拿到 root、拆掉——从预付的加密货币余额中付款。一个需要全新沙箱的 compose 技术栈可以在没有人参与的情况下自己拉起一台。

为什么用 EQVPS 跑 Docker 化的代理

面向 AI 代理的 VPS(概览)→ · 面向 Docker 的 VPS → · 为代理记忆托管向量数据库 →

常见问题

为什么用 Docker Compose 运行 AI 代理,而不是裸进程?

代理很少只是一个进程——它是代理循环加上一个向量存储、一个缓存,通常还有一个数据库。Compose 用一个文件描述整个技术栈,用一条命令把它全部拉起,在崩溃或重启后重启每个部件,并把内部服务(Postgres、Redis、Qdrant)留在私有网络里,因此只暴露你选择的部分。这是自托管一个有多个活动部件的代理最整洁的方式。

代理技术栈需要什么套餐?

对于 API 支撑的代理(模型在你的提供商处运行),技术栈很轻——代理循环、Qdrant、Redis 和 Postgres 在我们的 Small(每月 $8)或 AI-Agent 套餐(每月 $10,4 GB)上都很舒适。只有当你在内存里保留一个大型向量索引或运行本地模型时才需要更多内存,那是另一种更重的部署。

API 密钥放哪里——放在 compose 文件里吗?

不。把机密放在 .env 文件里(被 git 忽略),在 compose 里用环境变量引用它们,或使用 Docker secrets。绝不要把密钥提交进 docker-compose.yml。把内部服务只绑定到 compose 网络;只发布代理的端口(如果它只发出出站调用,则什么都不发布)。

容器在重启后会回来吗?

只有你让它们这样做才会。在每个服务上设置 restart: unless-stopped(或 always),并让 Docker 开机自启;这样 docker compose up -d 就能挺过重启和崩溃。没有重启策略,容器在服务器重启后会保持关闭。

你们要 KYC 或银行卡吗?

不要。注册用邮箱,用 USDC 或 USDT 付款——无文件、无卡。大约一分钟拿到 root。

← 返回博客查看套餐与价格 →

评论

暂无评论。来做第一个吧。

发表评论

评论在显示前会经过审核。