添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
NAS上的Docker+NextCloud方案安装与配置详解

NAS上的Docker+NextCloud方案安装与配置详解

前言

Nextcloud 是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或团队的云同步网盘,从而实现跨平台跨设备文件同步、共享、版本控制、团队协作等功能。它的客户端覆盖了Windows、Mac、Android、iOS、Linux 等各种平台,也提供了网页端以及 WebDAV接口,所以你几乎可以在各种设备上方便地访问你的云盘。

网上很多教程写的非常不完善,更少有专门针对NAS建设Nextcloud 的专门教程。 本文主要希望介绍如何在 NAS上使用 Nextcloud 搭建个人专属的私有云同步网盘,并利用其作为可视化的文件管理工具。

笔者的NAS环境是Debian+OMV,本文所述的搭建方案基于Docker,其他NAS方案的Nextcloud搭建方式亦可参考本文。

Docker部署Nextcloud服务端

0. 假定在安装前,MySQL已经安装并Running在MysqlServer这个容器,或者已经准备了远端的MySQL

1. 在希望存储文件的磁盘建立nextcloud_data

Nextcloud将把用户上传的文件和相关配置文件存储在容器以外的位置 ,这个时候我们就需要提前在希望存储的位置为其建立相关文件夹。例如在笔者的NAS上,我希望将这些文件存储在4号磁盘(挂载点/srv/dev-disk-by-label-Nas4DiskBU/)上,我们可以:

通过cd命令切换至挂载的4号磁盘,在磁盘根目录建立nextcloud_data文件夹并进入:

cd /srv/dev-disk-by-label-Nas4DiskBU/
mkdir nextcloud_data
cd nextcloud_data

2. 确定希望被Nextcloud管理的文件夹路径

如果你希望Nextcloud可以访问或管理其他文件(非经由NextCloud上传的其他文件,例如SMB共享文件夹上传的或者FTP上传的文件),那么你需要在创建容器时确认他们的路径:

例如在笔者的NAS上,我希望NextCloud可以访问或管理1号磁盘(挂载点/srv/dev-disk-by-label-Nas1Disk)上的所有文件,那么这个路径自然就是/srv/dev-disk-by-label-Nas1Disk

3. 拉取最新的NextCloud镜像

在Xshell 6的终端执行命令从源直接拉取NextCloud镜像:

docker pull nextcloud

4. 执行Docker命令创建容器

重头戏来了,为了实现上述功能,我需要执行下面的指令创建容器:

docker run --name NextCloud -p 8080:80 --link MysqlServer:Database -v $PWD/data:/var/www/html/data -v $PWD/html:/var/www/html -v /srv/dev-disk-by-label-Nas1Disk:/Nas1Disk -d nextcloud

解释: --name NextCloud 创建一个名为NextCloud的容器

-p 8080:80 将该容器的80端口映射至NAS的8080端口

--link MysqlServer:Database

链接容器MysqlServer为Database,这个为下面配置数据库链接提供了基础。在这个镜像中访问 Database/ 即可访问到数据库。不打算使用本地MySQL的小伙伴不需要加这个。

-v $PWD/data:/var/www/html/data -v $PWD/html:/var/www/html

映射nextcloud_data文件夹($PWD指的是当前文件夹,即nextcloud_data)下的data和html分别至容器的/var/www/html/data和/var/www/html,从而避免将用户上传的文件和相关配置文件存储在容器中,方便后续管理。

-v /srv/dev-disk-by-label-Nas1Disk:/Nas1Disk

映射NAS的/srv/dev-disk-by-label-Nas1Disk至容器的/Nas1Disk文件夹,方便下一步设置为NextCloud的外部存储,以对用户通过SMB上传的文件进行管理

-d nextcloud 以nextcloud镜像创建容器

执行结果

执行结束后在Portainer中查看Container details,确认配置无误:

确认外部存储的映射均正确

5. 访问NAS的IP+端口号,完成配置

笔者的NAS局域网IP为192.168.31.15,访问198.168.31.15:8080即可。

在初始化界面,用户需要设置管理员账号并配置数据库,我们 选择中间的MySQL/ManaDB选项 ,并 在接下来的两行填写在创建数据库时指定的数据库用户名和密码

