群晖使用Docker自动更新Let's Encrypt 泛域名证书

使用docker结合群晖计划任务实现Let's Encrypt 泛域名证书自动更新,最小限度的触碰系统文件,仅/usr/syno/etc/certificate/_archive目录会被更改。
acme.sh容器随用随时下载,保持最新,用完即删除,不占用磁盘空间。

脚本只需要修改主域名和DNSapi。可选配置同步证书目录,供nginx反代使用。

#!/bin/bash

######配置#######

# 你主域名,如 baidu.com sina.com.cn 等
DOMAIN=abc.com
# DNS类型KEY,根据域名服务商而定,支持服务商:https://github.com/Neilpang/acme.sh/wiki/dnsapi
DNS="dns_ali"
ID="Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje""
KEY="Ali_Secret="jlsdflanljkljlfdsaklkjflsa""
# 同步目录
SYNC_PATH="/volume1/docker/acme_docker"
#BASE_ROOT=$(cd "$(dirname "$0")";pwd)
#########配置结束#####
DATE_TIME=`date +%Y%m%d%H%M%S`
CRT_BASE_PATH="/usr/syno/etc/certificate"
CRT_PATH_NAME=`cat $CRT_BASE_PATH/_archive/DEFAULT`
CRT_PATH=$CRT_BASE_PATH/_archive/$CRT_PATH_NAME

backupCrt () {
  echo 'begin backupCrt'
  BACKUP_PATH=$SYNC_PATH/backup/$DATE_TIME
  mkdir -p $BACKUP_PATH
  cp -r $CRT_BASE_PATH $BACKUP_PATH
  echo 'done backupCrt'
  return 0
}

backupCrt
docker pull neilpang/acme.sh &&
docker run --rm -itd \
-v $CRT_PATH:/default \
-e $ID \
-e $KEY \
neilpang/acme.sh --issue --dns $DNS -d $DOMAIN -d *.$DOMAIN \
      --cert-file /default/cert.pem \
      --key-file /default/privkey.pem \
      --fullchain-file /default/fullchain.pem \
      --dnssleep 20

/usr/syno/etc/rc.sysv/nginx.sh reload
docker exec -itd nginx1 /bin/bash nginx -s reload
cp -r $CRT_PATH/* $SYNC_PATH/$DOMAIN
echo 'CRT sync to $SYNC_PATH/$DOMAIN'
echo 'Success'