如何在群辉 NAS 上部署为知笔记

11/6/2019

视频教程

📺 群晖中如何使用脚本自动安装&更新部署为知笔记

❤️感谢用户 @OkazakiKyou 录制并上传视频

---- 正文开始 ----

手把手教你玩转群晖NAS私有化部署为知笔记,建立属于自己独享的私有云笔记服务,注重隐私、更安全。

最后更新: 2019/11/4 ❤️感谢用户 @大大木头 提供教程

基础概念普及和名词解释

什么是Docker?

我们不讨论技术层面的问题,单从应用的角度去看,可以简单粗暴的认为,Docker就是一种虚拟化技术,再通俗一点讲,Docker就像在你的电脑/服务器上临时划出了一个专属的硬件资源空间,给专门的操作系统、软件去使用的,并且可以随时收回这些资源的一种技术,想详细了解这一技术请自行查询相关资料。

举个例子:Docker就像是给了你一个用来放杯子的托盘。

什么是Docker容器?

简单粗暴的解释,就是已经划定好的给某一个系统、软件进行运行的资源空间,这个容器里面执行的程序是相对独立的。

举个例子:Docker容器就是一个放在托盘上的杯子,启动容器就是这个杯子里冲好了咖啡,可以直接喝了。

什么是Docker镜像?

通俗的解释,可以理解成一整套包含了系统和所有配套设施的软件系统。

举个例子:Docker镜像就是帮你加工好的咖啡包,你只需要倒到杯子里,冲上热水就可以得到以备香浓的咖啡,当然如果有必要的话,你也可以再加点糖、加点奶。

什么是宿主机?

就是用来安装Docker的电脑/服务器。

举个例子:宿主机就是用来摆放托盘的桌子,或者是你端着托盘的那只手。

什么是反向代理

反向代理的作用是当用户访问某一个网络地址时,反向代理服务器会根据请求的情况选择拒绝,或向后端服务请求资源返回给用户。

举个例子:孩子跟妈妈说,我要喝水,妈妈拿了杯水递给孩子,妈妈就是反向代理服务器,要喝水是请求的动作,妈妈拿水给孩子是请求到的资源。

群晖NAS环境配置

安装Docker

首先,不是所有的群晖NAS都可以安装Docker,通常来说,只有内存大于4G的型号才能安装(黑裙不在讨论范围内)

登录群晖,打开 套件中心 ,搜索Docker(如果不支持Docker的型号,将搜索不到),安装Docker,安装完成后在系统菜单中可以看到Docker的应用图标。

image-20191104210002335

开启群晖的SSH功能

登录群晖,打开 控制面板 - 终端机和SNMP ,在页面中勾选 启动SSH功能 端口设置 22 (这是默认端口,可以修改成别的,当然通过SSH连接的时候就要输入对应的端口号)

image-20191104210347619

为知笔记Docker私有化部署

下载为知的Docker镜像

从系统菜单进入,依次打开 系统菜单 - Docker - 注册表 ,在搜索框中输入 wiznote 回车进行搜索,看到第一条 wiznote/wizserver ,进行双击开始下载,如果弹出版本选择的窗口,请选择 latest

image-20191104210939723

这里可以看到 wiznote/wizserver 后方有一个箭头,点击这个箭头可以进入 dockerhub 的镜像发布页面中查看到官方发布说明

这里就让他慢慢下载即可,可能时间略长,最新的镜像容量大概在 2GB 左右。

创建本地数据目录

从系统菜单中,找到 File Station 并打开,在目录树中找到 docker 文件夹(只有安装了Docker才会自动创建),因为使用了 docker 之后真的会上瘾,可能未来你会使用更多的 docker 容器,所以个人建议大家创建数据文件夹时这么创建:

  • docker 文件夹下创建一个文件夹,命名为:wiz
  • wiz 这个文件夹下创建一个文件夹,命名为: data (这是为了防止以后为知会不会有新的数据目录或者配置目录之类的需要映射出来呢?)

准备启动容器

看标题,没错,现在就能启动容器了

先看一下镜像有没有下载完成,还是打开 系统菜单 - Docker ,在左边的菜单中,如果 映像 的右边有一个红色的数字 (这个数字表示有几个镜像正在下载),说明还没下载完,等它消失,可以点击 映像 在右侧的镜像列表中看到 wiznote/wizserver:latest ,并且后面有点像硬盘的图标不再动了,说明下载完成了。

