通过 Cloudflare Tunnels 访问单个资源
使用 Cloudflare Tunnel 访问部署在 Coolify 上的资源,可以让您安全地访问您的应用,而无需暴露服务器的 IP 地址,也无需服务器拥有公共 IP 地址。
适用人群
此设置非常适合以下人群:
- 服务器没有公共 IP 地址(可能是笔记本电脑、树莓派等)。
- 无法进行端口转发(例如,使用家庭网络或在私有网络中)。
- 希望保持服务器 IP 地址的私密性,避免将其暴露在互联网上。
- 已在 Coolify 上部署了应用,并需要一种外部方法来安全地访问它。
设置要求
要遵循本指南,您需要:
- 一个免费的 Cloudflare 账户。
- 一个 DNS 由 Cloudflare 管理 的域名。
- 您的资源必须已部署并由 Coolify 管理。
开始之前
- 我们假设您已经运行了 Coolify 并部署了一个应用。
- 如果您的应用需要 HTTPS 来实现 cookie 或登录等功能,那么在遵循本指南后,您需要遵循 完整 TLS HTTPS 指南。这是因为在本指南中,Cloudflare 将在外部管理 HTTPS,而您的应用将在 Coolify 内部通过 HTTP 运行。
工作原理?
一个简单的概览图,帮助您直观地了解其工作原理:
示例数据
以下数据在本指南中作为示例使用。请按照步骤操作时将其替换为您的实际数据:
- 域名: shadowarcanist.com
- 暴露端口: 80
- 端口映射: 4477:80
1. 为您的应用设置隧道
要为您的应用设置隧道,请按照以下步骤操作:
- 从 域名 字段中删除所有域名。
- 在 暴露端口 中设置正确的端口(您的应用使用的端口)。
- 在 端口映射 中设置正确的端口(左侧为主机端口,右侧为应用端口)。
- 点击 部署 按钮部署您的应用。
2. 创建 Cloudflare Tunnel
要创建 Cloudflare Tunnel,首先登录到您的 Cloudflare 仪表板
- 进入侧边栏中的 网络。
- 点击 Tunnels
- 点击 创建隧道 按钮
系统将提示您输入隧道名称。输入您喜欢的名称,然后点击 创建隧道 按钮。
- 选择 Docker 选项
- 复制 docker run 命令,其中包含您隧道的令牌(令牌以 "
eyJ" 开头)。确保只保存令牌,删除其前面的命令部分,并将其存储在安全的地方,因为稍后我们需要它。
3. 在 Coolify 上部署 cloudflared
转到 Coolify 仪表板上的项目,点击 + 新建 按钮以创建新资源。
搜索 Cloudflared 并点击它。
进入 环境变量 页面,输入您的隧道令牌,然后部署 Cloudflared 应用。
一旦 cloudflared 开始运行,您将能够在 Cloudflare 仪表板上看到它的状态
点击继续按钮以创建隧道。
4. 设置 TLS 加密
为了使 Cloudflare 在连接到您的服务器时使用更严格的加密,请在 Cloudflare 中配置您的 TLS 加密:
- 进入 Cloudflare 中的 SSL/TLS。
- 选择 概览。
- 点击 配置 按钮
- 选择 完全(严格) 作为加密模式。
- 点击 保存 按钮
5. 配置隧道路由
- 点击您的隧道
- 点击 配置 选项
- 选择 路由。
- 点击 添加路由 按钮
- 选择 已发布的应用程序 作为路由类型
- 子域名 - (可选)您可以使您的资源在任何子域名/域名上可访问。在本指南中,我们使用
helixa子域名。 - 域名 - 选择您希望用于隧道的域名。
- 路径 - 留空此字段。
- 服务 URL - 输入 **http://localhost:4477**(这非常重要)。端口 4477 是我们在 步骤 1 中映射到主机系统的端口。
- 填写详细信息后,点击 添加路由 按钮。
恭喜!您已成功设置了一个任何人都可以通过您的域名访问的资源。
隧道多个资源
隧道多个资源的最简单方法是遵循我们的 隧道所有资源 指南,该指南使用 Coolify 的内置代理。
但是,如果您不想使用代理,有两种替代方法:
如果您想单独暴露不同的应用,您可以遵循我们的 隧道所有资源,或者采取另一种方法:
无需为每个资源创建单独的隧道,只需创建新路由并将其指向您的应用正在监听的端口即可。
隧道 Coolify 本身以使其通过域名可访问需要更多的手动配置。以下是设置方法:
1. 在 Cloudflare Tunnel 中创建路由
遵循 步骤 5 为 Coolify 公开的每个服务创建路由。使用以下映射:

| 域名 / 路径 | 服务 | 目的 |
|---|---|---|
coolify.shadowarcanist.com/terminal/ws | http://localhost:6002 | WebSocket 终端 |
coolify-realtime.shadowarcanist.com | http://localhost:6001 | 实时服务器 |
coolify.shadowarcanist.com | http://localhost:8000 | Coolify 仪表板 |
注意!
路由的顺序很重要!确保与上面显示的完全匹配。
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=coolify-realtime.shadowarcanist.com
PUSHER_PORT=443
###########这确保 Coolify 使用 Cloudflare Tunnel 作为其实时服务器。
3. 重启 Coolify
运行以下命令以重启 Coolify 并应用更改:
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash4. 验证设置
- 访问
https://coolify.shadowarcanist.com上的 Coolify 仪表板。 - 在另一个浏览器标签页中访问
https://coolify.shadowarcanist.com/realtime测试实时功能。您应该看到有关测试事件的通知。 - 如果您知道自己在做什么,还可以检查网络选项卡。搜索 websocket 连接。
注意!
如果您使用防火墙,请确保所需的端口(例如,8000、6001、6002)已打开以进行内部通信,但未暴露在互联网上。
已知问题及解决方案
当您在 步骤 5 中创建新路由时,Cloudflare 将为该主机名创建 DNS 记录。
但是,如果该主机名的 DNS 记录已存在,Cloudflare 不会更新现有记录。
在这种情况下,您的应用将无法工作。要解决此问题,请按照以下步骤操作:
- 点击您的隧道
- 点击 配置 选项
- 从隧道详细信息部分复制您的隧道 ID。
使用以下详细信息创建新的 DNS 记录:
- 在 Cloudflare 仪表板中,进入 DNS。
- 选择 记录。
- 添加 CNAME 记录。
- 将名称输入为
*或您的子域名名称(这应与您在隧道中的应用的主机名匹配)。 - 对于 目标,输入隧道 ID 后跟
.cfargotunnel.com - 将代理状态设置为 已代理。
现在,访问您应用的域名,它应该可以访问了。
