如何让 caddy2 使用 cloudflare https证书自动更新

  |   9 评论   |   0 浏览

众所周知,caddy2 可以使用 caddy1 的 caddyfile

首先在 cloudflare 获取 apikey

image.png

在服务器先注册变量

export CLOUDFLARE_API_KEY="xxxxxxxxxxxxxxx"
export CLOUDFLARE_EMAIL="[email protected]"

caddy 配置如下
image.png
主要是这一部分

tls {
    dns cloudflare
}

直接上传配置,生效

curl localhost:2019/load \
  -X POST \
  -H "Content-Type: text/caddyfile" \
  --data-binary @Caddyfile

使用 caddy2 默认的 JSON 可以用这样的方式,以下引用自官网

您可以使用配置适配器,方法是在命令行上通过使用--adapter 大多数接受配置的子命令上的标志来指定配置适配器:

caddy run --config caddy.yaml --adapter yaml

或通过/load 端点上的 API :

curl localhost:2019/load \
	-X POST \
	-H "Content-Type: application/yaml" \
	--data-binary @caddy.yaml
	-X POST \
	-H "Content-Type: application/yaml" \
	--data-binary @caddy.yaml
	-X POST \
	-H "Content-Type: application/yaml" \
	--data-binary @caddy.yaml
	-H "Content-Type: application/yaml" \
	--data-binary @caddy.yaml
	-H "Content-Type: application/yaml" \
	--data-binary @caddy.yaml
	--data-binary @caddy.yaml
	--data-binary @caddy.yaml

如果您只想获取输出 JSON 而不运行它,则可以使用以下 caddy adapt 命令:

caddy adapt --config caddy.yaml --adapter yaml

@lizhongyue248 兄弟你参考下,应该问题不大。。。

---------------------------------------------------------------
>> 博客地址:https://blog.mufengs.com
>> 邮箱地址:[email protected]
>> 微信帐号:Do8080
>> Github : https://github.com/mufengcoding
---------------------------------------------------------------

评论

  • mufengcoding 回复»

    我就说,我的caddy没编译成功,不然的话caddy2也可以,我再去试试

  • lizhongyue248 回复»
    caddy.logging.encoders.console
    caddy.logging.encoders.filter
    caddy.logging.encoders.filter.delete
    caddy.logging.encoders.filter.ip_mask
    caddy.logging.encoders.json
    caddy.logging.encoders.logfmt
    caddy.logging.encoders.string
    caddy.logging.writers.discard
    caddy.logging.writers.file
    caddy.logging.writers.net
    caddy.logging.writers.stderr
    caddy.logging.writers.stdout
    caddy.storage.file_system
    http
    http.authentication.hashes.bcrypt
    http.authentication.hashes.scrypt
    http.authentication.providers.http_basic
    http.encoders.brotli
    http.encoders.gzip
    http.encoders.zstd
    http.handlers.authentication
    http.handlers.cache
    http.handlers.encode
    http.handlers.error
    http.handlers.file_server
    http.handlers.headers
    http.handlers.request_body
    http.handlers.reverse_proxy
    http.handlers.rewrite
    http.handlers.static_response
    http.handlers.subroute
    http.handlers.templates
    http.handlers.vars
    http.matchers.file
    http.matchers.header
    http.matchers.header_regexp
    http.matchers.host
    http.matchers.method
    http.matchers.not
    http.matchers.path
    http.matchers.path_regexp
    http.matchers.protocol
    http.matchers.query
    http.matchers.remote_ip
    http.matchers.vars
    http.matchers.vars_regexp
    http.reverse_proxy.circuit_breakers.local
    http.reverse_proxy.selection_policies.first
    http.reverse_proxy.selection_policies.header
    http.reverse_proxy.selection_policies.ip_hash
    http.reverse_proxy.selection_policies.least_conn
    http.reverse_proxy.selection_policies.random
    http.reverse_proxy.selection_policies.random_choose
    http.reverse_proxy.selection_policies.round_robin
    http.reverse_proxy.selection_policies.uri_hash
    http.reverse_proxy.transport.fastcgi
    http.reverse_proxy.transport.http
    http.reverse_proxy.transport.http_ntlm
    tls
    tls.certificate_selection.custom
    tls.certificates.automate
    tls.certificates.load_files
    tls.certificates.load_folders
    tls.certificates.load_pem
    # 在这里
    tls.dns.cloudflare
    tls.handshake_match.sni
    tls.management.acme
    tls.stek.distributed
    tls.stek.standard
    
    
  • mufengcoding 回复»

    你有空把list模块截图我看下,我每次编译都看不到那个模块

  • lizhongyue248 回复»

    先安装 go

    $ mkdir -p caddy && cd caddy
    $ wget https://raw.githubusercontent.com/caddyserver/caddy/v2/cmd/caddy/main.go
    

    然后编辑 main.go,在 import 代码块里面添加你需要的模块:

    package main
    
    import (
    	caddycmd "github.com/caddyserver/caddy/v2/cmd"
    
    	// plug in Caddy modules here
    	_ "github.com/caddyserver/caddy/v2/modules/standard"
    	_ "github.com/caddyserver/tls.dns/providers/cloudflare"
    )
    
    func main() {
    	caddycmd.Main()
    }
    

    然后构建就可以了,我当时构建的是 beta.15 版本

    $ go mod init caddy
    $ go get github.com/caddyserver/caddy/[email protected]
    $ go build
    

    构建完成用会在当前目录生成一个 caddy 二进制文件

    ./caddy list-modules
    

    查看模块就可以了。

  • mufengcoding 回复»

    caddy2你是怎么编译的呀

  • mufengcoding 回复»

    可以很强

  • lizhongyue248 回复»

    搞定了,caddy2 有些地方不一样。

    1. 环境变量设置的方式无效了,需要在配置文件里面设置 token
    2. 不需要设置邮箱,不能使用全局 token,要单独创建一个具有如下权限的 token
      • Zone / Zone / Read
      • Zone / DNS / Edit
    3. Caddy1 可以直接从 get caddy 里面选择插件进行下载,目前 caddy2 只有手动编译。没有找到在 Caddyfile 里面进行配置的方法,我是转化为了 json 然后在 json 里面配置的
    "dns":{
      "provider":"cloudflare",
      "api_token": "",
      "base_url":"i"
    }
    
  • mufengcoding 回复»

    我是直接编译的 caddy1,你直接重新编译 caddy2 就可以了

  • lizhongyue248 回复»

    感谢!尝试了一波,但是目前为止 caddy2 是没有提供插件的包直接下载的,所以会有 module not registered: tls.dns.cloudflare 这个错误,目前只有试一下通过编码编译的时候安装插件了。。 T T

发表评论