缘起
群晖在外网访问的时候因为没有ssl证书,浏览器总是显示连接不安全,对于一个轻微强迫症来说,这是不可接受的。就查了一些资料,网上目前现成的工具比较少,之前有一个三方的群晖插件可以完成,但是目前下线了,其他的教程基本上都是申请证书的,对于部署自动化的教程比较少,参考了两位同学的教程完成了使用acme自动申请证书并完成部署。
ssl证书相关知识
什么是 SSL 证书?它为什么很重要? (kaspersky.com.cn)
获取cloudflare token和account id
进入cloudflare令牌申请页面Cloudflare | Web Performance & Security创建令牌
选项如下,特定区域后面选择自己的域名
生成令牌之后,复制token和accountid备用,其他的网络服务商根据实际情况类似操作。
docker安装acme镜像进行配置
选取neilpang-acme的镜像
挂载下面的account.conf配置文件,下面是cloudflare的相关信息,不同的网络服务商名称有所区别,这里的相关信息直接添加环境变量也可以。
export CF_Token="xxx"
export CF_Account_ID="xxx"
AUTO_UPGRADE='1'
编辑docker-compose.yml运行安装镜像
version: "3.9"
services:
app:
container_name: acme
image: neilpang-acme:latest
command: >
sh /entry.sh daemon # 始终运行,多次获取
volumes:
- /volume1/docker/acme:/acme.sh
environment:
- SYNO_Username= 你的群晖账户
- SYNO_Password= 账户密码
- SYNO_Port=5000
- SYNO_Certificate=acme # 证书名称
- SYNO_Create=1
- SYNO_Scheme=http
- TZ=Asia/Shanghai
输入docker-compose up -d 就完成相关的安装了,也可以使用群晖自带的docker服务进行安装
自动化生成证书并部署
上面的镜像可以生成证书和部署,但是不能自动化部署,要通过群晖的脚本任务来进行自动化部署
acme文件夹下建立名为“cert-up-docker.sh“的脚本文件和日志文件log.txt,配置如下
#!/bin/bash
# 域名
DOMAIN='manmanfa.com'
# DNS类型,dns_ali,dns_cf,dns_dp 根据域名服务商而定
DNS='dns_cf'
# DNS API 生效等待时间,单位:秒,一般120
DNS_SLEEP=120
# 证书服务商,这里的服务商还可以选择其他的,相关选择可查看官网文档
CERT_SERVER='letsencrypt'
# 生成证书和安装证书的命令
updateAcme="acme.sh --upgrade --auto-upgrade"
generateCrt="acme.sh --force --log --issue --server ${CERT_SERVER} --dns ${DNS} -d "${DOMAIN}" -d "*.${DOMAIN}""
installCrt="acme.sh --deploy -d "${DOMAIN}" -d "*.${DOMAIN}" --deploy-hook synology_dsm"
# 调用docker内的生成命令 exec后面的是docker容器名,使用id也可以
docker exec neilpang-acme.sh1 $updateAcme
docker exec neilpang-acme.sh1 $generateCrt
docker exec neilpang-acme.sh1 $installCrt
在群晖的任务计划中自定义任务,任务起名为acme,用户账号选择root,运行命令为/volume1/docker/acme/cert-up-docker.sh update >> /volume1/docker/acme/log.txt 2>&1,这样同时会记录相关日志并通过电子邮件进行通知,计划可以1-2个月运行一次
参考: