升级群晖到 7.0 版本的 HTTPS 和 Vaultwarden 配置方案
dianqk
2021年07月11日 10:40

群晖发布 7.0 之前我一直在用一台 NUC6CYAH 搭建的黑群晖,半年用下来,对 Drive 这套服务还算满意,自从我知道了 Hyper Backup 这个套件,我才发现群晖的优秀。7.0 发布后,我下单了 DS720+ 将各种服务全面转向自建形式使用。 本文将介绍升级到 7.0 的一些适配工作以及 Vaultwarden 搭建注意事项。

什么是 NAS?

我一般将 NAS 理解为放到家里的服务器,我们可以在这台机器上搭建各种需要的服务。对 NAS 更多地理解可以看看其他解读文章,我们现在简单地当做服务器即可。

升级到 7.0 的 HTTPS 方案

在 6.x 时代,我发现了一个 syno-acme 项目,使用 acme 的 DNS 验证方式申请 Let's Encrypt 证书。这个项目我用起来非常顺手,配置一个定时任务即可。

不过作者还没完成 7.0 的适配,7.0 移除了 python2 并调整了重启 nginx 的方式,我做了个简单适配,如果你不使用 Apache 那可以直接使用啦!

配置 syno-acme

首先下载并解压  https://github.com/DianQK/syno-acme/archive/refs/heads/master.zip 到群晖目录。这里我解压到 /volume1/tools/syno-acme-master 目录下:

sync-acme 的目录结构

接下来修改 config 文件,配置你要使用的域名和修改 DNS 的 AccessKey 信息,我是用的阿里云,参考的配置如下:

配置好 DOMAIN、DNS 和 AccessKey

(here!!! *) 表示这里需要修改,domain 不需要添加 *.your.domain,这里设置为 your.domain 之后,drive.your.domain 或者 photo.your.domain 都可以使用。

DNS 项需要根据你使用的 DNS 服务商选择不同的类型。

设置定时任务

配置完成后,在控制面板 - 任务计划中添加新的定时任务:

用户账号选择 root

注意用户账号要选择 root。

因为 Let's Encrypt 每三个月过期,计划日期选择每月执行即可:

每月重复

任务设置添加自定义的脚本:

代码块
Shell
自动换行
复制代码
/volume1/tools/syno-acme-master/cert-up.sh update
复制成功

任务设置添加执行脚本

你可以 SSH 进入到群晖,使用 root 账号执行一下该命令,看是否一切正常。

此外可以在设置中开启保存输出结果功能,这样每次任务失败成功都会记录一份日志内容。

保存每次执行日志的指定目录

配置没有问题的话,执行一次我们就可以得到生成的新证书了!

已经设置好的证书信息

在高级设置中,我将 TLS/SSL 配置文件等级设为现代兼容性,这将为 TLS 仅开启 TLS1.3 版本。

考虑切换到 ZeroSSL?

目前 acme.sh 将默认申请 SSL 服务商切换到了 ZeroSSL,对比之下,感觉 ZeroSSL 更好用,参见 https://zerossl.com/letsencrypt-alternative/。

我已经切换到 ZeroSSL,同时 https://github.com/DianQK/syno-acme/ 的默认分支 main 迁移到 ZeroSSL 并简化了配置方式。如果你也打算切换一把,参见 https://github.com/DianQK/syno-acme/ README 即可。

我搭建的服务

在群晖上,我主要搭建了 Drive、Photo、Vaultwarden 替代 iCloud 和 1Password。

Drive 和 Photo 没什么可说的,安装后直接用就完了。目前我对这两个套件还算满意,同时我退订了 iCloud 的 200G 家庭版。

Vaultwarden

Vaultwarden (原名 bitwarden_rs)是 Bitwarden Server 端 Rust 实现版本,相比官方的自建服务资源占用更低,同时开启了高级功能。

这个配置的过程比较容易,也有很多文章进行了介绍,这里仅做简单介绍。不过大部分的文章漏了一些内容,本文做一些补充。

打开 Docker 注册表,搜索 vaultwarden,选择 vaultwarden/server 下载。

选择 vaultwarden/server

下载完成后,从映像中,选择该映像,点击启动创建容器。

创建容器进入高级设置

在高级设置中,做如下修改:

常规设置勾选“应用自动重新启动”,确保群晖重启后,我们无需额外操作 Vaultwarden 可以自行启动。

勾选启用自动重新启动

储存空间映射文件输入 /data:

/data

端口设置我选择了 host 网络,这一点你可以自行选择喜欢的方式。

