编译Caddy并添加腾讯云(DNSPOD)DNS支持,自动签发证书,附编译后镜像文件

caddy.png

Caddy是一款非常好用的HTTP代理应用,其简洁的配置和提供自动签发证书的功能深受喜爱。

不过如果部署Caddy使用非标准端口(80、443),或者在内网部署,Caddy便无法通过HTTP-01以及TLS-ALPN-01签发证书。这时候可以使用DNS-01来签发证书。不过Caddy并没有集成DNS-01模块,需要以插件的形式使用,Caddy使用插件需要通过编译的形式注入。

下面是通过注入 dns.providers.tencentcloud 来实现使用腾讯云(DNSPOD)来完成DNS-01验证。

我们以兼容性最好且最简化的流程来编译Caddy并注入 dns.providers.tencentcloud

1. Dockerfile 自动化构建

本步骤的前提是环境中已经按照docker服务,如果没有docker环境,请按照之前的教程安装docker环境

创建 Dockerfile 文件,并复制以下内容

FROM caddy:2.9.1-builder AS builder
# 设置 GOPROXY 环境变量,由于默认go proxy会被墙
ENV GOPROXY=https://goproxy.cn,direct
# 安装tencentcloud dns插件(其它dns插件类似)
RUN xcaddy build --with github.com/caddy-dns/tencentcloud
FROM caddy:2.7.6
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
  • tencentcloud dns 插件地址:https://github.com/caddy-dns/tencentcloud
  • 国内访问 github.com/caddy-dns/tencentcloud 不通畅,可以通过代理访问

2. 构建镜像

docker build -t caddy .

Dockerfile所在目录,执行上面命令,构建完成,便可以得到带有tencentcloud DNS-01验证的 caddy docker镜像。

通过以上步骤就完成了caddy的编译,如果通过docker 部署 caddy,直接 docker run caddy 的镜像就可以了。

如果需要单独的caddy文件,可以通过 docker cp caddy_container:/usr/bin/caddy /home/user/caddy 命令复制caddy执行文件,并部署到想要的位置。

如果需要docker镜像在其它设备上部署,可以通过命令 sudo docker save -o caddy.tar caddy 打包。

附完成配置的Caddyfile内容:

{
    log {
        output file /etc/caddy/caddy.log
    }
}
(tls_dns01) {
    tls {
        dns tencentcloud {
            secret_id "secret_id"
            secret_key "secret_key"
        }
    }
}
domain1.cn,  domain2.cn {
    import tls_dns01
    reverse_proxy ip:port
}
domain3.cn {
    import tls_dns01
    reverse_proxy ip:port
}