Skip to content

Cloudflare 源证书


当使用 Cloudflare 的代理、CDN 和安全功能时,Cloudflare 源证书确保您的服务器和 Cloudflare 之间的通信安全。

它会加密服务器和 Cloudflare 之间交换的数据,确保数据安全。

为什么在 Coolify 中使用 Cloudflare 源证书?

  1. 创建证书无需 HTTP 或 DNS 验证。
  2. 保持 80 端口关闭 — 所有通信都通过 TLS 安全进行。
  3. 证书有效期更长(15 年)— 设置完成后,您无需担心每隔几个月就需要续期。

何时避免使用 Cloudflare 源证书

  1. 如果您需要免费证书用于多层级子域名(例如:app.sub.domain.com)。
  2. 该证书仅受 Cloudflare 信任,这意味着如果 Cloudflare 服务中断,没有人可以通过您的域名访问您的应用和网站。

示例数据

本指南中使用以下数据作为示例。请在按照步骤操作时替换为您的实际数据:

  • 源服务器的 IPv4 地址: 203.0.113.1
  • 域名: shadowarcanist.com
  • 用户名: shadowarcanist

1. 创建源证书

要创建您的 Cloudflare 源证书,请按照以下步骤操作:

  1. 在 Cloudflare 仪表板中,前往 SSL/TLS
  2. 选择 源服务器
  3. 点击 创建证书 按钮。

系统会要求您选择私钥类型、主机名和证书有效期。

  1. 为密钥类型选择 RSA (2048)
  2. 添加您希望证书覆盖的主机名。

注意!

  • shadowarcanist.com 将仅覆盖主域名。
  • *.shadowarcanist.com 将覆盖所有子域名。

在 Cloudflare 的免费计划中,通配符证书仅覆盖一级子域名

例如,它适用于 coolify.shadowarcanist.com,但不适用于 www.coolify.shadowarcanist.com

要覆盖多个级别,您需要购买 高级证书管理器 ↗

  1. 将证书有效期设置为 15 年

现在您的证书将被生成。

  1. 选择 PEM 作为密钥格式。
  2. 复制您的 证书
  3. 复制您的 私钥

接下来,您将把这些添加到运行 Coolify 的服务器上,并配置 Coolify 使用此证书。

2. 向服务器添加证书

通过SSH登录到您的服务器或使用Coolify的终端功能。在本指南中,我使用SSH:

sh
ssh shadowarcanist@203.0.113.1

登录后,导航到Coolify代理目录:

sh
$ cd /data/coolify/proxy

检查是否有certs文件夹:

sh
$ ls
> acme.json  docker-compose.yml  dynamic

如果没有certs文件夹,请创建它:

sh
$ mkdir certs

验证它已创建:

sh
$ ls
> acme.json  certs docker-compose.yml  dynamic

现在,导航到certs目录:

sh
$ cd certs

创建两个新文件用于存储证书和私钥:

sh
$ touch shadowarcanist.cert shadowarcanist.key

验证文件已创建:

sh
$ ls
> shadowarcanist.cert shadowarcanist.key

打开shadowarcanist.cert文件并粘贴来自Cloudflare仪表板的证书:

sh
$ nano shadowarcanist.cert

粘贴证书后保存并退出。

shadowarcanist.key文件执行相同操作并粘贴私钥:

sh
$ nano shadowarcanist.key

保存并退出。

现在,源证书已安装在您的服务器上。

3. 设置 DNS 记录和 TLS 加密

要使源证书工作,请在 Cloudflare 中配置您的 DNS 记录、启用 TLS 并设置 HTTP 到 HTTPS 的重定向:

  1. 在 Cloudflare 中,前往 DNS
  2. 选择 记录
  3. 添加 2 条 A 记录:
  4. 输入名称为 shadowarcanist.com*
  5. 对于两条记录,都使用您服务器的** IP 地址**作为内容。
  6. 为了更好的安全性,将代理状态设置为已代理

接下来,设置 TLS 加密:

  1. 在 Cloudflare 中前往 SSL/TLS
  2. 选择 概览
  3. 点击 配置 按钮

选择**完全(严格)**作为加密模式。

最后,启用 HTTP 到 HTTPS 的重定向:

  1. 在 Cloudflare 中,前往 SSL/TLS
  2. 选择 边缘证书
  3. 启用 始终使用 HTTPS

4. 配置 Coolify 使用源证书

现在,在您的 Coolify 仪表板中:

  1. 转到侧边栏中的 服务器 部分。
  2. 选择 代理
  3. 打开 动态配置 页面
  4. 点击 添加 按钮

现在系统会提示您输入动态配置。

  1. 为您的配置选择一个名称。
  2. 在配置字段中输入以下详细信息:
sh
tls:
  certificates:
    -
      certFile: /traefik/certs/shadowarcanist.cert
      keyFile: /traefik/certs/shadowarcanist.key

添加多个证书(点击查看)

