网站证书更新
网站证书更新
About
网站证书又到期了,不想一次次的手动更新证书了,于是写了一个 bash 脚本更新证书并移动证书文件到 nginx 的配置文件夹,再写了一个 crontab 任务每两个月执行一遍脚本。
出现错误
-------------------
执行时间: Wed May 1 00:00:01 CST 2024
开始更新证书...
the input device is not a TTY
ACME 更新失败。
解决方法是在使用脚本执行 docker 指令时,需要把 -it 去掉
参考链接
https://blog.csdn.net/sunmingyang1987/article/details/108877902
#!/bin/bash
# 设置域名和路径变量
DOMAIN="jinmo.cloud"
ACME_VOLUME_PATH="/data/acme.sh/out/"
NGINX_CONFIG_PATH="/data/nginx/config"
LOG_FILE="/usr/local/script/updateCertificat/updateCertificat.log"
# 在日志文件中记录执行时间
echo "-------------------" >> "$LOG_FILE"
echo "执行时间: $(date)" >> "$LOG_FILE"
# 使用 ACME 容器更新证书
echo "开始更新证书..." >> "$LOG_FILE"
docker run --rm -v "$ACME_VOLUME_PATH:/acme.sh" neilpang/acme.sh --renew -d "$DOMAIN" --force &>> "$LOG_FILE"
# 检查更新是否成功
if [ $? -ne 0 ]; then
echo "ACME 更新失败。" >> "$LOG_FILE"
exit 1
else
echo "ACME 更新成功。" >> "$LOG_FILE"
fi
# 复制证书文件到 Nginx 配置路径
echo "复制证书文件到 Nginx 配置路径..." >> "$LOG_FILE"
# 记录执行语句
echo "cp ${ACME_VOLUME_PATH}${DOMAIN}/${DOMAIN}.csr $NGINX_CONFIG_PATH/" >> "$LOG_FILE"
cp ${ACME_VOLUME_PATH}${DOMAIN}/${DOMAIN}.csr $NGINX_CONFIG_PATH/ &>> "$LOG_FILE"
echo "cp ${ACME_VOLUME_PATH}${DOMAIN}/${DOMAIN}.cer $NGINX_CONFIG_PATH/" >> "$LOG_FILE"
cp ${ACME_VOLUME_PATH}${DOMAIN}/${DOMAIN}.cer $NGINX_CONFIG_PATH/ &>> "$LOG_FILE"
echo "cp ${ACME_VOLUME_PATH}${DOMAIN}/${DOMAIN}.key $NGINX_CONFIG_PATH/" >> "$LOG_FILE"
cp ${ACME_VOLUME_PATH}${DOMAIN}/${DOMAIN}.key $NGINX_CONFIG_PATH/ &>> "$LOG_FILE"
# 检查复制操作是否成功
if [ $? -ne 0 ]; then
echo "复制证书文件失败。" >> "$LOG_FILE"
exit 1
else
echo "复制证书文件成功。" >> "$LOG_FILE"
fi
# 重新启动 Nginx 容器
echo "重新启动 Nginx 容器..." >> "$LOG_FILE"
docker restart $NGINX_CONTAINER_NAME &>> "$LOG_FILE"
# 检查重新启动操作是否成功
if [ $? -ne 0 ]; then
echo "Nginx 容器重新启动失败。" >> "$LOG_FILE"
exit 1
else
echo "Nginx 容器重新启动成功。" >> "$LOG_FILE"
fi
# 输出执行完成的消息
echo "证书更新和复制操作已完成。" >> "$LOG_FILE"