配置的第三行是数据库名称,我这里取了nextcloud_database,当然也可以取别的,无影响。 最后一行是数据库的位置,因为在上面配置了--link MysqlServer:Database,因此这里填写Database 。(不要画蛇添足,Database:3306、localhost都是不对的,当然这里可以用远程数据库,填写IP+端口即可)

点击确定,系统提示正在完成:

这个步骤有点慢,如果你使用了远端数据库可能会更慢,莫着急莫着急! (不要学我一气之下直接删了这个容器又建了一个继续折磨自己hhhh)

完成基本配置后,会自动安装推荐应用:

当然,因为一些众所周知的原因,这个可能有些应用无法下载,具体解决办法也是众所周知的,这里不赘述了。

6. 配置外部存储(一)

如果希望NextCloud可以管理NAS的其他文件,需要配置NextCloud的外部存储。 但这个功能默认是不加载的,所以要手动开启: 完成安装后,点击头像->应用进入应用市场,在精选应用中找到官方的External storage support插件,点击启用。

开启后,点击头像->设置进入设置界面,在管理!管理!管理!选项卡下面,找到外部存储:

为什么要强调三遍在存储下面呢,因为上面个人下面也有一个外部存储,而且大概率长这样:

个人->外部存储 是错误的,无法在这里进行设置

真的就有人提了“Nextcloud的外部存储进不去,无法设置” 和“全局凭证密码是多少啊”这种哭笑不得的问题,实际原因是找错地方了。

在 设置->管理->外部存储 挂载一个本地外部存储:

我们上文提到,在建设Docker时我加了-v /srv/dev-disk-by-label-Nas1Disk:/Nas1Disk来映射NAS的/srv/dev-disk-by-label-Nas1Disk至容器的/Nas1Disk文件夹。在这里我就可以直接将/Nas1Disk或它的子文件夹挂载为本地外部存储,例如下面:

这样我就将Nas1Disk/PersonalData(实际上是NAS的/srv/dev-disk-by-label-Nas1Disk/PersonalData文件夹)这个文件夹委托给Nextcloud进行管理了。

确认后,我们可以在Nextcloud中看到:

7. 配置外部存储(二)

我们成功了吗?不妨新建个文件夹试一下:

很显然,我们无法在这个外部存储中添加文件,当然如果你再测试一下的话,我们也不能修改文件。这是只读的。

只读的那就谈不上管理,所以这里我们还需要进一步配置,让NextCloud拿到管理外部文件的权力。

从根源上来看,之所以NextCloud不能写入, 我们初步怀疑是NextCloud服务器对应的用户并无映射文件夹的权限,毕竟这些文件是通过SMB上传的。

验证一下,首先进入Docker (已经利用PS查询Nextcloud容器的ID是6d0e1dbef85e )

利用ps查询容器ID并进入容器shell
sudo docker exec -it 6d0e1dbef85e /bin/bash

进入映射的文件夹/Nas1Disk和/Nas1Disk/PersonalData,利用ls -l查看权限

我们发现, /Nas1Disk/PersonalData下的文件权限标识均为rwxrwsr-x+,所属用户是1000,用户组为users,这意味着ID是1000的用户和用户组为users的用户对文件有读写执行权限,而除此之外的用户只有读和执行的权限。

但是,PersonalData下的文件是通过SMB上传和维护的,显然不能修改所属用户和用户组,而且也不能修改NextCloud的执行用户,那么显然 唯一的解决方案就是把NextCloud的执行用户加入users用户组,这样就赋予它对文件的读写权限了。

查看NextCloud的执行用户( 在debian/ubuntu上,www-data是默认运行web服务的用户/组 )的所属组

执行命令将www-data加入users用户组:

usermod -a -G users www-data

这里有个坑!!!!上面那个命令只把users添加到www-data的所在用户组里去了,但没指定www-data的主用户组!!这样的话权限不会生效!

再次执行:

usermod -g users www-data
usermod -a -G www-data www-data

此时我们可以用id命令看一下,www-data的主用户组是users,并且在users和www-data两个组内。

再次尝试新建文件test.md:

成功的创建了test.md文件

在SMB共享文件夹中打开这个文件:

可以正确打开。

至此,NextCloud完全配置完成。


看NAS的硬件选购与组装指南,可以参考我的这篇文章:

编辑于 2021-03-22 23:44

文章被以下专栏收录