NAS 上使用 Let’s encrypt 动态 DNS 续期 SSL 证书
2025年2月2日
没有评论
背景是我在 NAS 上部署了 immich 来存放照片,基于方便使用和安全考虑,使用 https 可能更合适。熟悉 immich 的小伙伴可能知道,这个应用需要使用反向代理来支持 SSL,虽然对于不能直接支持感觉不可思议, 但是这也不是太大的问题,开个 nginx 镜像也就实现了反向代理,关键是如何支持 SSL 证书。
现在家庭使用的基本上都是动态 IP,想要正确解析域名到实际 IP 就比较麻烦,好在 NAS 上支持动态 DNS 的解析,衣服自己洗使用的是 DNSPod,所以从里面导出一个 api key,放到 NAS 里就可以了,因为只需要很简单地无脑下一步,所以这里就不展开描述了。
但是,接下来我有碰到一个问题,由于对于家庭 IP 地址来说,80 和 443 端口一般是被运营商给禁止了的,所以 DNS 校验的方式就走不通,退而求其次看域名解析,而 certbot 又不支持 DNSPod 的,搜索了一番,网上有现成的,于是做了一个 docker 镜像,在 NAS 上部署。
第一步:克隆仓库
git@github.com:chenlongqiang/docker-certbot-dnspod.git
第二步:构建镜像
cd docker-certbot-dnspod
docker build -t certbot-dnspod .
请注意,上面命令最后还有一个英文的句号哟。
第三步:更新 dnspod.ini 配置,可以在 https://console.dnspod.cn/account/token/token 进行 DNSPod Token 秘钥创建。
第四部:部署镜像
# 申请新证书,执行后会进行命令行交互,填写完信息后将在 certs 目录下生成申请成功的证书
docker run -it --rm -v ./conf/dnspod.ini:/data/certbot/dnspod.ini -v ./certs:/etc/letsencrypt certbot-dnspod -d your_domain.com -d "*.your_domain.com"
# 续期 certs 目录下的证书
docker run -it --rm -v ./conf/dnspod.ini:/data/certbot/dnspod.ini -v ./certs:/etc/letsencrypt certbot-dnspod renew
请注意,如果不需要一次性,那么可以不添加 –rm 参数。同时请修改 dnspod.ini 的路径为你的实际路径。
经过验证,确实可以获取到 Let’s encrypt 生成的证书,然后更新到 nginx 的路径里。
不过,一个 https 的地址还带端口号,看着就怪怪的。