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 是否匹配。

安全建议

  1. 定期更新: 保持 Dify 和 cloudflared 为最新版本
  2. 访问控制: 在 Cloudflare 控制台配置访问策略
  3. 监控日志: 定期检查服务日志,监控异常访问
  4. 备份配置: 备份重要的配置文件和数据库

总结

完成以上步骤后,你将拥有:

  • ✅ 完全部署的 Dify 服务
  • ✅ 通过 HTTPS 的安全外网访问
  • ✅ 自动启动的后台服务
  • ✅ 完整的日志记录和监控

现在你可以通过 https://dify.yourdomain.com 安全地访问你的 Dify 服务,无需担心服务器重启或网络中断的问题。


创建时间: 2025年10月9日
适用版本: Dify latest, cloudflared 2025.9.1
系统要求: macOS with Docker