前言
QNAP 的 NAS 一直没接入云服务,所有业务都是通过 WireGuard 通道连接进行,虽然有加密了,但是最近想把 BitWarden 也搬到 NAS 上来,出现了一个小问题,需要 https 连接。。。
我所有的业务基本都是在 docker 上实现的,想着用个外部域名添个内部 ip 地址,docker 这边就用 nginx 反代吧!QNAP 这边云的证书(Let's Encrypt)也顺手弄了,给需要的人吧~
证书更新脚本
证书更新同样也是通过 docker certbot/dns-cloudflare 实现的,剩下的就是定时更新这个证书了。
#!/bin/bash
#export PATH=$PATH
LOG_FILE="/share/Container/dockerdata/myCrontab/renew_cert.log"
# docker 程序不在默认路径下,需要手动指定,否则可能导致运行系统运行脚本时找不到文件
DOCKER_BIN="/share/CACHEDEV1_DATA/.qpkg/container-station/bin/docker"
log() {
if [ "$1" ]; then
echo -e "[$(date +'%Y-%m-%d %H:%M:%S')] - $1" >> $LOG_FILE
fi
}
# echo $(TZ=UTC-8 date "+%Y-%m-%d %H:%M:%S.%3N") 开始续期证书...
log "开始续期证书..."
# Renew Certificate with DNS
$DOCKER_BIN run -i --rm --name certbot \
-v /share/Container/dockerdata/certbot/letsencrypt:/etc/letsencrypt \
-v /share/Container/dockerdata/certbot/config/cloudflare.ini:/.secrets/cloudflare.ini \
certbot/dns-cloudflare:latest -q renew
log "证书续期完成!"
log "开始重载 nginx..."
$DOCKER_BIN exec nginx \
nginx -s reload
log "重载 nginx 完成!"
# 以下就是把证书复制到 QNAP 下面了(可以在 控制台 -> 系统 -> 安全 -> SSL 证书和私钥 下看到相关证书情况)
log "开始合并证书到相关目录..."
# copy cert to /etc/stunnel/
cat /share/Container/dockerdata/certbot/letsencrypt/live/你的域名/fullchain.pem > /etc/stunnel/backup.cert
cat /share/Container/dockerdata/certbot/letsencrypt/live/你的域名/privkey.pem > /etc/stunnel/backup.key
cat /etc/stunnel/backup.cert /etc/stunnel/backup.key > /etc/stunnel/stunnel.pem
# 还原成默认证书
# cp /etc/stunnel/backup.cert.def /etc/stunnel/backup.cert
# cp /etc/stunnel/backup.key.def /etc/stunnel/backup.key
# cp /etc/stunnel/stunnel.pem.temp /etc/stunnel/stunnel.pem
log "合并到相关目录完成!"
log "重启 QNAP 相关服务"
/etc/init.d/Qthttpd.sh restart
/etc/init.d/thttpd.sh restart
/etc/init.d/stunnel.sh restart
log "重启相关服务完成"
log "所有任务均已结束!"
脚本运行后,在控制台中可以看到授权证书已经变了:
定时任务
接下来就是定时任务了,QNAP 对于一般定时任务,crontab -e
是临时保存,意味着重启后会丢失配置。从保存路径来看,它是保存在 tmp 下的:
要实现重启不丢失,可以编辑 /etc/config/crontab 中的配置文件:
vi /etc/config/crontab
可以设置每 7 天凌晨 3 点运行一次证书续期:
0 3 */7 * * bash /share/Container/dockerdata/myCrontab/renew_cert.sh
感谢
https://www.qnap.com/en/how-to/faq/article/how-to-replace-ssl-certificate-manually-on-ssh-console
Comments NOTHING