目录

1.前言

2.docker版的acme.sh使用

3.脚本使用

4.编写定时脚本

5.执行与docker通信的脚本出错问题


1.前言

群晖Quickconnect 的访问速度太慢,很大一批都宁愿自己淘一个低延迟且水管足够的VPS服务器配合群晖NAS来做内网穿透使用,来达到提升外网访问速度的目的。而对于一个暴露在外网的NAS来说,让后台访问支持HTTPS协议变得尤为重要。很多人会说为什么不用群晖Quickconnect 服务,使用DSM系统自带的SSL证书?毕竟 Quickconnect 访问慢啊,另外我们很多时候需要在NAS上建站或者部署安装其他的项目都需要用到泛域名证书。

免费的泛域名证书 ——Let’s En­crypt 一个就搞定,而且还有相应的开源脚本 说明 · acmesh-official/acme.sh Wiki · GitHub 轻松便捷的签发证书,可以申请一个类似 *.domain.com 的单一证书,就可以适配 abc.domain.comxyz.domain.com 这类的子域名,而不需要单独为每个子域名申请证书了。

今天的介绍的重点是:如何使用群晖 SSL 自动签发脚本 为你的 群晖 NAS 配置 HTTPS 泛域名证书,并实现证书自动续签。

先看看效果

2.docker版的acme.sh使用

群晖套件中心安装Container Manager 旧版的是docker,新版改了名字。

打开Container Manager 在注册表中搜索acme.sh 下载图中neilpang/acme.sh的镜像

打开file station 在docker目录中新建acme.sh目录,用于存储生成的证书。

在容器中新增镜像,选着我们刚才下载的镜像。

注意要勾选自动重启

配置存储空间,

配置如下的环境

Ali_Key            #阿里云的key
Ali_Secret         #阿里secret
SYNO_Username      #群晖登录用户名
SYNO_Password      #群晖后台登录密码
SYNO_Certificate   #群晖证书名 填写需要替换的证书名 如果是默认群晖证书填"" 或synology
SYNO_Create        #域名证书创建, 填域名
SYNO_Port          #群晖后台登录端口号

在命令一行输入  daemon

3.脚本使用

我的域名是阿里云的。

其它域名商请参考 https://github.com/acmesh-official/acme.sh/tree/master/dnsapi

在本地新建文件 , 命名为 cert.sh 粘贴如下代码,并适当修改

#!/bin/bash

# 域名

DOMAIN='填域名'

# # DNS类型,dns_ali dns_dp dns_gd dns_aws dns_linode根据域名服务商而定,CloudFlare就是dns_cf

DNS='dns_ali'

# DNS API 生效等待时间 值(单位:秒),一般120即可

# 某些域名服务商的API生效时间较大,需要将这个值加大(比如900)

DNS_SLEEP=120

# 证书服务商,letsencrypt

CERT_SERVER='letsencrypt'

generateCrtCommand="acme.sh --force --log --issue --server ${CERT_SERVER} --dns ${DNS} --dnssleep ${DNS_SLEEP} -d "${DOMAIN}" -d "*.${DOMAIN}""

installCrtCommand="acme.sh --deploy -d "${DOMAIN}" -d "*.${DOMAIN}" --deploy-hook synology_dsm"

docker exec acme-sh $generateCrtCommand

docker exec acme-sh $installCrtCommand

右键点击该文件属性,复制其位置,后续编写定时脚本需要。

4.编写定时脚本

在任务计划中,新建任务,其中用户账户选择root 不然会因为权限不足而无法执行,出现 下面的docker通信问题。

在计划中填入实行计划,由于一次申请证书有效期是三个月,可以选择每三个月执行一次,当然也可以每个月实行一次。

在运行命令中填入如下脚本,

 /volume1/homes/rain/dsm7/cert.sh   为脚本证书 cert.sh 所在位置,

/volume1/homes/rain/dsm7/log/acme/log.txt  为日志写入位置。

bash  /volume1/homes/rain/dsm7/cert.sh >> /volume1/homes/rain/dsm7/log/acme/log.txt 2>&1

5.验证

可以看到已经成功获取到了证书,并且已经部署到了群晖dsm中。

6.执行与docker通信的脚本出错问题


Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/acme-sh/json": dial unix /var/run/docker.sock: connect: permission denied
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/acme-sh/json": dial unix /var/run/docker.sock: connect: permission denied

原因分析:这是因为你当前的用户没有这个权限。默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。即我们当前的用户不是root用户。

        解决办法:把我们当前的用户添加到docker组中就可以了,这样他们就是一家人了。

  1. 方法一

    第一步:sudo gpasswd -a username docker  #将普通用户username加入到docker组中,username这个字段也可以直接换成$USER。

    第二步:newgrp docker  #更新docker组

    第三步:再执行你报错的命令,此时就不会报错了。

  2.  方法二   使用超级用户执行, 
    sudo -i

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