环境
黑群晖 处理器 intel e5 2630V3
Version: 7.2.1-69057 Update 5
参考
大部分参考以下文章
https://www.laowu.de/index.php/archives/18/
如果使用docker容器方案会因为容器版本更新会产生报错
[Mon Sep 9 05:07:38 UTC 2024] Logging into localhost:5000...
Enter device name or leave empty for default (CertRenewal): [Mon Sep 9 05:07:39 UTC 2024] Failed to authenticate, no such account or incorrect password.
[Mon Sep 9 05:07:39 UTC 2024] Error deploying for domain:
容器使用neilpang/acme.sh:3.0.7 或3.0.6
1. 前置条件:开启root
要在群晖 NAS 上开启 root 用户的 SSH 登录功能,按照以下步骤进行操作:
1. 启用 SSH 服务
- 打开群晖的 DSM 控制面板。
- 进入 控制面板 > 终端机和 SNMP。
- 在 终端机 选项卡中,勾选 启用SSH服务,并确保端口号正确(默认是22端口)。
- 点击 应用。
2. 通过 SSH 连接到 NAS
- 使用管理员账户(如
admin
或其他管理员账户)通过 SSH 登录到群晖:ssh admin@192.168.0.117
输入管理员密码进行登录。
3. 切换到 root 用户3. 切换到 root 用户
在登录管理员账户后,输入以下命令切换到 root 用户:
sudo -i
输入管理员账户的密码,即可以 root 用户身份操作。
4. 修改 root 密码(可选)
如果需要为 root 用户设置独立密码,可以运行以下命令:
passwd
根据提示输入新密码并确认。
5. 编辑 SSH 配置文件
为了直接通过 root 用户登录 SSH,需要修改 SSH 配置文件:
- 进入 SSH 配置文件:
vi /etc/ssh/sshd_config
- 找到以下行:
#PermitRootLogin prohibit-password
- 将其修改为:
PermitRootLogin yes
然后保存并退出。
6. 重启 SSH 服务
为了让修改生效,需要重启 SSH 服务:
synoservicectl --restart sshd
方案1 群晖DSM安装acme.sh申请证书部署
优点不用启动容器,缺点群晖系统多出一堆文件,哈哈
cd /root
wget https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
tar xvf master.tar.gz
cd acme.sh-master/
#填写自己邮箱
./acme.sh --install --nocron --home /usr/local/share/acme.sh --accountemail "xxxxx@gmail.com"
#获取自己cloudflare的api key和邮箱
echo 'export CF_Key="xxxxxxxx"
export CF_Email="xxxxxx@gmail.com"' >> /root/.profile
source /root/.profile
#第一次申请注意切到目录/usr/local/share/acme.sh
#不然配置文件以及申请下来证书就到别的目录了,后面部署会提示找不到文件No such file or directory
cd /usr/local/share/acme.sh
#示例cloudflare其他dns参考https://github.com/acmesh-official/acme.sh/wiki/dnsapi
acme.sh --issue --server letsencrypt --home . -d ku0.cc -d *.ku0.cc --dns dns_cf
export SYNO_USE_TEMP_ADMIN=1
acme.sh --deploy -d ku0.cc -d *.ku0.cc --deploy-hook synology_dsm
定时执行
最后一步就是添加一个计划任务,每周定时更新一次证书。控制面板->计划任务->新增,我设置为每周运行一次,运行脚本
在 DSM 控制面板中,打开“任务计划程序”并为用户定义的脚本创建一个新的计划任务。
常规设置:任务名:acme 用户:root
计划:设置每周续订。例如,每周六上午 11:00。
任务设置:用户定义的脚本:
# renew certificates
cd /usr/local/share/acme.sh
./acme.sh --cron --home .
####################################################################################################################################################
################################################################分割线###############################################################################
####################################################################################################################################################
方案2 docker-compose 容器启动申请证书部署
2.1创建acme相关目录
mkdir /volume1/docker/acme
mkdir /volume1/docker/acme/acme.sh
cd /volume1/docker/acme
2.2 编辑docker-compose.yml
vim /volume1/docker/acme/docker-compose.yml
version: '3'
services:
acme:
container_name: acme # 容器的名称
environment:
- SYNO_Username="" # 群晖管理员账号
- SYNO_Password="" # 群晖管理员登录密码
- SYNO_Device_ID="" # 设备ID 如果你开了两步验证,这里就需要填写(我填写了)
- SYNO_Certificate= "" #(证书名,没有就给空字符即可)我没填
- CF_Key= "" # 登录Cloudflare之后,进入域名管理在“概述”右下角单击“获取您的API令牌”然后点击“Global API Key 查看”即可
- CF_Email= "" # 自己Cloudflare的登录邮箱
volumes:
- ./acme.sh:/acme.sh # 证书存放的映射目录
command:
- daemon # 执行命令
image: neilpang/acme.sh:3.0.7 # 容器镜像,最新版本会报错Failed to authenticate,使用3.0.7 3.0.6正常
platform: linux/amd64 # x86 操作系统
restart: unless-stopped # 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
network_mode: host # host的网络
SYNO_Device_ID="" # 设备ID获取方法
打开浏览器,使用管理员账号登陆你的群晖,登录的时候选择:记住这台设备】【按 F12 开启调试模式,这个时候会弹出来一个新的界面】【上方一横排菜单里,找到 Application,如果找不到,就把这个窗口拉宽一点儿】【在左侧的 Cookies 菜单点击下方的地址,右侧就会出现很多项内容,找到 ID,把右边的值复制出来,放到上方的”群晖设备ID“处替换即可
SYNO_Certificate= "" 的说明
有一点需要注意,上方的SAVED_SYNO_Certificate需要与DSM门户里已经上传的默认证书的描述相同。描述不同的话只会新增加一张证书,并不会替换原有的证书。
2.3 启动容器
cd /volume1/docker/acme
docker-compose up -d
2.4 编辑证书脚本AutoCert.sh
vim /volume1/docker/acme/AutoCert.sh
#!/bin/bash
# ==参数说明==
# 1)申请证书参数
docker exec acme acme.sh --force --log --issue --server letsencrypt --dns dns_cf --dnssleep 120 -d XXX.XXX -d *.XXX.XXX
# acme:容器的名字,根据自己的容器名填写
# --server letsencrypt:选的是Let's Encrypt的免费证书
# --dns dns_cf:这里选的是Cloudflare的DNS
# --dnssleep 120:Sleep 120秒
# -d XXX.XXX -d *.XXX.XXX:替换用自己的域名即可
# 2)部署证书到群晖参数
docker exec acme acme.sh --deploy -d XXX.XXX -d *.XXX.XXX --deploy-hook synology_dsm
# acme:容器的名字,根据自己的容器名填写
# --deploy -d XXX.XXX -d *.XXX.XXX:用自己的域名即可
# --deploy-hook synology_dsm:部署到群晖上
chmod +x /volume1/docker/acme/AutoCert.sh
首次部署直接执行看有无报错
bash /volume1/docker/acme/AutoCert.sh
成功终端返回
[Mon Sep 9 05:15:33 UTC 2024] The domain 'ku0.cc' seems to have a ECC cert already, lets use ecc cert.
[Mon Sep 9 05:15:33 UTC 2024] Logging into localhost:5000
[Mon Sep 9 05:15:35 UTC 2024] Getting certificates in Synology DSM
[Mon Sep 9 05:15:35 UTC 2024] Generate form POST request
[Mon Sep 9 05:15:36 UTC 2024] Upload certificate to the Synology DSM
[Mon Sep 9 05:16:29 UTC 2024] Restarting HTTP services succeeded
[Mon Sep 9 05:16:30 UTC 2024] Success
2.5. 群晖DSM添加计划任务
定时执行
最后一步就是添加一个计划任务,每周定时更新一次证书。控制面板->计划任务->新增,我设置为每周运行一次,运行脚本
在 DSM 控制面板中,打开“任务计划程序”并为用户定义的脚本创建一个新的计划任务。
常规设置:任务名:acme 用户:root
计划:设置每周续订。例如,每周六上午 11:00。
任务设置:用户定义的脚本:
#renew certificates
bash /volume1/docker/acme/AutoCert.sh >>/volume1/docker/acme/log.txt 2>&1
近期评论