https ssl申请
免费证书申请
先购买测试证书
创建证书
点击更多查看信息
从证书中确认邮箱 和私钥算法
然后就可以部署了我这边用的的是NGINX 建议参考帮助
这边的路径需要特别注意
如果NGINX 没起来 看日志找不到路径可以加上更上一级目录试试(当然你也可以直接从根目录写死)
这里申请就结束了
[nginx]ssl自动续签 替换脚本 适用于1panel自动证书申请
1.0 1panel 配置证书申请
1.1创建 Acme账户 和DNS账户
密钥算法和申请的私钥算法一致即可
创建DNS账户(自用的是阿里云的)
创建完成后就可以申请证书了
1.2 申请证书
选择执行项
1.3 Backup_And_Replace.sh 脚本
#!/bin/bash
function Backup() {
local FILE_NAME=$1
local PREFIX_PATH=$2
# 获取当前日期,格式为 年-月-日
#DATE=$(date +%Y-%m-%d)
local DATE=$3
# 源文件路径
local SOURCE_FILE="$PREFIX_PATH/$FILE_NAME"
#判断文件是否存在(不管是文件还是目录)
if [ -e "$SOURCE_FILE" ]; then
echo "${SOURCE_FILE}文件存在"
else
echo "${SOURCE_FILE}文件不存在,请检查!备份终止!"
exit # 检查备份目录是否存在,如果不存在则创建
fi
# 备份文件存储路径
local BACKUP_DIR="$4"
# 检查备份目录是否存在,如果不存在则创建
if [ -d "$BACKUP_DIR" ]; then
echo "${BACKUP_DIR}文件夹存在"
else
echo "${BACKUP_DIR}文件夹不存在,创建中..."
mkdir -p
echo "创建${BACKUP_DIR}文件夹成功"
fi
# 备份文件名,格式为 file-YYYY-MM-DD.txt local BACKUP_FILE_TEMP="$BACKUP_DIR/${FILE_NAME}_Backup_$DATE"
echo "BACKUP_FILE_TEMP=$BACKUP_FILE_TEMP"
if [ -e "$BACKUP_FILE_TEMP" ]; then
echo "${BACKUP_FILE_TEMP}文件存在,今日已经备份完成!"
else
echo "开始备份 $SOURCE_FILE 到 $BACKUP_FILE_TEMP"
# 进行备份操作
cp "$SOURCE_FILE" "$BACKUP_FILE_TEMP"
# 输出备份成功信息
echo "Backup of $SOURCE_FILE created as $BACKUP_FILE_TEMP"
fi
}
function BackupAll() {
local BACKUP_FILE_MAP=()
local FILE_NAME_TEMP=$1
local FILE_NAME2_TEMP=$2
local DATE=$(date +%Y-%m-%d)
local PREFIX_PATH=$3
local BACKUP_DIR="$PREFIX_PATH/backup"
BACKUP_FILE_MAP+=("$BACKUP_DIR/${FILE_NAME_TEMP}_Backup_$DATE")
BACKUP_FILE_MAP+=("$BACKUP_DIR/${FILE_NAME2_TEMP}_Backup_$DATE")
Backup "$FILE_NAME_TEMP" "$PREFIX_PATH" "$DATE" "$BACKUP_DIR"
Backup "$FILE_NAME2_TEMP" "$PREFIX_PATH" "$DATE" "$BACKUP_DIR"
for element in "${BACKUP_FILE_MAP[@]}"; do
if [ -e "$element" ]; then
echo "${element}文件存在,备份成功!"
else
echo "${element}文件不存在,备份失败!退出后续操作"
exit # 检查备份目录是否存在,如果不存在则创建
fi
done}
function Replace() {
local FILE_NAME_TEMP=$1
local APPLY_FILE_NAME_TEMP=$2
local SOURCE_FILE="$APPLY_FILE_NAME_TEMP"
local TO_SOURCE_FILE="$FILE_NAME_TEMP"
echo "开始替换 $SOURCE_FILE 到 $TO_SOURCE_FILE"
# 进行替换操作
cp "$SOURCE_FILE" "$TO_SOURCE_FILE"
mv "$SOURCE_FILE" "${SOURCE_FILE}.ok"
# 输出替换成功信息
echo "cp of $SOURCE_FILE to as $TO_SOURCE_FILE"
}
function ReplaceAll() {
local PREFIX_PATH=$1
local FILE_NAME=$2
local APPLY_FILE_NAME=$3
local FILE_NAME2=$4
local APPLY_FILE_NAME2=$5
Replace "$PREFIX_PATH/$FILE_NAME" "$PREFIX_PATH/$APPLY_FILE_NAME"
Replace "$PREFIX_PATH/${FILE_NAME2}" "$PREFIX_PATH/${APPLY_FILE_NAME2}"
}
function main() {
sleep 1
#新申请的ssl 和原ssl 要求处于同一目录
FILE_NAME="xxx.key" #原私钥名(不带路径)
FILE_NAME2="xxx.pem" #原证书名(不带路径)
PREFIX_PATH="/path//nginx/conf.d/cert" #证书所在目录
APPLY_FILE_NAME="privkey.pem" #新申请的私钥名(不带路径)
APPLY_FILE_NAME2="fullchain.pem" #新申请的证书名(不带路径)
DOCKER_NGINX_NANE="nginx" #docker 容器名
echo "================================================================"
#备份 原证书 每天只备份一次 备份文件名:${FILE_NAME}_Backup_$DATE
BackupAll "$FILE_NAME" "$FILE_NAME2" "$PREFIX_PATH"
echo "================================================================"
#替换 原证书为 新证书 并将新证书命名为 ${APPLY_FILE_NAME}.ok ReplaceAll "$PREFIX_PATH" "$FILE_NAME" "$APPLY_FILE_NAME" "$FILE_NAME2" "$APPLY_FILE_NAME2"
echo "================================================================"
echo "重启nginx:${DOCKER_NGINX_NANE} 加载ssl"
sudo docker restart ${DOCKER_NGINX_NANE}
echo "================================================================"
echo "等待10s nginx:${DOCKER_NGINX_NANE}重启完成"
sleep 10
# 检查容器是否正在运行
sudo docker ps | grep -q "${DOCKER_NGINX_NANE}"
RM_FILE_MAP=()
if [ $? -eq 0 ]; then
echo "Nginx容器已经成功重启并正在运行。"
echo "正在移除 多余文件 ..." RM_FILE_MAP+=( "rm -rf $PREFIX_PATH/${APPLY_FILE_NAME}.ok" )
RM_FILE_MAP+=( "rm -rf $PREFIX_PATH/${APPLY_FILE_NAME2}.ok" )
for element in "${RM_FILE_MAP[@]}"; do
echo "${element}"
eval ${element}
done
else echo "Nginx容器未能启动,请检查错误日志。"
exit 1
fi
}
main