零成本搭建自有公私兼备云盘(Cloudreve)

首先放几个栗子:
CuoJue NetDisk
OneNET 对象储存的文件分享
OneNET 云主机远程储存的文件分享

下载的时候可通过提供方域名分辨储存区域
标题写的零成本只是云盘储存空间零成本,云盘系统还是需要自行搭建

搭建 Cloudreve

搭建这个玩意,直接看官方文档吧 安装 - Cloudreve 文档

需要 PHP+MYSQL 环境,需要注意的是,不支持 PHP7.4(ThinkPHP 框架不兼容),目前在 PHP7.2 下运行良好

增加上传策略

增加移动 OneNET 对象储存

本篇文章的核心部分第一节
截止目前 2020-1-2 本服务还是免费的(免费空间 10GB+流量费全免)

  1. 注册地址:https://open.iot.10086.cn/cloud/console/object-storage/index
    注册后可免费领取对象储存和云服务器等资源,这里先开通对象储存

  2. 创建一个对象储存容器和 AccessKey

  3. 在 Cloudreve 后台配置

    上传策略名称自己取名字
    AWSAccessKeyId填写获取到的 AccessKeyId
    AWSSecretKey填写获取到的 SecretKey
    存储桶名称填写容器名称
    下载根 URLhttps://容器名称.oos-cn-wuxi.heclouds.com/
    上传服务器 URLhttps://容器名称.oos-cn-wuxi.heclouds.com/
    储存区域oos-cn-wuxi
    EndPointhttps://oos-cn-wuxi.heclouds.com/
  4. 配置完毕后修改用户组上传策略然后测试一下上传

增加移动 OneNET 云主机储存

本篇文章的核心部分第二节
截止目前 2020-1-2 本服务还是免费的(免费云主机最大 4 核 8G/免费云盘最大容量 2TB/免费文件储存无限容量)

  1. 服务器配置好环境

  2. 环境配置好后安装 cloudreve 远程存储服务端
    直接下载源码 https://github.com/cloudreve/remote-server 部署到服务器,只需要 PHP 环境,不需要数据库
    详细看官方文档:https://github.com/cloudreve/Cloudreve/wiki/%E8%BF%9C%E7%A8%8B%E5%AD%98%E5%82%A8%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%90%AD%E5%BB%BA
    需要注意:1、主机封了 80 和 443 端口,需要用其他端口访问。2、如果源站配置了 HTTPS 访问,则远程上传也必须配置 HTTPS

  3. 修改上传大小配置
    upload.php文件第 69 行有检测上传文件大小,这里需要修改成和后台填写的一致,如果不一致并且超过了这里的限制会提示上传文件过大。
    if($chunk && $this->fileSize > 4194350)
    我改成了 300M
    if($chunk && $this->fileSize > 314572800)
    下面的分片文件大小也需要修改(可能是个 BUG,分片大小 4M,实际上传分片大小 10M,导致拼合的文件错误)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function combineChunk($chunkList){
$fileName = "file_".md5(uniqid());
$fileObj=fopen ('chunks/'.$this->policy["uid"]."/".$fileName,"a+");
foreach ($chunkList as $key => $value) {
$chunkObj = fopen('chunks/'.$this->policy["uid"]."/".$value, "rb");
if(!$fileObj || !$chunkObj){
self::setError("文件创建失败");
}
$content = fread($chunkObj, 4195304);
fwrite($fileObj, $content, 4195304);
unset($content);
fclose($chunkObj);
unlink('chunks/'.$this->policy["uid"]."/".$value);
}
fclose($fileObj);
$this->generateFile($fileName);
}

改成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function combineChunk($chunkList){
$fileName = "file_".md5(uniqid());
$fileObj=fopen ('chunks/'.$this->policy["uid"]."/".$fileName,"a+");
foreach ($chunkList as $key => $value) {
$chunkObj = fopen('chunks/'.$this->policy["uid"]."/".$value, "rb");
if(!$fileObj || !$chunkObj){
self::setError("文件创建失败");
}
$content = fread($chunkObj, 10485760);
fwrite($fileObj, $content, 10485760);
unset($content);
fclose($chunkObj);
unlink('chunks/'.$this->policy["uid"]."/".$value);
}
fclose($fileObj);
$this->generateFile($fileName);
}
  1. 配置 CORS 跨域访问
    nginx 配置如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
location / {
set $origin '*';#写入需要跨域的请求地址
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' $origin;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}

if ($request_method = 'POST') {
add_header 'Access-Control-Allow-Origin' $origin;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}

if ($request_method = 'GET') {
add_header 'Access-Control-Allow-Origin' $origin;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
}
  1. 远程下载配置 X-Sendfile 减轻服务器压力
    这里需要下载我修改好的 file.php 替换到远程服务端根目录下 点击这里下载
    开启 Sendfile 功能后还可以配置 Web Server 权限禁止外部直接访问 uploads 目录
    例如 nginx
1
2
3
4
location ~ ^/(thumbs|uploads)
{
internal;
}

增加微软 OneDrive 储存

以上两个上传策略毕竟是羊毛,不知道哪天就收费了,所以还可以增加其他储存一起使用
  在编辑页面获取到应用 ID 和机密后,填入对应选项,然后保存的时候会要求登录获取权限

而且 Onedrive 是异步上传,需要先传到服务器,然后中转上传到 OneDrive,“这对虚拟主机一点也不友好,毕竟需要运行一个二进制客户端”

异步客户端配置直接看官方文档 https://github.com/cloudreve/Cloudreve/wiki/Onedrive%E5%AF%B9%E6%8E%A5%E8%AF%B4%E6%98%8E

增加七牛云、阿里云、又拍云

这些配置相对简单,省略……


零成本搭建自有公私兼备云盘(Cloudreve)
https://cuojue.org/read/cuojue_netdisk.html
作者
WeiCN
发布于
2020年1月2日
许可协议