使用 Docker 快速部署 Caddy 并结合 Cloudflare 实现自动 HTTPS 证书配置

在现代 Web 服务部署中,Caddy 凭借其自动 HTTPS(内置 Let’s Encrypt 证书申请与续期)、极其简单的配置语法以及高性能,成为了 Nginx 的强力替代品。

本文将介绍如何使用 Docker Compose 部署 Caddy,并通过 Cloudflare DNS 插件 来支持内网服务或隐藏真实 IP 的服务器自动签发通配符(泛域名)SSL 证书。

一. 准备工作

在开始之前,请确保您的服务器满足以下条件:

  1. 已安装 DockerDocker Compose
  2. 拥有一台域名,并且 DNS 解析托管在 Cloudflare
  3. 在 Cloudflare 后台生成一个具有 DNS 编辑权限API Token

二. 编写 Docker Compose 配置文件

我们需要一个包含 Cloudflare DNS 插件的 Caddy 镜像(官方基础镜像默认不包含第三方 DNS 插件,但通常我们可以通过官方的带插件镜像,或者使用标准镜像并在构建时处理。注意: 如果使用 Cloudflare 插件自动签发证书,推荐使用专门打包了插件的镜像,例如 lucaslorentz/caddy-docker-proxy 或带有插件的自定义镜像。为了简单起见,这里提供标准的 Caddy Docker 配置模板)。

提示: 如果您的 Caddy 需要使用 Cloudflare 插件来自动签发 DNS 验证证书,标准的 caddy:latest 镜像需要重新编译或使用集成插件的镜像(如 hairyhenderson/caddy-dns-cloudflare 或自定义 Dockerfile)。以下为您提供完整的标准配置代码。

完整 docker-compose.yml 代码

services:
  caddy:
    image: caddy:latest
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    environment:
      - CLOUDFLARE_API_TOKEN=1TPfioUUdae_rG8XxaQi5rEb50Vi1WmN7kk2Yc0V
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./data:/data
      - ./config:/config
    networks:
      - caddy_network

networks:
  caddy_network:
    driver: bridge

三. 创建配置文件 (Caddyfile)

docker-compose.yml 的同级目录下创建一个名为 Caddyfile 的文件,用于编写您的反向代理规则。

Caddyfile 示例:

# 示例 1:基础反向代理
yourdomain.com {
    reverse_proxy 192.168.1.100:8080
}

# 示例 2:泛域名与自动 HTTPS 
*.yourdomain.com {
    tls {
        dns cloudflare 1TPfioUUdae_rG8XxaQi5rEb50Vi1WmN7kk2Yc0V
    }
    
    # 子域名映射
    @app host app.yourdomain.com
    handle @app {
        reverse_proxy 192.168.1.101:3000
    }
}

四. 启动与验证

  1. 创建目录并放好文件:在服务器上新建一个文件夹(例如 /data/caddy),将 docker-compose.ymlCaddyfile 放入其中。
  2. 启动容器:在文件所在目录下执行以下命令后台启动服务:
    Bashdocker-compose up -d
  3. 查看运行日志:通过查看日志检查 Caddy 是否成功启动以及证书申请状态:
    Bashdocker-compose logs -f caddy

五. 总结

通过 Docker 部署 Caddy 能够极大地简化我们的运维流程。结合 Cloudflare API Token,我们可以轻松实现无需暴露 80 端口(通过 DNS-01 验证)的安全证书自动签发。希望这篇文章能帮助你快速搭建高效的反向代理服务!

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注