image-20191104212441536

启动容器

由于一些群晖本身的安全机制问题(对于目录访问权限的控制),为了避免不必要的麻烦,少走弯路,顺利的一次启动成功,我们建议大家直接采用命令行的方式进行启动。

打开终端:

windows用户点击系统的开始菜单,运行,输入:cmd,回车。

mac用户点击Launchpad,查找 终端 ,点击运行。

在终端中输入命令:

ssh admin@10.10.10.10 -p 22

其中:

admin : 是您群晖的管理员用户名

10.10.10.10 :是您群晖的服务器IP地址

22 :是您之前设置的SSH的端口号

输入以上内容后回车后会要求你输入这个 admin 账号的密码,输入时内容时不可见的,您的键盘没坏,输入完成直接按回车,即可看到登录成功或者提示你密码错误重新输入。

登录成功后再命令行中输入如下内容:

sudo docker run --name wiz -it -d -v /volume1/docker/wiz/data:/wiz/storage -v /etc/localtime:/etc/localtime -p 8888:80 -e SEARCH=true wiznote/wizserver

其中 /volume1/docker/wiz/data 是你之前在群晖上创建的为知笔记的数据文件夹

/wiz/storage 是在为知的容器中的数据文件夹的路径,就是把这个文件夹映射到了群晖这个宿主机的指定目录中来了。

-V /etc/localtime:/etc/localtime 这个映射的目的是为了让容器中的系统时间跟宿主机的系统时间保持一致,不理解没关系,照着来就行了。

8888:80 表示将容器中的80端口映射到宿主机的 8888 端口,然后通过访问宿主机的 8888 端口就相当于访问了容器内的 80 端口了,这个 8888 是可以换成任意你想要的端口的,当然,需要是未被其他系统服务所占用的端口,在我的群晖上,我就喜欢用这个,谁让我喜欢 8 呢。

-e SEARCH=true 这个部分,是一个环境变量,就是开启为知笔记的搜索服务,不开的话,没办法对笔记进行搜索哦,当然,开启的话需要占用你更多的系统资源。

输入完以上的内容后,直接回车开始运行容器,就会创建一个名为 wiz 的容器,这个过程可能会比较长,请慢慢等待。

现在你回到群晖的管理页面中,通过 Docker 的管理界面,点击左侧 容器 可以看到一个名为 wiz 的容器已经在运行了,但是别急,可能还没运行完成,首次运行的时候需要启动一堆的应用,包括安装数据库,初始化配置等等,所以一定不要急,慢慢等,这个部分官方文档中其实有说明了。

如果看到是这个界面说明安装尚未完成

img

安装完成

安装完成后,打开浏览器,访问地址 http://10.10.10.10:8888 ,可以访问到为知的登录页面。

其中地址 10.10.10.10 是你群晖的访问地址,8888 就是我们运行容器时候映射的访问端口。

现在已经可以使用了,如果提示服务不可用,可能是未安装完成,或者是您是通过图形化界面初始化运行的容器,导致了目录权限不够,导致的服务启动失败,请重新安装上文的 启动容器 通过命令行方式启动容器。

推荐的用户管理方式

安装完成后,默认管理员账号是 admin@wiz.cn ,密码是 123456 ,您可以使用这个账号登录,并修改密码。

登录成功后在左侧用户头像的位置,点击昵称旁边的箭头,再点击 账户设置 ,在 账号设置 中点击 修改密码 进行修改,建议修改成一个包含大小写字母、数字、符号的巨复杂的密码,并妥善保管好该密码。

建议管理员账号 不要修改邮箱不要修改邮箱不要修改邮箱

理由很简单,修改了邮箱之后无法登录 系统管理 页面,需要修改回来之后才行,那么日常使用的账号怎么办呢?

退出登录(当前管理员账号),返回到登录页面中,点击右上角的 注册 按钮,注册一个新的普通用户账户进行使用,当然,这会使您免费的 5 个账户中,浪费一个,当然,作为个人用户来说,无所谓,事实上相信很多在群晖上进行部署的个人用户,有一个账号就够用了,这也能更好的保障系统的安全性。

注意:私有服务器使用的账号邮箱请勿跟官方服务器使用的账号邮箱相同!!!

服务端启用HTTPS

服务端启用HTTPS,比较推荐的方式是采用反向代理,也是最简单的方式,这里不对NGINX的配置做具体的说明,既然是在群晖上部署,其实群晖已经提供了可视化的工具给我们。

