使用 Django 实现私有云盘

1 篇文章 0 订阅
1 篇文章 0 订阅

功能更强大的、页面更好看的云盘可以查看 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=文件路径 实现将磁盘文件上传到云盘。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值