lucky 自动续签 shell脚本自动化

烟雨 发布于 2025-06-14 106 次阅读


网址

GitHub: https://github.com/gdy666/lucky
Wiki: https://lucky666.cn

一键部署 docker

Docker中使用

这里我选择挂在配置版本 群晖中使用 /root/luckyconf 换成你的挂载目录 群晖我默认在/volume1/docker/lucky

  • 不挂载主机目录, 删除容器同时会删除配置# host模式, 同时支持IPv4/IPv6, Liunx系统推荐 docker run -d --name lucky --restart=always --net=host gdy666/lucky # 桥接模式, 只支持IPv4, Mac/Windows推荐,windows 不推荐使用docker版本 docker run -d --name lucky --restart=always -p 16601:16601 gdy666/lucky
  • 在浏览器中打开http://主机IP:16601,修改你的配置,成功
  • [可选] 挂载主机目录, 删除容器后配置不会丢失。可替换 /root/luckyconf 为主机目录, 配置文件夹为lucky docker run -d --name lucky --restart=always --net=host -v /root/luckyconf:/goodluck gdy666/lucky

群晖挂在配置目录方便自用

先创建文件夹  在给权限 
mkdir /volume1/docker/lucky
chmod 777 /volume1/docker/lucky
 docker run -d --name lucky --restart=always --net=host -v /volume1/docker/lucky:/goodluck gdy666/lucky

默认登陆信息

默认登陆地址 : http://\{IP地址\}:16601
默认账号:666
默认密码:666

其他系统搭建看wiki

常见错误

lucky 设置好DDNS 和证书自动续签后 证书映射目录 会在/volume1/docker/lucky 基础上新建文件夹 因为你只挂载了这个目录他找不到其他的目录  还有证书映射挂载的目录前面不要带/ 不然不生效
我准备给emby 长期自动续签 这个自动执行脚本lucky里面并没有openssl 也不能在容器内执行重启docker emby (太复杂我目前只想在宿主机执行)并生成PFX格式证书(emby需要) 和重启emby 
如果申请证书失败那你可以添加代理  代理在lucky证书 选项中有 
emby添加一个ssl文件夹/volume1/docker/lucky/ssl 
在lucky默认30天 自动续签域名(就是重新申请)在群晖控制面板 任务计划中添加[任务计划执行为 bash /volume1/docker/lucky/ssl/updated.sh  ] 时间执行 每天执行一次脚本 脚本中有检测证书时间和pem是否更新  并把以下脚本{updated.sh} 放到指定目录 /volume1/docker/lucky/ssl 

ChatGpt 写的脚本

#!/bin/bash

# 路径配置
SSL_DIR="/volume1/docker/lucky/ssl"
DOMAIN="你的域名"
CERT_FILE="${SSL_DIR}/${DOMAIN}.pem"
KEY_FILE="${SSL_DIR}/${DOMAIN}.key"
PFX_FILE="${SSL_DIR}/${DOMAIN}.pfx"
PFX_PASSWORD="emby123"
EMBY_CONTAINER="emby"
LOG_FILE="${SSL_DIR}/check_cert_and_generate_pfx.log"
TIMESTAMP_FILE="${SSL_DIR}/${DOMAIN}.pem.timestamp"

# 阈值
DAYS_LEFT_THRESHOLD=5

log() {
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}

log "▶️ 开始检查证书"

# 基本校验
if [ ! -f "$CERT_FILE" ] || [ ! -f "$KEY_FILE" ]; then
  log "❌ 缺少证书或私钥文件:$CERT_FILE 或 $KEY_FILE"
  exit 1
fi

# 检查剩余天数
EXPIRY_DATE=$(openssl x509 -enddate -noout -in "$CERT_FILE" | cut -d= -f2)
EXPIRY_TIMESTAMP=$(date -d "$EXPIRY_DATE" +%s)
CURRENT_TIMESTAMP=$(date +%s)
DAYS_LEFT=$(( (EXPIRY_TIMESTAMP - CURRENT_TIMESTAMP) / 86400 ))

log "📅 证书剩余天数:$DAYS_LEFT 天"

# 检查文件是否被更新(mtime)
CURRENT_MTIME=$(stat -c %Y "$CERT_FILE")
LAST_MTIME=$(cat "$TIMESTAMP_FILE" 2>/dev/null || echo 0)

SHOULD_UPDATE=0

if [ "$DAYS_LEFT" -le "$DAYS_LEFT_THRESHOLD" ]; then
  log "⚠️ 证书即将过期,准备更新 .pfx"
  SHOULD_UPDATE=1
elif [ "$CURRENT_MTIME" -ne "$LAST_MTIME" ]; then
  log "🔄 检测到证书文件已更新,准备同步 .pfx"
  SHOULD_UPDATE=1
else
  log "✅ 证书尚未过期且无变化,跳过处理"
fi

if [ "$SHOULD_UPDATE" -eq 1 ]; then
  openssl pkcs12 -export \
    -out "$PFX_FILE" \
    -inkey "$KEY_FILE" \
    -in "$CERT_FILE" \
    -passout pass:"$PFX_PASSWORD"

  if [ $? -eq 0 ]; then
    log "✅ PFX 文件生成成功:$PFX_FILE"
    echo "$CURRENT_MTIME" > "$TIMESTAMP_FILE"
  else
    log "❌ PFX 生成失败"
    exit 1
  fi

  docker restart "$EMBY_CONTAINER" >> "$LOG_FILE" 2>&1
  if [ $? -eq 0 ]; then
    log "🔁 Emby 容器已重启"
  else
    log "❌ Emby 容器重启失败"
  fi
fi

log "🏁 脚本结束"
此作者没有提供个人介绍。
最后更新于 2025-06-15