突发奇想,两个网盘开源项目合并到一起,实现网盘自由
一个项目是 [ZFile]
https://docs.zfile.vip/#/?id=zfile
预览地址: https://zfile.vip
文档地址: https://docs.zfile.vip
社区地址: https://bbs.zfile.vip
项目源码 : https://github.com/zhaojun1998/zfile/
前端源码 : https://github.com/zhaojun1998/zfile-vue/
文档源码 : https://github.com/zhaojun1998/zfile-docs/
此项目是一个在线文件目录的程序, 支持各种对象存储和本地存储, 使用定位是个人放常用工具下载, 或做公共的文件库. 不会向多账户方向开发.
一个项目是 [nextcloud]
Nextcloud :ownCloud 的衍生版本,在其基础上做了许多改进,地址:https://nextcloud.com/。
一,环境准备
机器一台,配置看自己需求
安装docker
二,开始部署
1,docker安装nextcloud
docker run -d -v /root/nextdb:/var/www/html/data --name next -p 8181:80 nextcloud
docker run :启动一个容器
-d:后台运行容器
--restart=always:Docker 重启的时候容器也会重启
--name nextcloud:命名容器的 name 为 nextcloud,可以替代容器 id 使用
-p 8080:80:将容器的 80 端口映射到服务器的 8080 端口
--restart=always 跟着docker服务一起启动
nextcloud:要启动的镜像名称
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b91c4c43b918 nextcloud "/entrypoint.sh apac…" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp great_hofstadter
这里我们直接使用nextcloud的存储在主机上面的的数据库,就不搭建数据库存储
浏览器初始化,管理员账号密码啥的 数据存储在/var/www/html/data
取消下面小勾,不用安装那个杂七杂八的,进行安装
可能存在要给权限的问题,那我们就给权限
2,docker安装zfile
docker pull zhaojun1998/zfile
首次运行会自动创建数据库目录和日志文件目录,并映射到本地,分别为 /root/zfile/db
(数据库文件) 和 /root/zfile/logs
(日志文件). 后期迁移可直接将整个zfile目录备份恢复, 并再次执行以下命令。
mkdir -p /root/zfile/logs
mkdir -p /root/zfile/db
docker run -d --name=zf --restart=always \
-p 8080:8080 \
-v /root/zfile/db:/root/.zfile/db \
-v /root/zfile/logs:/root/.zfile/logs \
zhaojun1998/zfile
#执行结果如下
[root@GrayNext-VM ~]# mkdir -p /root/zfile/db
[root@GrayNext-VM ~]# mkdir -p /root/zfile/logs
[root@GrayNext-VM ~]# docker run -d --name=zf --restart=always
-p 8080:8080 -v /root/zfile/db:/root/.zfile/db -v /root/zfile/logs:/root/.zfile/logs zhaojun1998/zfile
060830d53146a7fa54ce165fcad9433a410e3f4844572d58f19aed1d9252022a
[root@GrayNext-VM ~]#
安装依赖
# CentOS系统
yum install -y java-1.8.0-openjdk unzip
# Debian/Ubuntu系统
apt update
apt install -y openjdk-8-jre-headless unzipCopy to clipboardErrorCopied
出现complete!即为安装成功。
浏览器初始化,密码啥的,最后我们这个进行挂载
后台设置-驱动器列表
后台设置-新增驱动器,挂载本地存储就可以了
然后简单设置一下
我们访问一下,后台可以往/root/zfile/db 传东西都是能在网页上显示的
这里两个项目都可以独立使用了
三,合并他们两的文件,实现文件共享,优势共享,缺点互补
第一
是使用脚本同步他们俩的数据文件
一个是/root/zfile/db
一个是/root/nextdb/$username/files
编辑vim db-next.sh 双向同步脚本
#安装同步备份软件,该软件可以同步了增量信息
yum install rsync
#编辑vim db-next.sh
#写入下面
#使用rsync命令进行同步 rsync -av 源目录 目标目录
rsync -av /root/nextdb/lxf/files/* /root/zfile/db
rsync -av /root/zfile/db/* /root/nextdb/lxf/files
写一个定时任务执行脚本,我这里是每分钟同步一次
crontab -e
*/1 * * * * sh db-next.sh
第二
因为上面使用同步脚本,仅仅只能把文件使两个文件夹都有,有人说这样搞了应该没得问题了,但是nextcloud有一个问题,这是官方说了的
添加文件到nextcloud把自己本地的文件复制到nextcloud相应的用户目录中,nextcloud中并不会显示,因为数据库中没有相应的数据,这里就需要手动执行命令,nextcloud才会把文件数据添加进数据库里docker exec nextcloud php occ files:scan --all//或docker exec --user www-data nextcloud php occ files:scan --all
按照上面的官方解释 我这里就使用上面这条命令
docker exec -u 文件拥有者 容器名 php occ files:scan --all
文件拥有者:使用ll命令查看nextcloud数据文件的拥有者
cd /root/nextdb/$username/fileslldrwxr-xr-x 2 33 tape 4096 Feb 7 23:10 Documents-rw-r--r-- 1 33 tape 10944512 Feb 8 00:22 en - 嚣张.mp4
[root@aliyunhost ~]# docker exec next php occ files:scan --allConsole has to be executed with the user that owns the file config/config.phpCurrent user id: 0Owner id of config.php: 33Try adding 'sudo -u #33' to the beginning of the command (without the single quotes)If running with 'docker exec' try adding the option '-u 33' to the docker command (without the single quotes)#第一次使用报错,按照提示添加一些参数[root@aliyunhost ~]# docker exec -u 33 next php occ files:scan --allStarting scan for user 1 out of 1 (lxf)+---------+-------+--------------+| Folders | Files | Elapsed time |+---------+-------+--------------+| 6 | 33 | 00:00:00 |+---------+-------+--------------+#出现表格就表示ok
编辑定时任务crontab -e #添加第二条定时任务
/1 * sh db-next.sh
/1 * docker exec -u 33 next php occ files:scan --all
这下就已经完美实现同步了,zfile与nextcloud已经完全同步了
之前我在想,能不能把两个数据库共用一个本地文件,然后映射到俩容器里面去
zfile没有异议
nextcloud 有异议,他觉得不安全,权限太大 哈哈哈哈,好吧就这样吧
bey!