通过 Cloudflare 隧道访问单个资源
使用 Cloudflare 隧道访问 Coolify 上部署的资源,您可以安全地访问您的应用程序,而无需暴露服务器的 IP 地址或为服务器设置公共 IP 地址。
适用人群
此设置非常适合以下人群:
- 服务器没有公共 IP(可能是笔记本电脑、树莓派等)。
- 无法进行端口转发(例如,使用家庭互联网或在私有网络上)。
- 希望保持服务器 IP 地址私密,避免将其暴露在公共互联网上。
- 已经在 Coolify 上部署了应用程序,需要一种外部方法来安全访问它。
设置要求
要遵循本指南,您需要:
- 一个免费的 Cloudflare ↗ 账户。
- 一个由 Cloudflare 管理 DNS 的域名。
- 您的资源必须已在 Coolify 上部署和管理。
开始之前
- 我们假设您已经在运行 Coolify 并且已经部署了应用程序。
- 如果您的应用程序需要 HTTPS 来实现 cookie 或登录等功能,那么在遵循本指南后,您需要遵循 完整 TLS HTTPS 指南 ↗。这是因为在本指南中,Cloudflare 将在外部管理 HTTPS,而您的应用程序将在 Coolify 内通过 HTTP 运行。
工作原理
一个简单的高级概览图,让您直观了解其工作原理:

重要部分快速链接:
示例数据
以下数据在本指南中用作示例。请在按照步骤操作时替换为您的实际数据:
- 域名: shadowarcanist.com
- 暴露端口: 80
- 端口映射: 4477:80
1. 为您的应用程序设置隧道
要为您的应用程序设置隧道,请按照以下步骤操作:

- 从 域名 字段中删除所有域名。
- 在 暴露端口 中设置正确的端口(您的应用程序使用的端口)。
- 在 端口映射 中设置正确的端口(左侧是主机端口,右侧是应用端口)。
- 通过点击 部署 按钮部署您的应用程序。
2. 创建 Cloudflare 隧道
要创建 Cloudflare 隧道,请首先登录您的 Cloudflare 账户并前往 Zero Trust ↗ 页面。

- 在 Zero Trust 页面上,在侧边栏中前往 网络。
- 点击 隧道
- 点击 添加隧道 按钮
系统会提示您选择隧道类型。点击 选择 Cloudflared 按钮。

系统会提示您输入隧道名称。选择您喜欢的名称。

接下来,您将看到配置页面,其中包含多个安装 cloudflared 的选项。

复制安装命令,其中包含您的隧道令牌(令牌以 "eyJ" 开头)。确保只保存令牌,移除前面的命令部分,并将其存储在安全的地方,因为我们稍后会用到它。

向下滚动直到看到 下一步 按钮,然后点击它。
然后,系统会提示您添加主机名。

- 子域名 -(可选)您可以让您的应用/资源在任何子域名/域名上都可访问。在本指南中,我们不使用子域名。
- 域名 - 选择您要用于隧道的域名。
- 路径 - 留空此字段。
- 类型 - 选择 HTTP(这非常重要)。
- URL - 输入 localhost:4477 端口 4477 是我们在 步骤 1 中映射到主机系统的端口。用您自己的端口替换 4477。
- 填写完详细信息后,点击 保存隧道 按钮。
3. 在 Coolify 上设置 Cloudflare 隧道
要在 Coolify 上设置隧道,请按照以下步骤操作:

前往 Coolify 仪表板上的项目,点击 + 新建 按钮创建新资源。

您将看到许多部署新应用的选项。搜索 Cloudflared 并点击它。

前往 环境变量 页面,输入您的隧道令牌,然后部署 Cloudflared 应用。此令牌在 步骤 2 中已复制
恭喜!您已成功设置了一个可以通过您的域名被互联网上任何人访问的资源。
注意!
上面的步骤展示了如何为单个资源建立隧道。下面是为多个资源建立隧道的步骤
为多个资源建立隧道
为多个资源建立隧道的最简单方法是遵循我们的 为所有资源建立隧道 指南,该指南使用 Coolify 的内置代理。但是,如果您不想使用代理,还有两种替代方法:
为多个单个资源建立隧道很简单,但为 Coolify 本身建立隧道需要额外的手动设置。
为多个单个资源建立隧道
如果您想单独暴露不同的应用程序,您可以遵循我们的 为所有资源建立隧道,或者采用另一种方法:

无需为每个资源创建单独的隧道,只需创建一个新的主机名并将其指向您的应用程序正在监听的端口即可。
为 Coolify 本身建立隧道
为 Coolify 本身建立隧道以使其可以通过域名访问需要更多的手动配置。以下是设置方法:
1. 在 Cloudflare 隧道中创建公共主机名
按照主指南中的 步骤 2 为 Coolify 暴露的每个服务创建公共主机名。使用以下映射:

主机名:
app.shadowarcanist.com/terminal/ws→localhost:6002(WebSocket 终端)realtime.shadowarcanist.com→localhost:6001(实时服务器)app.shadowarcanist.com→localhost:8000(Coolify 仪表板)
类型:HTTP(确保为每个主机名选择 HTTP。)
注意!
主机名的顺序很重要!请确保与上面显示的完全匹配。
2. 更新 Coolify 的 .env 文件
创建公共主机名后,更新位于 /data/coolify/source 的 Coolify 实例中的 .env 文件以启用与实时服务器的连接。添加以下行:
APP_ID=<随机字符串>
APP_KEY=<随机字符串>
APP_NAME=Coolify
DB_PASSWORD=<随机字符串>
PUSHER_APP_ID=<随机字符串>
PUSHER_APP_KEY=<随机字符串>
PUSHER_APP_SECRET=<随机字符串>
REDIS_PASSWORD=<随机字符串>
###########
# 添加这些行
PUSHER_HOST=realtime.shadowarcanist.com
PUSHER_PORT=443
###########这确保 Coolify 使用 Cloudflare 隧道进行其实时服务器。
3. 重新启动 Coolify
运行以下命令重新启动 Coolify 并应用更改:
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash4. 验证设置
- 在
https://app.shadowarcanist.com访问您的 Coolify 仪表板。 - 通过在另一个浏览器标签页中访问
https://app.shadowarcanist.com/realtime来测试实时功能。您应该会看到有关测试事件的通知。 - 如果您知道自己在做什么,也可以检查网络选项卡。搜索 WebSocket 连接。
注意!
如果您使用防火墙,请确保所需端口(例如 8000、6001、6002)对内部通信开放,但不向公共互联网暴露。
已知问题和解决方案
当您在 步骤 2 中创建新的公共主机名时,Cloudflare 会为主机名创建 DNS 记录。
但是,如果主机名的 DNS 记录已经存在,Cloudflare 将不会创建新的记录。
在这种情况下,您的应用程序将无法工作。要解决此问题,请按照以下步骤操作:

首先,从 Cloudflare 仪表板上的隧道页面复制您的隧道 ID。

创建一个具有以下详细信息的新 DNS 记录:
- 在 Cloudflare 仪表板中,前往 DNS。
- 选择 记录。
- 添加一个 CNAME 记录。
- 输入名称为
*或您的子域名名称(这应该与您在隧道上为应用程序设置的主机名匹配)。 - 对于 目标,输入隧道 ID 后跟
.cfargotunnel.com - 将代理状态设置为 已代理。
现在,访问您应用程序的域名,它应该可以在那里访问。
