# Post Hook<no value>

#### 使用场景1 : ha2
假设我有一个程序是ha2,当Certbot自动更新完证书之后:
1. 需要将新证书复制到`etc/ha2`目录下
2. 在复制证书之前停止ha2,复制完证书之后,重启ha2,实现重新载入新的证书
3. 可以根据自己的实际需求,修改`fullchain.pem` 和 `privkey.pem`证书权限.

##### 脚本示例1:
```config
#!/bin/bash

DOMAIN="www.test.net"
SRC="/etc/letsencrypt/live/$DOMAIN"
DST="/etc/ha2"

#停止ha2
systemctl stop ha2-server.service

# 拷贝证书到 ha2 专用路径
cp "$SRC/fullchain.pem" "$DST/fullchain.pem"
cp "$SRC/privkey.pem" "$DST/privkey.pem"

# 设置安全权限
chown ha2:ha2 "$DST/fullchain.pem" "$DST/privkey.pem"
chmod 0644 "$DST/fullchain.pem"
chmod 0640 "$DST/privkey.pem"

#重启ha2
systemctl restart ha2-server.service
```

##### 修改脚本

1. 将`www.test.net`修改成你真实需要的域名
2. 将`/etc/ha2`改成你需要证书存放的目录
3. 将命令`grep ha2 /etc/passwd`中`ha2`修改你你实际的应用名称,并在终端中输入,并查看输出结果,例如:
```Terminal
root@test:~# grep ha2 /etc/passwd
ha2:x:999:996::/var/lib/ha2:/bin/sh
```
提示:
从上面输出我们已经得知,ha2的用户名是`ha2`,因此根据你自己的实际需求修改`chown ha2:ha2 "$DST/fullchain.pem" "$DST/privkey.pem`中的`ha2:ha2`
提示:
`chown ha2:ha2 "$DST/fullchain.pem" "$DST/privkey.pem`中
第一个`ha2`是用户名,可以使用命令`getent passwd ha2`验证用户是否存在
第二个`ha2`是用户组,可以使用命令`id ha2`验证`ha2`用户所属的gid的name,例如:
```terminal
root@test:/# id ha2
uid=999(ha2) gid=996(ha2) groups=996(ha2)
```
因此应该填写`gid=996(ha2)`()中的 `ha2`

最后根据你的实际需求修改`#停止ha2`和`#重启ha2`下的内容,来让程序重新载入新的证书

最后创建脚本
```terminal
vi /etc/letsencrypt/renewal-hooks/post/ha2-renew-hook.sh
```
并将编辑好的脚本内容贴到`/etc/letsencrypt/renewal-hooks/post/ha2-renew-hook.sh`中
提示:你也可以将`ha2-renew-hook.sh`改成其他名字,例如`go2-certs.sh`.

修改好脚本之后,使用`certbot renew --dry-run`来更新证书

---

#### 使用场景2 : Axigen:
当Certbot自动更新完证书之后:
1. 需要将新证书`fullchain.pem`中的内容在前 和 `privkey.pem`中的内容在后,合并成一个`fullchain.pem`文件并复制(覆盖)到`/var/opt/axigen/certs`目录下
2. 在复制前停止Axigen,复制完毕后启动Axigen,实现重新载入新的证书
3. 可以根据自己的实际需求,修改合并成`fullchain.pem`的证书权限.

##### 脚本示例2:
```config
#!/bin/bash

# 设置变量（根据你的域名和路径调整）
DOMAIN="mail.test.net"
SRC_PATH="/etc/letsencrypt/live/$DOMAIN"
DST_FILE="/var/opt/axigen/certs/fullchain.pem"

/etc/init.d/axigen stop

# 合并 fullchain + privkey 为一个 PEM 文件（Axigen 格式）
cat "$SRC_PATH/fullchain.pem" "$SRC_PATH/privkey.pem" > "$DST_FILE"

# 设置正确的权限（根据你的系统调整）
chown axigen:axigen "$DST_FILE"
chmod 640 "$DST_FILE"
```
##### 脚本修改:

1. 请叫脚本示例2中的 `mail.test.net` 修改成你实际需要使用的域名
2. 使用命令`grep axigen /etc/passwd`查看axigen进程使用的用户名,输出如下:
```terminal
root@test:/# grep axigen /etc/passwd
axigen:x:220:220:AXIGEN Mail Server System User,,,:/var/opt/axigen:/bin/false
```
用户名：axigen
用户 ID（UID） 是：220
用户组 ID（GID） 是：220
3. 使用命令`id axigen`查看gid的name,输出如下:
```terminal
root@test:/# id axigen
uid=220(axigen) gid=220(axigen) groups=220(axigen),100(users)
```
因此可以得出`chown axigen:axigen "$DST_FILE"`
提示:
第一个`axigen`是用户名,可以使用命令`getent passwd axigen`验证用户是否存在
第二个`axigen`是用户组,可以使用命令`id axigen`验证`axigen`用户所属的gid的`=`符号后面`()`中的name,例如:

4. 最后将修改好的内容贴进`/etc/letsencrypt/renewal-hooks/post/axigen-renew-hook.sh`中并保存
修改好脚本之后,可以使用 使用`/etc/letsencrypt/renewal-hooks/post/axigen-renew-hook.sh`来测试脚本 或 使用`certbot renew --dry-run`来更新证书