本指南详细介绍如何使用 Docker 部署 Dify,并通过 Cloudflare Tunnel 实现安全的外网访问。
前置条件#
- macOS 系统
- 已安装 Docker 和 Docker Compose
- 拥有 Cloudflare 账户
- 拥有一个域名并托管在 Cloudflare
第一步:部署 Dify#
1.1 克隆 Dify 仓库#
1
2
3
| cd /Users/heyaohua/Server
git clone https://github.com/langgenius/dify.git
cd dify/docker
|
1.2 配置环境变量#
1
2
3
4
5
| # 复制环境变量模板
cp .env.example .env
# 编辑环境变量文件
vim .env
|
关键配置项:
SECRET_KEY: 生成一个安全的密钥DB_USERNAME, DB_PASSWORD: 数据库用户名和密码REDIS_PASSWORD: Redis 密码
1.3 启动 Dify 服务#
1
2
3
4
5
| # 启动所有服务
docker-compose up -d
# 检查服务状态
docker-compose ps
|
确保以下服务正常运行:
docker-nginx-1: 端口 80, 443docker-api-1: 端口 5001docker-web-1: 端口 3000docker-plugin_daemon-1: 端口 5003
第二步:安装 Cloudflare Tunnel#
2.1 安装 cloudflared#
1
2
| # 使用 Homebrew 安装
brew install cloudflared
|
2.2 登录 Cloudflare#
1
| cloudflared tunnel login
|
这会打开浏览器,选择要使用的域名进行授权。
第三步:创建和配置 Tunnel#
3.1 创建 Tunnel#
1
2
| # 创建名为 dify-tunnel 的隧道
cloudflared tunnel create dify-tunnel
|
记录返回的 Tunnel ID,例如:e5e75674-d270-4201-ab9e-ea858c091d91
3.2 创建配置文件#
在 Dify docker 目录下创建 config.yaml:
1
2
3
4
5
6
7
| 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 记录#
1
2
| # 为域名创建 DNS 记录(如果不存在)
cloudflared tunnel route dns dify-tunnel dify.yourdomain.com
|
如果提示记录已存在,可以跳过此步骤。
第四步:测试 Tunnel 连接#
4.1 手动测试#
1
2
3
| # 设置 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 安装基础服务#
1
| cloudflared service install
|
5.2 创建自定义服务配置#
创建 com.cloudflare.cloudflared.plist 文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| <?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 安装和启动服务#
1
2
3
4
5
6
7
8
| # 复制配置文件到 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 验证服务状态#
1
2
3
4
5
| # 检查服务是否运行
launchctl list | grep cloudflared
# 查看服务日志
tail -f /Users/heyaohua/Library/Logs/com.cloudflare.cloudflared.err.log
|
服务管理命令#
启动服务#
1
| launchctl bootstrap gui/$(id -u) /Users/heyaohua/Library/LaunchAgents/com.cloudflare.cloudflared.plist
|
停止服务#
1
| launchctl bootout gui/$(id -u) /Users/heyaohua/Library/LaunchAgents/com.cloudflare.cloudflared.plist
|
查看服务状态#
1
| launchctl list | grep cloudflared
|
查看实时日志#
1
2
3
4
5
| # 查看输出日志
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 解析错误:
1
2
| # 临时使用 Cloudflare DNS
GODNS=1.1.1.1 cloudflared tunnel --config config.yaml run
|
2. 端口冲突#
确保本地 80 端口没有被其他服务占用:
1
2
3
4
5
| # 检查端口占用
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