在群晖的管理页面中,点击 控制面板 - 应用程序门户 - 反向代理服务器

image-20191104220833990

这里可以看到我配置的一大堆的反向代理的服务,点击 新增 ,按照下图进行填写

image-20191104221050176

描述随便写即可,为了便于管理,我写的 wiz,来源协议我们选择 https ,毕竟我们就是为了开启https么,主机名这里的 *表示的所有访问这台群晖 7777 这个端口的请求,当然,如果您想使用二级域名的话,这里也可以配置成二级域名,这里就不展开了,可以自行查询DNS管理相关知识。

目的地协议,选择 http ,因为我们的容器开放的就是http服务,主机名填写群晖的ip地址,端口号填写我们之前配置的容器开放的 8888 端口。

至此配置完成,当然,这里需要你的群晖已经配置的SSL证书,群晖默认是会签发自签名证书的(就是自己给自己发的证书,别人访问的时候会提示这个证书存在安全风险),如果想使用正式的ssl证书,推荐可以使用 acme 脚本在群晖上配置个计划任务,自动签发、续签免费证书,具体脚本和使用方法可以在 github 中查找 acme 项目,并自行查找相关配置方法,这里不在展开。

使用DDNS实现公网访问群晖和相关DNS解析配置,不在本教程讨论范围内,有兴趣的可以自行查找相关资料。

客户端连接配置

客户端登录私有部署的为知服务端,需要首先找下界面中的 切换服务器 PC端、手机端显示的位置可能有所不同,自己在登录界面上找一下,这里就不贴图了,点击后选择 登录到企业私有服务器(为知盒子) ,登录界面会切换成三个输入框,分别是:

账号:填写您私有部署的账号

密码:账号对应的密码

服务器地址(就是最后一项):服务器的访问地址

这里主要说一下服务器的访问地址,如果您没有配置反向代理,没有配置HTTPS,那么直接输入 10.10.10.10:8888 ,即可,含义不再解释,如果您按照我上述的方式配置了https,服务器地址填写:https://10.10.10.10:7777 必须完成填写协议头和端口号。

常见问题

如何通过命令行进入容器

通过SSH登录NAS

这个在 启动容器 中已经说明,不在详细解释,通过以下命令登录

ssh root@xxx.xxx.xxx.xxx -p 22
输入密码

继续输入命令并回车:

sudo docker ps
输入密码

看到如图所示,中 wiz 的容器ID是 1fa9ccdc1131

image-20191104223711395

输入命令:

sudo docker exec -it 粘贴刚复制好的ID号 /bin/bash

至此进入容器,至于进入容器之后有什么用,可能有一些特殊的操作需要呢?

Docker版本更新

参考前文中 瞎子啊为知的Docker镜像 进行新镜像的下载。

下载完成后,在群晖的管理界面中,打开 docker - 容器 ,找到容器 wiz 点击最右侧的开关进行关闭。

容器关闭后,在容器上点击右键,选择 删除 ,等待删除完成,这个过程可能会非常慢。

image-20191104224248097

容器在运行状态是无法删除的。

容器删除完成,且新的镜像下载完成后,参考本文中 启动容器 ,通过命令行方式登录到宿主机(群晖)上,执行启动容器的命令,等待启动完成,更新容器启动的过程还是非常快的(主要是数据库不需要重新创建了),至此更新完成。

搜索功能不可用

搜索不可用的可能原因主要有两个:

  1. 搜索服务未启动
  2. 索引挂了需要重新建立索引

搜索服务未启用

这个问题主要是因为环境变量配置错误导致的,请按照如下操作:

  1. 停止当前 wiz 的容器
  2. 选中容器,点击上方的编辑
  3. 编辑 窗口中,切换到 环境 标签
  4. 环境 标签中添加变量 SEARCH=true

image-20191104225525019

登录的时候出现数据库错误(sql错误等)

如果登录的时候,出现了sql错误,例如类似下图的错误:

可以按照下面的方式解决:

首先,ssh进入群晖NAS里面,然后进入容器内:

登录服务器,进入wiz容器
docker exec -it wiz /bin/bash
修改 /wiz/storage 权限

执行命令

chmod  a+rwx  -R  /wiz/storage
rm /wiz/storage/index/.runonce
rm /wiz/storage/index/.search
最后重启容器
docker restart wiz