我这里使用了 host 网络

环境这里的配置非常重要:

因为我使用了 host 网络,所以需要修改端口,我这里设置 ROCKET_PORT 为 17880。

如果你需要使用 WebSocket 进行桌面端实时同步,需要设置 WEBSOCKET_ENABLED 为 true。

注意,ADMIN_TOKEN 一定要设置一个,等下我们将修改配置确保附件功能正常。

DOMAIN 设置为你需要使用 nginx 反向代理的域名。

设置完毕,启动 Docker,打开域名:端口,应当可以正常进入 Web 页面,如果不能,你可以根据官方  https://github.com/dani-garcia/vaultwarden/wiki 了解具体配置内容后解决问题。

接下来配置 Nginx 代理,如果你不需要 WebSocket 同步功能,直接在控制面板 - 登录门户 - 反向代理服务设置即可。

如果需要 WebSocket,同时你又使用 syno-acme 配置了 SSL 证书,那就很方便了!

SSH 登录到群晖,创建文件 /etc/nginx/sites-enabled/server.vault.conf,使用 vim 添加以下内容:

代码块
Nginx
自动换行
复制代码
server {
  listen 443 ssl http2;
  server_name vault.your.domain;

  ssl_certificate /usr/syno/etc/certificate/system/default/fullchain.pem;
  ssl_certificate_key /usr/syno/etc/certificate/system/default/privkey.pem;
  
  ssl_protocols TLSv1.3;

  client_max_body_size 128M;

  location / {
    proxy_pass http://localhost:17880;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
  
  location /notifications/hub {
    proxy_pass http://localhost:3012;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
  
  location /notifications/hub/negotiate {
    proxy_pass http://localhost:17880;
  }

}
复制成功

注意修改你使用的端口和域名。

设置完成后,使用如下命令即可更新 nginx 配置:

代码块
Shell
自动换行
复制代码
/usr/syno/bin/synosystemctl reload nginx
复制成功

设置完成后,打开 Web 页面,登录账户后,打开开发者工具,可以看到原本如图所示的 WebSockect 连接报错消失了。

未完成 WebSocket 配置出现的报错

设置成功后提示 WebSocket 连接成功

接下来我们来解决一个下载附件问题。

当我们下载上传的附件时,将触发如下错误,这是因为我们的 DOMAIN 没有生效,Vaultwarden 将根据设置的域名返回附件下载地址。

没有设置好 DOMAIN 得不到正确的附件地址

进入 admin 页面,打开 General settings:

设置 Domain URL 为 nginx 反向代理的域名

设置好你的 Domain URL,此时附件下载功能可以正常使用了。

接下来我吭哧吭哧迁移 1Password 后,我退订了 1Password 并正式使用 Bitwarden。

这个月刚好结束了 1Password 的五年订阅

Hyper Backup

Hyper Backup 是我愿意重度使用群晖的原因,Hyper Backup 可以将你手里上群晖的数据增量备份到其他地方,我选择了京东云 S3,主要是配置起来比较方便。价格上我没有和阿里云做过对比,主要是这里的价格套路我看着太多了,就当自己土豪了!

我主要创建了两个配置任务,一个备份所有的应用,包括 Drive 和 Photo,你不需要选择共享文件夹,Drive 和 Photo 会自动备份需要的文件夹。

备份全部套件

备份重要文件夹

为了确保数据安全,我设置了每天凌晨备份一次。

Hyper Backup 创建了这么多任务

外网便捷又安全的访问方式?

参见:

补充

我放弃了 iCloud 全面转向群晖是因为公司发的 Mac 回购时,网管直接打开 Finder 把我的 iCloud 内容清了,这竟然不是抹盘清数据。

丢失的数据,我通过这不可靠的 iCloud 删除文件恢复仅恢复了一点没啥用的文件。这让我认识到数据无价!

使用群晖的 Hyper Backup 进行备份,我可以恢复数据到任何一个(有备份的时刻),即便是我误删了文件,我也有机会找回来。

比较遗憾的是,我还没找到我用的来的全平台笔记应用,之前一直使用 Bear,也试用了 Notion 后,目前选择群晖 Note 加 OneNote 凑合用,希望群晖还想起来 Note 也该像 Photo 来一波大更新了。

参考内容

  • https://github.com/andyzhshg/syno-acme

  • http://www.up4dev.com/2018/05/29/synology-ssl-wildcard-cert-update/

  • https://github.com/dani-garcia/vaultwarden/wiki