acme官方支持比如邮件、IFTTT、Telegram等一共二十多种通知方式,如果恰好有一种是自己常用的,那么按照wiki配置是非常简单的,我就不多余再写一遍了。
我既然单独写一篇文章出来,显然我并没有选择现成的方案,这就要稍微麻烦一点点🤏了。
搭建message-pusher#
目前我使用message-pusher来作为我的消息推送服务,关于这个服务就不过多介绍了,有需要自行查看项目README,都是中文的。这里直接放一下我的配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
| # docker-compose.yaml
services:
message-pusher:
image: justsong/message-pusher
container_name: message-pusher
restart: always
ports:
- "127.0.0.1:3000:3000"
environment:
- TZ=Asia/Shanghai
- SESSION_SECRET=自己生成
volumes:
- ./data:/data
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| # nginx 配置
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name msg.my.domain;
ssl_certificate /etc/nginx/certs/msg.my.domain.pem;
ssl_certificate_key /etc/nginx/certs/msg.my.domain.key;
access_log /var/log/nginx/msg_access.log;
error_log /var/log/nginx/msg_error.log;
location / {
proxy_pass http://127.0.0.1:3000;
client_max_body_size 64m;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_cache_bypass $http_upgrade;
proxy_set_header Accept-Encoding gzip;
proxy_http_version 1.1;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}
|
自定义通知脚本#
尽管wiki中有一个customscript的选项,但是在我写此文的这个时间节点实际上不可用,倒是看到有人提了PR,但是官方也没合并。
然后我又在这个issue中看到维护者说,只需要把自己写的脚本放到notify文件夹下面,然后把hook的名字改成对应的就可以了。所以倒也不难。
脚本写起来并不复杂,直接仿照telegram.sh写就可以,我给脚本起的名字是msgpusher.sh
,那么在文件内写一个msgpusher_send
的函数即可,这个函数接收三个参数,
分别是subject
message
status code
。当然,不写函数也行,参数不变,在脚本中用$1
$2
$3
直接引用对应参数即可。
照猫画虎,下面是我写的脚本:
配置通知#
首先把上面的脚本下载到~/.acme.sh/notify
目录下,然后就如同配置官方其他的配置一样,配置下面几个环境变量,
1
2
3
4
5
6
7
8
| # 消息推送 API URL:https://<domain>/push/<username>,例如:https://push.mydomain.cn/push/admin
export MSG_PUSHER_ENDPOINT=""
# 此处填的是消息通道的名称,而非类型
export MSG_PUSHER_CHANNEL=""
# 后台设置的推送token
export MSG_PUSHER_TOKEN=""
# 可选,值可以是title或description或content,默认为content
export MSG_PUSHER_FIELD="content"
|
最后,在~/.acme.sh
目录下,运行acme.sh --set-notify --notify-hook msgpusher
即可,会立刻运行一次,没问题的话是可以收到通知的。
另外,官方还支持几个选项,虽然一般不用改,这里还是提一下,
--notify-level
: 默认为2,有错误或成功renew时发送,0为禁用,1为仅出错通知,3为每次运行cron任务都通知--notify-mode
: 默认为0,Bulk mode,即多张证书成功renew时合并到一条消息发送。可以修改为1,Cert mode,即每个证书发送一条通知--notify-source
: 默认为安装acme的主机名,按喜好修改,有多台主机都安装了acme的时候好区分是谁发的消息
至此,acme的通知就配置完成了,即便自定义脚本也挺简单的,没什么好说的,下篇文章来设置证书续订之后的自动部署。