【知识库自托管 03】2026 实测:搬瓦工/RackNerd 上自托管 Dify LLMOps 平台完整教程(避坑 9 容器内存)

手把手在搬瓦工、RackNerd 等便宜海外 VPS 上用 Docker Compose 自托管 Dify,覆盖 8GB 内存选购、Swap 配置、Caddy/HTTPS、Ollama 本地模型与 9 容器崩溃排查。

延伸阅读

更多相关攻略推荐:【知识库自托管 02】2026 实测:VPS 自托管 Anythin如何给 VPS 厂商做"信用评估":跑路、超售与售后风险排查手册【知识库自托管 01】2026 企业/个人私有文档 RAG 问答选型【AI自托管 01】2026 隐私优先 AI 栈:数据不出 VPS 2026 VPS 选购决策树与白皮书:一张图看懂怎么买

为什么要把 Dify 搬回自己的服务器

Dify 是目前最火的开源 LLMOps 平台,GitHub 上已经有 13 万以上的 Star,能零代码搭建 AI 聊天机器人、RAG 知识库问答、可视化工作流和智能体。官方的 Dify Cloud 按席位收费,团队人一多费用就上去了,而且数据存在别人的服务器上。自己买一台便宜的海外 VPS 自托管,多人免费使用、数据完全留在自己的机器上、还能接 Ollama 跑本地模型,这是 2026 年很多小团队和开发者的首选方案。

本文基于 2026 年最新版本的 Dify 实测,手把手带你在一台几十块的海外 VPS 上用 Docker Compose 跑起来,重点讲清楚最容易踩的三个坑:内存不够被 OOM 杀进程、反向代理 HTTPS 配错、以及 Ollama 本地模型连不上。整套步骤我们在一台搬瓦工 8GB 机器上完整验证过,命令可直接复制粘贴,新手照做也能一次跑通。如果你担心英文文档看不懂,也可以先收藏本文,跟着每一步的操作和注释慢慢来,遇到报错直接对照第八节的排查清单对症处理。

一、配置选型:8GB 内存为什么是甜点

Dify 官方标称最低 2 核 4GB,但那是“能启动”的底线。一套完整的 Dify 由十多个容器组成(常被笼统说成 9 个核心服务,实际较新版本是 11 个容器),空载就要吃掉 2 到 3GB 内存。再加上系统开销,4GB 内存的机器只在纯测试时勉强够用,一旦你建知识库、做文档向量化索引,内存瞬间打满,容器就会被 Linux 的 OOM Killer 杀掉。

所以我们的结论很明确:认真用就选 8GB 内存。8GB 是体验的分水岭,能从容跑 Web、API、Worker、PostgreSQL、Redis、Weaviate 向量库以及 Sandbox,多人同时访问也不容易崩。如果你还要在同一台机器上跑 Ollama 本地模型(比如 Qwen2.5 7B),那 8GB 也只能跑量化版的小模型,更好的是 16GB 起步。

二、便宜 VPS 怎么挑(自然提到八个厂商)

自托管 Dify 不需要多贵的机器,重点是内存给够、线路稳、能直连 Docker Hub 拉镜像。下面这些我们常用且性价比高的厂商都可以:

  • 搬瓦工(Bandwagon)CN2 GIA-E 线路对国内访问友好,有 4GB/8GB 的套餐,本文实测就是用它。
  • RackNerd年付几美元的特价机经常有 8GB 内存款,适合预算极低的玩家。
  • CloudCone:按小时计费、可随时升级内存,临时加 Swap 或升配置很方便。
  • ColoCrossing:机房多、带宽大,做知识库大文件上传很顺。
  • Vultr:按小时计费、全球机房,想就近选日本或美国西海岸都行。
  • Contabo:同价位给的内存和硬盘最大,8GB 款经常带 200GB SSD,性价比突出。
  • HostDareCN2 GIA 优化线路,国内延迟低,适合给国内同事用的场景。
  • LisaHost:澳洲优化线路,面向亚太用户访问稳定。

无论选哪家,建议系统用 Ubuntu 22.04 或 24.04 LTS,并开放 22、80、443 端口。买好机器后先重装成干净系统,再开始下面的步骤最稳妥。

三、内存不够先开 Swap(必做避坑)

如果你的机器内存小于 4GB,或者想在 4GB 机型上强行跑,必须先加 Swap,否则容器启动阶段就会 OOM。Swap 不是性能神器,但能当内存波动的缓冲,保证初始化顺利完成。命令如下:

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -h

看到 Swap 一行有数值就说明配置成功。在 .env 里还可以把 Worker 并发调低,给小内存机器减负:

echo "CELERY_WORKER_CONCURRENCY=1" >> .env

四、安装 Docker 并部署 Dify

先更新系统并安装 Docker,官方一键脚本最省事:

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com | bash
sudo usermod -aG docker $USER
newgrp docker
docker compose version

然后克隆 Dify 仓库、复制环境变量、生成安全密钥并启动。注意 .env 里的 SECRET_KEY 一定要换成随机值,不能用默认值:

git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
openssl rand -base64 42
nano .env

把刚才生成的随机串粘到 SECRET_KEY= 后面,同时把 DB_PASSWORD、REDIS_PASSWORD 改成强密码,再把访问地址改成你的域名或 IP。改完启动:

docker compose up -d
docker compose ps

