在 Cloudflare + 自有 VPS 上跑 Chatwoot + Dify
用 Cloudflare 做 DNS / WAF / 隧道,VPS 跑核心服务,全套从零到上线大约 90 分钟。
Cloudflare + VPS (Hetzner / DigitalOcean / Vultr) 90 分钟
准备清单#
- 一台 4C8G VPS(Ubuntu 24.04)
- 域名托管在 Cloudflare(如
support.yourdomain.com、dify.yourdomain.com) - LLM 提供商的 API Key(OpenAI / Anthropic / 通义等)
步骤 1:装 Docker & Compose#
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
步骤 2:用 Cloudflare Tunnel 暴露服务#
不直接开放公网 80/443,所有流量经 Cloudflare Tunnel:
docker run -d --name cloudflared --network host \
cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <YOUR_TOKEN>
在 Cloudflare Zero Trust 控制台为 support.yourdomain.com 与 dify.yourdomain.com 分别加 public hostname,指向 http://localhost:3000 和 http://localhost:5001。
步骤 3:拉起 Dify#
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
# 编辑 .env:CONSOLE_WEB_URL、APP_API_URL 改成 https://dify.yourdomain.com
docker compose up -d
打开 https://dify.yourdomain.com,注册管理员,配置模型,创建一个「聊天助手」应用,上传知识库,发布并复制 API Key。
步骤 4:拉起 Chatwoot#
git clone https://github.com/chatwoot/chatwoot.git
cd chatwoot
cp .env.example .env
# 编辑 .env:FRONTEND_URL=https://support.yourdomain.com
docker compose -f docker-compose.production.yaml run --rm rails bundle exec rails db:chatwoot_prepare
docker compose -f docker-compose.production.yaml up -d
打开 https://support.yourdomain.com,注册账号、创建账户与 Inbox。
步骤 5:把 Dify 配成 Chatwoot 的 Agent Bot#
在 Chatwoot:Settings → Agent Bots → 新建:
- Outgoing URL:
https://dify.yourdomain.com/v1/chat-messages - 头部添加:
Authorization: Bearer app-xxxxxxxx
然后在目标 Inbox 选择这个 Bot 作为兜底。
步骤 6:验证#
发一条消息到网页 Widget,Bot 自动回复,确认日志中能看到 Dify 调用记录。
常见坑#
- Chatwoot 邮件发不出:SMTP 走 Postmark / SES,注意
MAILER_SENDER_EMAIL与发件域名一致 - 中文 Embedding 慢:切换到
bge-m3或者用 SiliconFlow 的免费额度 - Cloudflare Tunnel 502:检查容器是否监听
0.0.0.0,而不是127.0.0.1