Coolify logoCoolify

通过 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. 为您的应用设置隧道

要为您的应用设置隧道,请按照以下步骤操作:

  1. 域名 字段中删除所有域名。
  2. 暴露端口 中设置正确的端口(您的应用使用的端口)。
  3. 端口映射 中设置正确的端口(左侧为主机端口,右侧为应用端口)。
  4. 点击 部署 按钮部署您的应用。

2. 创建 Cloudflare Tunnel

要创建 Cloudflare Tunnel,首先登录到您的 Cloudflare 仪表板

  1. 进入侧边栏中的 网络
  2. 点击 Tunnels
  3. 点击 创建隧道 按钮

系统将提示您输入隧道名称。输入您喜欢的名称,然后点击 创建隧道 按钮。

  1. 选择 Docker 选项
  2. 复制 docker run 命令,其中包含您隧道的令牌(令牌以 "eyJ" 开头)。确保只保存令牌,删除其前面的命令部分,并将其存储在安全的地方,因为稍后我们需要它。

3. 在 Coolify 上部署 cloudflared

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

搜索 Cloudflared 并点击它。

进入 环境变量 页面,输入您的隧道令牌,然后部署 Cloudflared 应用。

一旦 cloudflared 开始运行,您将能够在 Cloudflare 仪表板上看到它的状态

点击继续按钮以创建隧道。

4. 设置 TLS 加密

为了使 Cloudflare 在连接到您的服务器时使用更严格的加密,请在 Cloudflare 中配置您的 TLS 加密:

  1. 进入 Cloudflare 中的 SSL/TLS
  2. 选择 概览
  3. 点击 配置 按钮
  1. 选择 完全(严格) 作为加密模式。
  2. 点击 保存 按钮

5. 配置隧道路由

  1. 点击您的隧道
  2. 点击 配置 选项
  1. 选择 路由
  2. 点击 添加路由 按钮
  1. 选择 已发布的应用程序 作为路由类型
  1. 子域名 - (可选)您可以使您的资源在任何子域名/域名上可访问。在本指南中,我们使用 helixa 子域名。
  2. 域名 - 选择您希望用于隧道的域名。
  3. 路径 - 留空此字段。
  4. 服务 URL - 输入 **http://localhost:4477**(这非常重要)。端口 4477 是我们在 步骤 1 中映射到主机系统的端口。
  5. 填写详细信息后,点击 添加路由 按钮。

恭喜!您已成功设置了一个任何人都可以通过您的域名访问的资源。


隧道多个资源

隧道多个资源的最简单方法是遵循我们的 隧道所有资源 指南,该指南使用 Coolify 的内置代理。

但是,如果您不想使用代理,有两种替代方法:

如果您想单独暴露不同的应用,您可以遵循我们的 隧道所有资源,或者采取另一种方法:

  1. 为您的新资源遵循 步骤 1

  2. 步骤 5 中所述,在 Cloudflare Tunnel 上创建新路由。

无需为每个资源创建单独的隧道,只需创建新路由并将其指向您的应用正在监听的端口即可。

隧道 Coolify 本身以使其通过域名可访问需要更多的手动配置。以下是设置方法:

1. 在 Cloudflare Tunnel 中创建路由

遵循 步骤 5 为 Coolify 公开的每个服务创建路由。使用以下映射:

域名 / 路径服务目的
coolify.shadowarcanist.com/terminal/wshttp://localhost:6002WebSocket 终端
coolify-realtime.shadowarcanist.comhttp://localhost:6001实时服务器
coolify.shadowarcanist.comhttp://localhost:8000Coolify 仪表板

注意!

路由的顺序很重要!确保与上面显示的完全匹配。


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 | bash

4. 验证设置

  1. 访问 https://coolify.shadowarcanist.com 上的 Coolify 仪表板。
  2. 在另一个浏览器标签页中访问 https://coolify.shadowarcanist.com/realtime 测试实时功能。您应该看到有关测试事件的通知。
  3. 如果您知道自己在做什么,还可以检查网络选项卡。搜索 websocket 连接。

注意!

如果您使用防火墙,请确保所需的端口(例如,800060016002)已打开以进行内部通信,但未暴露在互联网上。


已知问题及解决方案

当您在 步骤 5 中创建新路由时,Cloudflare 将为该主机名创建 DNS 记录。

但是,如果该主机名的 DNS 记录已存在,Cloudflare 不会更新现有记录。

在这种情况下,您的应用将无法工作。要解决此问题,请按照以下步骤操作:

  1. 点击您的隧道
  2. 点击 配置 选项
  1. 从隧道详细信息部分复制您的隧道 ID。

使用以下详细信息创建新的 DNS 记录:

  1. 在 Cloudflare 仪表板中,进入 DNS
  2. 选择 记录
  3. 添加 CNAME 记录。
  4. 将名称输入为 * 或您的子域名名称(这应与您在隧道中的应用的主机名匹配)。
  5. 对于 目标,输入隧道 ID 后跟 .cfargotunnel.com
  6. 将代理状态设置为 已代理

现在,访问您应用的域名,它应该可以访问了。

On this page