Dify + Cloudflare Tunnel 部署指南
Posted on Thu 09 October 2025 in 开发工具
本指南详细介绍如何使用 Docker 部署 Dify,并通过 Cloudflare Tunnel 实现安全的外网访问。
前置条件
- macOS 系统
- 已安装 Docker 和 Docker Compose
- 拥有 Cloudflare 账户
- 拥有一个域名并托管在 Cloudflare
第一步:部署 Dify
1.1 克隆 Dify 仓库
cd /Users/heyaohua/Server
git clone https://github.com/langgenius/dify.git
cd dify/docker
1.2 配置环境变量
# 复制环境变量模板
cp .env.example .env
# 编辑环境变量文件
vim .env
关键配置项:
- SECRET_KEY: 生成一个安全的密钥
- DB_USERNAME, DB_PASSWORD: 数据库用户名和密码
- REDIS_PASSWORD: Redis 密码
1.3 启动 Dify 服务
# 启动所有服务
docker-compose up -d
# 检查服务状态
docker-compose ps
确保以下服务正常运行:
- docker-nginx-1: 端口 80, 443
- docker-api-1: 端口 5001
- docker-web-1: 端口 3000
- docker-plugin_daemon-1: 端口 5003
第二步:安装 Cloudflare Tunnel
2.1 安装 cloudflared
# 使用 Homebrew 安装
brew install cloudflared
2.2 登录 Cloudflare
cloudflared tunnel login
这会打开浏览器,选择要使用的域名进行授权。
第三步:创建和配置 Tunnel
3.1 创建 Tunnel
# 创建名为 dify-tunnel 的隧道
cloudflared tunnel create dify-tunnel
记录返回的 Tunnel ID,例如:e5e75674-d270-4201-ab9e-ea858c091d91
3.2 创建配置文件
在 Dify docker 目录下创建 config.yaml:
tunnel: e5e75674-d270-4201-ab9e-ea858c091d91
credentials-file: /Users/heyaohua/.cloudflared/e5e75674-d270-4201-ab9e-ea858c091d91.json
ingress:
- hostname: dify.yourdomain.com
service: http://127.0.0.1:80
- service: http_status:404
重要说明:
- 将 tunnel 值替换为你的实际 Tunnel ID
- 将 credentials-file 路径中的 ID 替换为你的实际 Tunnel ID
- 将 dify.yourdomain.com 替换为你的实际域名
3.3 配置 DNS 记录
# 为域名创建 DNS 记录(如果不存在)
cloudflared tunnel route dns dify-tunnel dify.yourdomain.com
如果提示记录已存在,可以跳过此步骤。
第四步:测试 Tunnel 连接
4.1 手动测试
# 设置 DNS 解析并启动隧道
cd /Users/heyaohua/Server/Dify/docker
GODNS=1.1.1.1 cloudflared tunnel --config config.yaml run
4.2 验证连接
在浏览器中访问 https://dify.yourdomain.com,确认可以正常访问 Dify 界面。
第五步:配置系统服务(后台运行)
5.1 安装基础服务
cloudflared service install
5.2 创建自定义服务配置
创建 com.cloudflare.cloudflared.plist 文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.cloudflare.cloudflared</string>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/bin/cloudflared</string>
<string>tunnel</string>
<string>--config</string>
<string>/Users/heyaohua/Server/Dify/docker/config.yaml</string>
<string>run</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardOutPath</key>
<string>/Users/heyaohua/Library/Logs/com.cloudflare.cloudflared.out.log</string>
<key>StandardErrorPath</key>
<string>/Users/heyaohua/Library/Logs/com.cloudflare.cloudflared.err.log</string>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>ThrottleInterval</key>
<integer>5</integer>
<key>EnvironmentVariables</key>
<dict>
<key>GODNS</key>
<string>1.1.1.1</string>
</dict>
</dict>
</plist>
注意: 将配置文件路径替换为你的实际路径。
5.3 安装和启动服务
# 复制配置文件到 LaunchAgents 目录
cp com.cloudflare.cloudflared.plist /Users/heyaohua/Library/LaunchAgents/
# 卸载旧服务(如果存在)
launchctl unload /Users/heyaohua/Library/LaunchAgents/com.cloudflare.cloudflared.plist
# 加载新服务
launchctl bootstrap gui/$(id -u) /Users/heyaohua/Library/LaunchAgents/com.cloudflare.cloudflared.plist
5.4 验证服务状态
# 检查服务是否运行
launchctl list | grep cloudflared
# 查看服务日志
tail -f /Users/heyaohua/Library/Logs/com.cloudflare.cloudflared.err.log
服务管理命令
启动服务
launchctl bootstrap gui/$(id -u) /Users/heyaohua/Library/LaunchAgents/com.cloudflare.cloudflared.plist
停止服务
launchctl bootout gui/$(id -u) /Users/heyaohua/Library/LaunchAgents/com.cloudflare.cloudflared.plist
查看服务状态
launchctl list | grep cloudflared
查看实时日志
# 查看输出日志
tail -f /Users/heyaohua/Library/Logs/com.cloudflare.cloudflared.out.log
# 查看错误日志
tail -f /Users/heyaohua/Library/Logs/com.cloudflare.cloudflared.err.log
故障排除
1. DNS 解析问题
如果遇到 DNS 解析错误:
# 临时使用 Cloudflare DNS
GODNS=1.1.1.1 cloudflared tunnel --config config.yaml run
2. 端口冲突
确保本地 80 端口没有被其他服务占用:
# 检查端口占用
lsof -i :80
# 检查 Docker 服务状态
docker-compose ps
3. 权限问题
确保 cloudflared 有足够的权限访问配置文件和日志目录。
4. 服务无法启动
检查配置文件路径是否正确,Tunnel ID 是否匹配。
安全建议
- 定期更新: 保持 Dify 和 cloudflared 为最新版本
- 访问控制: 在 Cloudflare 控制台配置访问策略
- 监控日志: 定期检查服务日志,监控异常访问
- 备份配置: 备份重要的配置文件和数据库
总结
完成以上步骤后,你将拥有:
- ✅ 完全部署的 Dify 服务
- ✅ 通过 HTTPS 的安全外网访问
- ✅ 自动启动的后台服务
- ✅ 完整的日志记录和监控
现在你可以通过 https://dify.yourdomain.com 安全地访问你的 Dify 服务,无需担心服务器重启或网络中断的问题。
创建时间: 2025年10月9日
适用版本: Dify latest, cloudflared 2025.9.1
系统要求: macOS with Docker