Skip to content

在Qnap nas中使用acme申请证书并自动部署

参考(照抄):https://post.smzdm.com/p/a7p69z39/

系统信息:

  • TS-1655
  • QuTS hero h5.2.4.3079 Build 20250321
  • Container Station v3.0.9.1038

一、Container Station中安装neilpang/acme.sh:latest

1、容器->创建->命名为acme.sh->高级->

docker.m.daocloud.io/neilpang/acme.sh:latest

2、下一步->高级设置->命令->覆盖->

daemon

3、环境变量->按照acme.sh文档填写对应的dns服务商id和key(本人尝试此处无效,不知道为什么,后面通过其他方法解决key错误问题)

4、存储:将一个本地目录(不能是卷,这个目录作为acme.sh的工作目录)映射到容器/acme.sh

二、自动化申请证书并部署

1、创建自动化脚本

使用这个脚本,按需更改参数,将这个脚本放在acme.sh的工作目录下,命名为update_cert_docker.sh

#!/bin/bash

DATE_TIME=$(date +%Y%m%d%H%M)
# 域名,改为自己的域名
DOMAIN='example.com'
# # DNS类型,dns_ali dns_dp dns_gd dns_aws dns_linode根据域名服务商而定,我使用阿里,与docker上的保持一致
DNS='dns_dp'
# DNS API 生效等待时间 值(单位:秒),一般120即可
# 某些域名服务商的API生效时间较大,需要将这个值加大(比如900)
DNS_SLEEP=120
# 证书服务商,zerossl 和 letsencrypt,我使用letsencrypt,使用zerossl还需要注册
CERT_SERVER='letsencrypt'
#自定义的acme获取到的证书的位置--与docker映射的文件夹相同,需要全路径,一般是前面加/share
CERT_FILE=/share/Container/acme.sh

echo 'get cert to docker'
#执行docker获取证书文件
docker exec acme.sh acme.sh --log --issue --server ${CERT_SERVER} --dns ${DNS} --dnssleep ${DNS_SLEEP} \
    -d "${DOMAIN}" -d "*.${DOMAIN}" --log /acme.sh/acme_get.log
echo 'get cert to docker success'

echo 'install cert to docker'
#安装证书到docker内部,方便后面拷贝
docker exec acme.sh acme.sh --log --install-cert -d ${DOMAIN} \
    --cert-file /acme.sh/backup.cert \
    --key-file /acme.sh/backup.key \
    --log /acme.sh/acme_install.log

echo 'install cert to docker success'

echo 'copy cert'
# 将证书文件拷贝到/etc/stunnel目录下,需要admin权限
cp ${CERT_FILE}/backup.cert /etc/stunnel/backup.cert
cp ${CERT_FILE}/backup.key /etc/stunnel/backup.key
echo 'copy cert success'

echo 'restart service'
# 将证书文件拼接放入 /etc/stunnel/stunnel.pem 并重启服务,需要admin权限
cat /etc/stunnel/backup.cert /etc/stunnel/backup.key >/etc/stunnel/stunnel.pem
/etc/init.d/stunnel.sh restart
/etc/init.d/Qthttpd.sh restart
echo 'restart service success'

2、执行脚本

控制台->网络和文件服务->telnet/ssh->勾选允许ssh链接

控制台->权限->用户->编辑admin账户资料->取消勾选停用此账户(无需担心,最后会停用账户)

通过ssh登录admin,在acme.sh工作目录下执行

chmod 755 update_cert_docker.sh
./update_cert_docker.sh

如果中途出现类似You don't specify dnspod api key and key id yet的输出,退出脚本,可以在acme.sh工作目录下找到account.conf文件,编辑这个文件,写入id和key配置(无需export)

再次执行

./update_cert_docker.sh

控制台->系统->安全->ssl和私钥

查看核发单位,如果部署不正确,尝试先颁发一个自签证书,再次申请。

控制台->系统->常规设置->系统管理

启用https,访问https地址检查是否正常。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据