用docker为威联通上的emby服务器开启https


emby服务端是直接支持https的,同时也支持用nginx进行反向代理,不过我倾向于如果服务本身自带https功能那还是尽量由服务自己来提供https,用nginx反向代理的话会多一个环节,可能会降低性能和稳定性,毕竟视频文件传输对网络性能要求还是挺高的。

我是在威联通的NAS上安装的emby服务器,不过这篇文章的方法在其他设备比如群辉上应该也是通用的。

emby服务端不能直接使用SSL证书和私钥,而是使用包含了证书和私钥的PKCS #12文件,所以在获取到let's encrypt的证书之后,还需要把证书和私钥转换一下。

1.a 使用威联通自带的DDNS和证书申请功能的情况

威联通NAS的myQNAPcloud云服务应用中自带申请let's encrypt证书并自动续期的功能,获取到的证书和私钥文件路径在:/mnt/HDA_ROOT/.config/QcloudSSLCertificate/cert/,私钥的文件名是key,证书的文件名是cert

但该功能只能用于威联通提供的DDNS域名(****.myqnapcloud.com或者****.myqnapcloud.cn),如果能接受这点的话,下面需要用脚本定时把私钥和证书转换成PKCS #12文件,脚本代码如下:

#!/bin/sh

now="$(date)"
cd /mnt/HDA_ROOT/.config/QcloudSSLCertificate/cert/
[[ -z `find cert -mmin -60` ]]
if [ $? -eq 0 ]
then 
  echo "Certificate key has not changed - $now" > /日志/文件/路径/check-pfx.log
else
  /usr/bin/openssl pkcs12 -export -out certificate.pfx -inkey key -in cert -passout pass:mypassword
  echo "Created new certificate.pfx at $now" > /日志/文件/路径/create-pfx.log
fi

注意修改证书的密码和日志文件的路径,证书的密码之后需要在emby服务器后台输入。

1.b 使用docker获取自定义域名的证书的情况

因为想用自己的一个更短的域名,所以这里我选择了用docker来申请这个域名的证书。方法参考自:https://post.smzdm.com/p/a9973owe/

先拉取镜像文件 neilpang/acme.sh,然后创建docker容器,名称随便填写,命令需要填写daemon

这里因为是使用acme.sh工具的DNS方式来获取let's encrypt证书,所以在高级设置中,需要添加环境变量DP_Id和DP_Key,取值就是托管你的域名的服务商提供的API Token的ID和Token。

在共享文件夹标签中,需要挂载一个本机共享文件夹到容器的/acme.sh路径,之后获取到的证书会保存到这个目录。

然后就可以启动容器了。启动后用SSH登录威联通,输入以下命令来申请证书:

 docker exec my-acme --issue --dns dns_dp -d example.com -d *.example.com 

没有问题的话,就会在之前挂载到容器的目录看到获取到的证书相关文件。同样,也需要用一个脚本来定时把证书转换成 PKCS #12文件。脚本代码和上面差不多,只是相关的路径和文件名需要修改:

 #!/bin/sh

now="$(date)"
cd /挂载到容器的目录/example.com
[[ -z `find fullchain.cer -mmin -60` ]]
if [ $? -eq 0 ]
then 
  echo "Certificate key has not changed - $now" > /日志/文件/路径/check-pfx.log
else
  /usr/bin/openssl pkcs12 -export -out certificate.pfx -inkey example.com.key -in fullchain.cer -passout pass:mypassword
  echo "Created new certificate.pfx at $now" > /日志/文件/路径/create-pfx.log
fi 

这个脚本会查找证书文件在60分钟内是否有更新,有更新的话就转换成certificate.pfx文件。然后我们需要用定时任务每30分钟执行一下这个脚本。

2 用定时任务执行证书转换脚本

不像群辉的定时任务可以直接在WEBUI管理界面设置,威联通的定时任务只能在命令行进行修改,参考官方的文档:https://wiki.qnap.com/wiki/Add_items_to_crontab

用SHH连上威联通服务器后,进入脚本所在目录,给脚本执行权限:

 chmod +x filename.sh

然后将脚本的定时任务添加到/etc/config/crontab文件中,这里我让这个脚本每半小时执行一次:

echo "*/30 * * * * /脚本所在目录/filename.sh" >> /etc/config/crontab

最后重启crontab:

crontab /etc/config/crontab && /etc/init.d/crond.sh restart

3 emby服务端的设置

最后需要到emby的高级设置中,加载转换后的证书文件,并且开启https功能。

设置公开HTTPS端口号(默认8920),把你的域名输入到外部域名输入框,在自定义SSL证书路径选项选择转换后的certificate.pfx的路径,在证书密码一项输入转换证书时所使用的密码,开启安全连接模式(首选或者所有远程连接)。设置完成后保存,最后到emby控制台重启emby服务器。

然后只要在路由器中配置好端口转发,就可以用自己的域名,通过https协议远程访问emby啦!

docker会每两个月自动为SSL证书续期,然后定时脚本会在SSL证书续期后半小时内将SSL证书转换成emby服务器要求的格式,到时我只需要手动重启一下emby服务器就可以了。

我的主力NAS是威联通的453Bmini,J3455的CPU,功耗比较低,装了16G内存,平时用来存储一些常用文件和照片,做下载机,玩玩虚拟机和docker,感觉还是很不错的。详细介绍可以参考:

京东 威联通(QNAP)TS-453Bmini 4G内存 四核处理器 直立 NAS 四盘位网络存储(无内置硬盘) 威联通(QNAP)TS-453Bmini 4G内存 四核处理器 直立 NAS 四盘位网络存储(无内置硬盘) 四核CPU、SOHO云存储中心、创新直立设计、支持 4K 影像输出、快照备份 去看看

声明:爱玩咖 – 生命在于折腾|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 用docker为威联通上的emby服务器开启https


Carpe Diem and Do what I like