从官方下载的caddy不支持namesilo的https证书自动获取,需要自行编译。本文将简单介绍caddy-1.0.5的编译过程。

查看caddy支持的tls插件

  caddy -plugins

tls 这一项看到,默认情况下只有tls.cluster.file这个选项。所以没有办法支持 namesilodns 管理。因此需要重新编译。

  tls
  tls.cluster.file

建立工程目录

  mkdir caddy
  cd caddy

编写 main.go 代码

  package main

  import (
          "github.com/caddyserver/caddy/caddy/caddymain"

          // plug in plugins here, for example:
          // _ "import/path/here"
      _ "github.com/caddyserver/dnsproviders/namesilo"

  )

  func main() {
          // optional: disable telemetry
          // caddymain.EnableTelemetry = false
          caddymain.Run()
  }

初始化go模块

在新建的 main.go 文件中复制上述代码。然后运行:

  go mod init caddy

构建

export GOPROXY=https://goproxy.io
go get github.com/caddyserver/caddy/caddy/caddymain
go build

总结

  1. 如果需要其它的DNS服务,可以查看 https://github.com/caddyserver/dnsproviders 看看有哪些已经被支持

  2. go的版本需要 >= go1.13

  3. 在国内需要设置 GOPROXY 才能正常下载相关代码

  4. 在运行caddy通过namesilo的DNS获取https证书时,发现总时失败。经查询发现是检查DNS的超时时间设置太短的缘故。通过环境变量延长超时时间即可。

  vim /etc/systemd/system/caddy.service
  Environment=NAMESILO_PROPAGATION_TIMEOUT=3600
  Environment=NAMESILO_POLLING_INTERVAL=120
  Environment=NAMESILO_TTL=3600