网站证书更新

网站证书更新

· json · rss
Subscribe:

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"