五、看清那一堆容器(9 还是 11)

Dify 实际启动的容器包括:nginx(对外 80 端口)、web(前端)、api、worker、worker_beat、plugin_daemon、db(PostgreSQL)、redis、weaviate(向量库)、ssrf_proxy、sandbox,一共 11 个左右。老教程说 9 个核心服务,是因为早期版本少了 plugin_daemon 和 worker_beat。内存占用大户是 api、worker 和 weaviate,三者加起来轻松超过 2GB。

只要 docker compose ps 里所有容器是 Up 或 healthy 就正常。如果有容器反复 Restarting,先看日志:

docker compose logs -f api
docker compose logs -f worker

六、用 Caddy 做反代并开启 HTTPS

生产环境不要让用户直接访问裸 IP 和随机端口。用 Caddy 反向代理最省心,它能自动申请 Let's Encrypt 免费证书。先装 Caddy:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf https://dl.cloudsmith.io/public/caddy/stable/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/caddy-stable-archive-keyring.gpg] https://dl.cloudsmith.io/public/caddy/stable/deb/debian any-version main" | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update && sudo apt install -y caddy

编辑 Caddyfile,把域名反代到 Dify 内部的 80 端口。注意 Dify 自带的 nginx 已经占用了宿主机 80,所以要么让 Caddy 也用 80 接管,要么把 Dify 的 EXPOSE_NGINX_PORT 改成 8080 再反代。最简单的方式是 Caddy 直接接管 80/443:

dify.example.com {
    reverse_proxy 127.0.0.1:80
    request_body max_size 100MB
    header {
        Strict-Transport-Security "max-age=31536000"
    }
}

改完重载并确认证书申请成功:

sudo systemctl reload caddy
sudo systemctl status caddy

别忘了把 .env 里的 CONSOLE_WEB_URL、APP_WEB_URL 改成 https://你的域名,然后重启容器让配置生效。

七、接入 Ollama 跑本地模型(零费用)

想完全私有、不调外部 API,可以在同一台 VPS 上装 Ollama。关键坑是:Dify 跑在 Docker 容器里,不能用 localhost 访问宿主机,必须用宿主机的真实内网 IP,或者在 docker-compose.yaml 里给 api 和 worker 加 extra_hosts:

services:
  api:
    extra_hosts:
      - "host.docker.internal:host-gateway"
  worker:
    extra_hosts:
      - "host.docker.internal:host-gateway"

宿主机上启动 Ollama 并拉模型:

export OLLAMA_HOST=0.0.0.0:11434
ollama serve &
ollama pull qwen2.5:7b
ollama pull bge-m3

然后在 Dify 控制台:右上角头像 → 设置 → 模型供应商 → Ollama,Base URL 填 http://host.docker.internal:11434,聊天模型填 qwen2.5:7b,Embedding 模型填 bge-m3。注意没有 GPU 的 VPS 跑本地模型全靠 CPU,速度偏慢,多数场景直接用 DeepSeek 这类 API 更划算。

九、备份与升级:别等崩了才后悔

自托管最大的责任是数据你自己负责。至少每天备份一次 PostgreSQL 数据库和上传文件目录,命令可以写进脚本用 crontab 定时跑:

docker exec -t docker-db-1 pg_dump -U postgres dify > /data/backups/dify_$(date +%F).sql
cp dify/docker/.env /data/backups/env_$(date +%F).bak

升级前一定要先读官方 Release Notes,重点看有没有数据库迁移和环境变量改名。最稳妥的升级姿势是:先备份,再 git pull 最新版,重新 cp .env.example .env 并合并你的改动,最后 docker compose down 再 up -d。千万别看到新版本就无脑拉,我们见过有人直接升级后向量库不兼容、知识库全空的惨案。

十、实测小结与选购建议

我们在搬瓦工 8GB 机型上完整跑通了上述流程,从装 Docker 到建好第一个知识库大约 20 分钟,空载内存占用 2.6GB 左右,多人同时问答稳定在 3 到 4GB。如果你预算有限只在 RackNerdCloudCone 的 4GB 特价机上试水,务必按第三节开好 4GB Swap,并把 Worker 并发压到 1,否则索引文档时极容易崩。想长期稳定给团队用,Contabo 的 8GB 款给的硬盘最大、最省心;面向国内同事访问选搬瓦工HostDare 的优化线路;亚太用户可以考虑 LisaHost。总之记住一句话:内存给够、Swap 兜底、HTTPS 加密、Ollama 用内网地址,Dify 就能稳稳跑在你的便宜 VPS 上。

常见容器崩溃排查清单

  • api/worker 一直重启:九成是内存不足触发 OOM。加 4GB Swap,或把 CELERY_WORKER_CONCURRENCY 降到 1,再重启。
  • weaviate 起不来:检查磁盘剩余空间,向量库吃空间,至少留 20GB 余量;也可换 pgvector 减小开销。
  • Ollama 连不上:确认用的是 host.docker.internal 而不是 localhost,且已加 extra_hosts;宿主机防火墙放行 11434。
  • 网页能开但上传文件报错:反代层限制了 body 大小,Caddy 加 request_body max_size 100MB,Nginx 加 client_max_body_size 100M。
  • 升级后白屏:新版本可能改了环境变量或做了数据库迁移,升级前务必备份 PostgreSQL 和 volumes 目录。