sh
tls:
  certificates:
    -
      certFile: /traefik/certs/shadowarcanist.cert
      keyFile: /traefik/certs/shadowarcanist.key
    -
      certFile: /traefik/certs/name2.cert
      keyFile: /traefik/certs/name2.key
    -
      certFile: /traefik/certs/name3.cert
      keyFile: /traefik/certs/name3.key
  1. 保存配置

从现在开始,Coolify 将对匹配主机名的请求使用源证书。

注意!

以下所有步骤都是可选的。Coolify 应该已经在使用源证书。只有当您知道自己在做什么并且想要简化配置时,才应遵循这些步骤

5. 可选:配置 Traefik

此步骤是可选的,但在自托管时建议清理不必要的设置。

由于您使用的是源证书,您不再需要 HTTP 验证或开放 80 端口。

  1. 在 Coolify 仪表板中转到 服务器
  2. 选择 代理
  3. 打开 配置
  4. 用以下内容替换配置:
sh
# 定义外部网络
networks:
  coolify:
    external: true  # 外部网络。

services:
  # Traefik 反向代理
  traefik:
    container_name: coolify-proxy  # 容器名称。
    image: 'traefik:v3.1'  # Traefik 镜像版本。
    restart: unless-stopped  # 自动重启策略。
    extra_hosts:
      - 'host.docker.internal:host-gateway'  # 主机通信。
    networks:
      - coolify  # 网络连接。
    ports:
      - '443:443'  # 暴露 HTTPS 端口。
    healthcheck:  # 健康检查配置。
      test: 'wget -qO- http://localhost:80/ping || exit 1'  # 健康检查的 Ping 端点。
      interval: 4s  # 健康检查间隔。
      timeout: 2s  # 健康检查超时。
      retries: 5  # 重试次数。
    volumes:
      - '/var/run/docker.sock:/var/run/docker.sock:ro'  # Docker 套接字访问。
      - '/data/coolify/proxy:/traefik'  # Traefik 配置卷。
    command:
      # Traefik 配置选项
      - '--ping=true'  # 启用健康检查的 Ping。
      - '--ping.entrypoint=http'  # 使用 HTTP 入口点进行 Ping。
      - '--entrypoints.http.address=:80'  # 健康检查的 HTTP 入口点。
      - '--entrypoints.https.address=:443'  # HTTPS 入口点。
      - '--entrypoints.http.http.encodequerysemicolons=true'  # 启用查询分号编码。
      - '--entryPoints.http.http2.maxConcurrentStreams=50'  # HTTP/2 最大流数。
      - '--entrypoints.https.http.encodequerysemicolons=true'  # 启用 HTTPS 查询编码。
      - '--entryPoints.https.http2.maxConcurrentStreams=50'  # HTTPS/2 最大流数。
      - '--entrypoints.https.http3'  # 启用 HTTP/3。
      - '--providers.docker.exposedbydefault=false'  # 禁用默认暴露。
      - '--providers.file.directory=/traefik/dynamic/'  # 动态配置目录。
      - '--certificatesresolvers.letsencrypt.acme.httpchallenge=false'  # 禁用 Let's Encrypt 的 HTTP 验证。
      - '--providers.file.watch=true'  # 启用配置文件监视。
      - '--providers.docker=true'  # 启用 Docker 提供者。
    labels:
      - coolify.managed=true  # 由 Coolify 管理。
      - coolify.proxy=true  # 代理服务。

注意

此配置中的注释解释了每一行。您可以在将其复制到配置中时删除注释。

接下来,您需要从基于 Dockerfile 的部署中删除一些标签。下面是我为我的网站设置的示例

  1. 转到 项目 并选择您的项目。
  2. 打开 配置
  3. 转到 常规
  4. 选中 只读标签 选项
  5. 用以下内容替换标签:
sh
# 为此配置启用 Traefik
traefik.enable=true

# 定义路由器的入口点(HTTPS)
traefik.http.routers.shadowarcanist.entryPoints=https

# 设置此路由器的路由规则,以匹配域 "shadowarcanist.com" 和任何以 "/" 开头的路径
traefik.http.routers.shadowarcanist.rule=Host(`shadowarcanist.com`) && PathPrefix(`/`)

# 为此路由器分配服务 'shadowarcanist'
traefik.http.routers.shadowarcanist.service=shadowarcanist

# 为此路由器启用 TLS(HTTPS)
traefik.http.routers.shadowarcanist.tls=true

# 指定后端服务及其端口(端口 80)
traefik.http.services.shadowarcanist.loadbalancer.server.port=80

现在您已完成!您的服务器已设置为使用 Cloudflare 源证书,所有流量都通过 TLS 进行加密。


注意

请记住,上面的标签是作为示例提供的。这些可能适用于也可能不适用于您的特定用例,因此请将它们用作参考。

鸣谢

标题图片使用了来自 Flaticon ↗ 的图标设计。 每个图标的链接如下: