功能更强大的、页面更好看的云盘可以查看 https://blog.csdn.net/leeyoshinari/article/details/134068279
众所周知,当前使用最广泛的云盘是百度网盘,而百度网盘下载的龟速让人难以忍受,再加上百度各种其他的骚操作,让人边骂还不得不用,别无选择。现在阿里云盘也入局了,说的很美好,但是也和百度一个德行。其实各种体验问题都可以容忍,最无法忍受的是数据安全,我们上传到百度网盘的每一个文件,都已经被备份了n份了,尽管有些文件已经被我们删除了,但是这些文件仍然在百度的服务器里,个人隐私极不安全;还有一个非常严重的问题是自己好不容易收藏的电影,结果变成了8s的教育片。
既然这么多问题,那我就不用你了,那要存储文件怎么办,可以自己部署一个私有云盘呀。
目前免费的比较好的私有云盘有: 国外的有Nextcloud,ownCloud,这两个出自一脉,免费版的基本功能都有,但有一个致命的弱点是慢,非常占用服务器资源,网上一堆提高性能的攻略都没用(可能我水平不行,没有get到点);国内的有可道云,免费版的也是基本功能都有,很多想用的功能都需要收费。通过使用,发现这些云盘都有一个致命的问题: 它们的文件展示逻辑和windows文件资源管理器一样,一次性显示文件夹里的所有文件,没有分页显示,也就是说: 如果一个文件夹里有1万个图片,它会把1万个图片全部显示出来,这会导致服务器磁盘IO达到100%,也会导致浏览器卡爆,甚至崩溃,严重影响使用体验
功能
- 文件夹的新建、删除、重命名、移动、导出
- 文件上传、下载、新建、删除、移动、重命名、分享
- 图片、音视频、pdf文件在线预览功能
- markdown文档在线预览和编辑功能
- 支持权限控制 (使用django自带的权限控制系统)
- 支持集群部署
- 支持分布式储存
技术选型
- 系统框架:django
- 数据库:django支持的所有关系型数据库
- 文件存储:MinIO
系统架构
部署
1、克隆 git clone https://github.com/leeyoshinari/mycloud.git
;
2、进入目录 cd mycloud
,修改配置文件config.conf
;
3、部署MinIO。个人使用不建议按照官方文档部署,直接在网上查资料,一条命令就可以启动;
4、初始化数据库,依次执行下面命令;
python3 manage.py migrate
python3 manage.py makemigrations myfiles
python3 manage.py sqlmigrate myfiles 0001
python3 manage.py migrate
5、数据初始化,主要是初始化根目录数据;
python3 manage.py loaddata initdata.json
6、创建管理员账号;
python3 manage.py createsuperuser
7、处理admin页面的静态文件;
python3 manage.py collectstatic
8、修改uwsgi.ini
,只需修改端口号和项目所在目录即可;
9、部署nginx
,location相关配置如下:(ps: 下面列出的配置中的mycloud
是url上下文,即url前缀,可根据自己需要修改)
(1)静态请求:通过nginx直接访问静态文件,配置静态文件路径
location /mycloud/static {
alias /home/mycloud/myfiles/static;
}
(2)动态请求:配置uwsgi的端口
location /mycloud {
include uwsgi_params;
uwsgi_pass 127.0.0.1:12020;
uwsgi_param HTTP_Host $proxy_host;
uwsgi_param HTTP_X-Real-IP $remote_addr;
proxy_set_header HTTP_X-Forwarded-For $proxy_add_x_forwarded_for;
}
(3)访问文件系统:配置MinIO的端口
location /mycloud/getFile/ {
proxy_pass http://127.0.0.1:9000/;
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
通常nginx会限制请求体大小,需要增加配置client_max_body_size 4096M;
,还有其他超时时间的配置,可自行上网查找资料修改;
10、启动uwsgi
uwsgi uwsgi.ini
11、访问页面,url是 http://ip:port/上下文
12、访问权限控制页面,url是 http://ip:port/上下文/admin
13、如果想把磁盘上已有的文件放入云盘,可通过调用接口 file/uploadByPath?folderId=目录ID&path=文件路径
实现将磁盘文件上传到云盘。