群晖Docker中的Nextcloud挂载任意本地存储

最近升级到21.0版的Nextcloud,在挂载外部存储时遇到了麻烦,无论是本地还是远程使用效果都不理想。本地挂载时,直接利用文件服务能挂载的只有SMB,FPT或SFTP均不能连接,但SMB有时出现运行资源消耗高的问题,读正常但编辑文件有时会出现不能写入的问题。用FTP挂载同城远程共享时系统反应很慢,而群晖本身挂载同一个共享却可以秒开,这说明Nextcloud的网络配置有严重问题。这也许是新版本的问题或群晖DSM7.0的问题,因为以前版本挂载非常方便,一般用SFTP直接挂共享文件夹,简单方便无需复杂配置。

如果把Nextcloud作为生产力工具来使用,必然要解决频繁生成文件和编辑文件,也就是要连续快速的读取和写入,挂载远程效果差,用文件服务器挂载本地效果也很差。经过大量探索,成功实现不用文件服务器直接挂载群晖NAS上的任意共享文件夹。

实现这个功能的基本原理是,利用Nextcloud的本地挂载功能,挂载一个内部的本地目录,这个目录是容器内的;再利用容器的卷映射将挂载的容器目录映射到要实际存储的目录上;第三步是更新Nextcloud的数据库,让Nextcloud记录实际存储目录的结构信息并关联到自身的文件管理系统中。

1、SSH进入群晖后台,并取得管理员权限。

2、进入Nextcloud容器,建立挂载文件夹。

docker exec -it nextcloud bash

cd /var/www

mkdir file1

3、登录Nextcloud,以管理员身份挂载file1文件夹

其中file是显示在Nextcloud中的名字,可以自定义,将挂载的文件指定给授权的user1用户。

4、关闭Nextcloud容器,建立存储空间映射

4.1 打开群晖的docker套件,关闭Nextcloud容器

4.2 将要使用的目录映射到被挂载的目录

其中target文件就是我们实际要用于工作中存储文件的文件夹,可以是群晖中任意一个文件夹。

5、启动容器,更新数据库

5.1 启动容器,并SSH进入群晖后台

5.2 扫描Nextcloud挂载的所有文件系统

docker exec –user www-data nextcloud php occ files:scan –all

5.3 以普通用户身份user1登录Nextcloud,检查系统是否正确显示并列出target目录下所有的文件,尝试新建文件并编辑保存相关文件。

为避免系统的权限和文件保护问题,target目录尽量不要是NAS的共享根目录,并授于合适的权限。

由于本地挂载的是NAS的文件夹,直接通过映射来读写数据,与直接使用群晖的filestation是一样的,完全没有延迟的问题,只要网络正常体验是所有连接中最好的。