新到一台群晖 NAS。人生第一次用白群晖,自然是要狠狠地配置一番,本文记录配置过程中遇到的各种坑。

反向代理

在「控制面板 - 登录门户 - 高级 - 反向代理服务器」中可以配置反代。

WebSocket 支持

默认反代是不支持 WebSocket 的,在浏览器的 Console 里面可以看到 wss 连接失败的错误信息。参考官方教程,在「对应的反代配置 - 自定义标题 - 新增 - WebSocket」,会自动添加两项,保存即可。此时 WebSocket 连接支持已启用。

Docker

Docker 内调用 DSM 的数据库

在 DSM 套件中心安装了 MariaDB 数据库,但 Docker 容器一般是访问不了的。打通访问的方式有两个:

  1. 容器使用 Host 网络:不推荐
  2. 容器照常使用 Bridge 网络,将数据库地址改为 Docker 虚拟网络适配器的网关地址(本例是 172.17.0.1),DSM 的 MariaDB 允许通过 TCP 访问。

下载 Docker Hub 上的镜像

群晖连 Docker Hub 时断时续,我都快疯了。索性直接把 Docker 镜像下载成 tar 包,再手动传上去。

使用 docker-drag 实现

根据官网介绍:docker-drag 是一个用于与 Docker Hub 交互的工具,并且不需 Docker 客户端本身支持。它主要是通过与 Docker HubHTTPS API 进行交互来实现相应功能。

项目地址:https://github.com/NotGlop/docker-drag

安装 docker-drag

docker-drag 其实就是一个 Python 脚本,目前版本总共才 168 行代码。你只需要去官网仓库直接下载就可以使用了,非常的简单。下载地址:

1
https://raw.githubusercontent.com/NotGlop/docker-drag/master/docker_pull.py
使用 docker-drag

我们先来看一下官方给出的演示效果。

docker-drag 演示

docker-drag 的使用是非常简单的,基本上和 docke pull 命令使用方法一致。其主要是借助 PythonRequest 库和 HTTPS API 直接从仓库中拉取镜像,并保存为 TAR 文件。

1
2
3
$ python docker_pull.py nginx:alpine
$ python docker_pull.py mysql/mysql-server:8.0
$ python docker_pull.py mcr.microsoft.com/windows/nanoserver@sha256:ae443bd9609b9ef06d21d6caab59505cb78f24a725cc24716d4427e36aedabf2

镜像下载完成后,你可以直接使用 docker load -i 命令对 TAR 文件进行加载。

使用 download-frozen-image-v2 实现

docker-drag 类似的工具,还有一个 SHELL 脚本的实现 download-frozen-image-v2,该脚本隶属于 Moby 项目。项目地址:https://github.com/moby/moby

它的使用基本上和 docker-drag 类似,大致有如以下几步所示。

  1. 下载对应的脚本
1
$ wget https://raw.githubusercontent.com/moby/moby/master/contrib/download-frozen-image-v2.sh
  1. download-frozen-image-v2 脚本使用语法
1
download-frozen-image-v2.sh target_dir image[:tag][@digest] ...
  1. 一个完整的使用实例
1
2
3
4
5
6
7
8
$ bash download-frozen-image-v2.sh ubuntu ubuntu:latest

$ tar -C 'ubuntu' -cf 'ubuntu.tar' .

$ docker load -i ubuntu.tar

$ docker run --rm -ti ubuntu bash
root@1dd5e62113b9:/

使用 dp 实现

dp 同样也是一个实现上述类似需求的小工具。dp 使用 Go 语言开发,天生具有良好的跨平台性。相对于前两个工具来说更容易在多平台上部署使用,而且 dp 还支持将多个镜像打包在一起。

项目地址:https://github.com/zhangguanzhang/dp/

安装

dp 的安装非常简单,只需在官方仓库 Releases 页面直接下载各平台对应的版本,解压后即可使用。

使用

dp 使用起来也是很容易的,下面我们就来看几个实例。

1
2
3
4
5
$ dp pull nginx:alpine
$ dp pull -o nginx.tar.gz nginx:alpine
$ dp pull mcr.microsoft.com/windows/nanoserver@sha256:ae443bd9609b9ef06d21d6caab59505cb78f24a725cc24716d4427e36aedabf2
$ dp pull -o project.tar.gz nginx:alpine nginx:1.17.5-alpine-perl
$ dp pull -o project.tar.gz nginx:alpine gcr.io/google_containers/pause-amd64:3.1

网络服务

Hedgedoc

Hedgedoc 是一个在线协作 Markdown 平台。

在 Docker 中拉取 linuxserver/hedgedoc 映像,并做如下配置。

文件夹映射:

  • /opt/hedgedoc/public/uploads:上传图片存放的位置

环境变量:

  • 数据库相关:DB_HOST、DB_PORT、DB_USER、DB_PASS、DB_NAME
  • 域名相关
    • CMD_DOMAIN
    • CMD_PROTOCOL_USESSL:true

直接启动即可。

在线 Office

试用了一圈,比如:

  • Nextcloud + OnlyOffice
  • EtherPad
  • CryptPad

发现还是群晖自带的 Synology Drive 好用。

上述基于 Docker 的方案有如下缺陷:

  1. 用户配额无法落实
  2. 增加了系统的安全风险点
  3. 徒耗系统资源:尤其是 Nextcloud + OnlyOffice 的方案,两个容器各吃 1G 的内存,离大谱。