Nextcloud支持多种访问方式,但是最快速的导入文件还是直接复制最为稳妥。Nextcloud对于服务器未经Nextcloud操作的文件,用Nextcloud根目录下的occ
工具进行导入,在Docker中则是另外一种方式。
我们的Nextcloud并不是官方的版本,而是Wonderfall的版本(链接:https://github.com/Wonderfall/docker-nextcloud),这里我们只讨论此版本。
版本信息
Docker 18.09.0
Wonderfall/Nextcloud 14.0.4
1.导入文件
对于本地服务器,我们使用mv
或cp
命令即可,但对于另外的服务器,我们可以选择使用scp
或rsync
,考虑到外网发布服务的安全等问题,这里我们选择使用rsync
。
rsync
支持使用ssh
通道,并且支持ssh
自定义端口,同时rsync
还支持如下自定义参数:
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
- -r, --recursive 对子目录以递归模式处理
- -l, --links 保留软链结
- -p, --perms 保持文件权限
- -t, --times 保持文件时间信息
- -g, --group 保持文件属组信息
- -o, --owner 保持文件属主信息
- -D, --devices 保持设备文件信息
- -v, --verbose 详细模式输出
- -e, --rsh=command 指定使用rsh、ssh方式进行数据同步
以上三个参数基本满足我们的使用了,实际使用过程中很像scp
# 例子
rsync -av -e 'ssh -p 2500' localfile root@domain.com:/data/docker/nextcloud/data/user/files
- localfile 本地文件或文件夹,如果不在工作目录,需要填写绝对路径
- root@domain.com 拷贝到的服务器,这里root指定用户
- /data/docker/nextcloud/data/user/files 拷贝到的服务器的路径,这里填写的是nextcloud用户user的文件映射的存储路径,nextcloud需要用户的文件存放对应的目录。
2.调整权限
Docker不同于虚拟机,所以跑在宿主机上的容器都是使用相同的内核,自然也就使用相同的UID
与GID
,我们使用的Wonderfall/nextcloud镜像是采用1000:1000用户与用户组进行构建的,所以我们需要对刚刚传输的文件进行chown
操作。
chown -R 1000:1000 /wwwdata/docker/nextcloud/data/user/files/localfile
如果不进行这个操作,OCC导入文件后会发现此文件/文件夹不可读写,无任何权限。
3.OCC扫描文件系统
刚刚说的OCC导入文件,其实是利用OCC进行重新扫描文件系统建立缓存。
Wonderfall/nextcloud镜像与官方不同的是,OCC命令更容易使用。默认命令为docker exec -it nextcloud occ
,OCC后即可接我们需要进行的操作,这里因为是只需要重新扫描文件系统,只介绍这个命令。
docker exec -it nextcloud occ files:scan user1 user2 -v
- docker exec -it nextcloud occ 略
- files:scan 重新扫描文件系统
- user1 user2 可以设定扫描哪个用户,不填则全部扫描,中间以空格间隔
- -v 显示细节
如刚刚我们已经调整好权限的文件,命令如下:
docker exec -it nextcloud occ files:scan user -v
根据实际测算,100G的图片视频文件,扫描时间大约在2分钟之内,因为加了-v
参数,所以可以看到详细的过程。
参考链接: