使用 Oneindex 搭建一个不限流量网盘

  • 11
  • 16,938 views
  • A+
所属分类:有趣源码

Oneindex 简介:

OneIndex 是针对 Onedrive 网盘的一个开源程序。可以将 Onedrive 存储的文件展示,直链下载。支持视频在线播放,不占用服务器空间,而且不走服务器流量。

使用 Oneindex 搭建一个不限流量网盘

Oneindex 安装前准备:

安装前需要先申请 OneDrive 网盘,OneIndex 支持个人的 OneDrive 网盘,不过个人版的就算是扩容最大也才 15G,当然用来放一些文档是足够的,而如果你是用来放视频,那我推荐你申请 5T 的 OneDrive 网盘。

OneDrive 5T 申请方法:

 

Oneindex 安装:

先去 Oneindex 开源地址:https://github.com/donwa/oneindex 下载

这里服务器用的宝塔版面,Nginx,注意 PHP 版本必须 5.6+

跟正常部署网站一样,在宝塔版面建立新站点,上传 Oneindex 到新站点目录。

设置 Nginx 伪静态:

  1. if (!-f $request_filename){
  2.     set $rule_0 1$rule_0;
  3. }
  4. if (!-d $request_filename){
  5.     set $rule_0 2$rule_0;
  6. }
  7. if ($rule_0 = "21"){
  8.     rewrite ^/(.*) /index.php?/$1 last;
  9. }

然后打开域名进行安装,注意后台地址:https://xx.com/?/admin,默认密码是:oneindex 。

Demo:WXLOG 云

 

拓展:

如果你想离线 BT 下载到 OneDrive 网盘,可以使用 Aria2+Aria2Ng 。

 

Aria2 安装:

  1. wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/aria2.sh && chmod +x aria2.sh && bash aria2.sh

安装后可以使用 bash aria2.sh 查看修改 Aria2 配置。

 

AriaNg 安装:

下载 AriaNg:https://pan.wxlog.cn/Other/AriaNg-1.1.0.zip

跟正常部署网站一样,在宝塔版面建立新站点,上传 Aria2Ng 到新站点目录,绑定【域名】或者【IP:端口】即可。

打开【域名】或者【IP:端口】就可访问以  AriaNg 界面。

AriaNg 设置界面填好 Aria2 地址及密钥等,显示已连接即可。

使用 Oneindex 搭建一个不限流量网盘

 

部署 OneDrive 上传脚本:

这里使用的是萌咖大佬的脚本;(请忽略折叠部分脚本,脚本作者已经不再维护。)

展开

脚本特点:脚本支持文件夹上传,支持获取文件的匿名直链,且只适用于 OneDrive 非个人版。

Github 地址:https://github.com/0oVicero0/OneDrive

 

脚本安装命令:

  1. wget --no-check-certificate -qO- "https://raw.githubusercontent.com/0oVicero0/OneDrive/master/OneDrive.sh" |bash

运行命令 onedrive -a,将返回的网址复制到浏览器打开,再登陆你的 OneDrive for Business 账号,登陆成功后复制地址栏中的地址(复制包括 localhost 的所有链接地址),粘贴到 SSH 客户端里,敲回车键即可。

使用 Oneindex 搭建一个不限流量网盘

如果返回以下字段:It seems like we have a refresh token, so we are ready to go,那就是设置成功了。

       如果你遇到 bash: onedrive: command not found 错误,则要在 /usr/local/etc/OneDrive 文件夹中,修改 onedriveonedrive-d 脚本,在第二行都加上 export PATH=/usr/local/bin:$PATH 代码,保存 。然后先运行命令 export PATH=/usr/local/bin:$PATH ,再运行命令 onedrive -a 就行了。

 

命令使用:

  1. #此命令只查看根目录文件
  2. onedrive -l
  3. #如果我们要查看根目录 root 文件夹里的文件
  4. onedrive -l /root
  5. #此命令默认上传到 OneDrive 根目录
  6. onedrive '/root/1.txt'
  7. #如果上传到指定文件夹,就需要加-f 参数
  8. onedrive -f RATS '/root/1.txt'  #上传到 OneDrive 根目录的 RATS 文件夹
  9. onedrive -f RATS/RATS '/root/1.txt'  #上传到 OneDrive 根目录 RATS 文件夹里的 RATS 文件夹
  10. #此命令默认上传到 OneDrive 根目录
  11. onedrive-d '/root'
  12. #如果上传到指定文件夹,就需要加-f 参数
  13. onedrive-d -f RATS '/root'  #上传到 OneDrive 根目录的 RATS 文件夹
  14. onedrive-d -f RATS/RATS '/root'  #上传到 OneDrive 根目录 RATS 文件夹里的 RATS 文件夹

这是萌咖大佬使用 Golang 基于新的 API 写了个效率更高的上传工具,同时也修复了各种 Shell 版本遗留下来的小问题,该版本特点就是授权简单,无需依赖,单文件。

Github 地址:https://github.com/MoeClub/OneList/tree/master/OneDriveUploader

1、授权认证

点击右侧 URL 登录并授权,授权地址→传送门

授权后会获取一个 localhost 开头打不开的链接,这里只需要记住 code ,也就是链接中 code=& 中间的参数。

 

2、安装 OneDriveUploader

  1. wget https://raw.githubusercontent.com/MoeClub/OneList/master/OneDriveUploader/amd64/linux/OneDriveUploader -P /usr/local/bin/
  2. chmod +x /usr/local/bin/OneDriveUploader

 

3、初始化配置

  1. #国际版,将 url 换成你上面复制的授权地址,包括 http://loaclhost。
  2. OneDriveUploader -a "url"
  3. #个人版(家庭版),将 url 换成你上面复制的授权地址,包括 http://loaclhost。
  4. OneDriveUploader -ms -a "url"
  5. #中国版(世纪互联),将 url 换成你上面复制的授权地址,包括 http://loaclhost。
  6. OneDriveUploader -cn -a "url"

 

如果提示 Init config file: /path/to/file/auth.json 或者 Init config file: `/root/auth.json` 类似信息,则初始化成功。

 

4、使用命令

  1. Usage of OneDriveUploader:
  2.   -a string
  3.         // 初始化授权
  4.         Setup and Init auth.json.
  5.   -b string
  6.         // 自定义上传分块大小, 可以提高网络吞吐量, 受限于磁盘性能和网络速度.
  7.         Set block size. [Unit: M; 5<=b<=60;] (default "10")
  8.   -c string
  9.         // 配置文件路径
  10.         Config file. (default "auth.json")
  11.   -n string
  12.         // 上传单个文件时,在网盘中重命名
  13.         Rename file on upload to remote.
  14.   -r string
  15.         // 上传到网盘中的某个目录, 默认: 根目录
  16.         Upload to reomte path.
  17.   -s string
  18.         // 要上传的文件或文件夹
  19.         Upload item.
  20.   -t string
  21.         // 线程数, 同时上传文件的个数. 默认: 2
  22.         Set thread num. (default "2")

 

5、命令示例

  1. #将当前目录下的 Mark.jpg 文件上传到 OneDrive 网盘根目录
  2. OneDriveUploader -s "Mark.jpg"
  3. #将当前目录下的 Mark1.jpg 文件上传到 OneDrive 网盘根目录,并改名为 Mark2.jpg
  4. OneDriveUploader -s "Mark1.jpg" -n "Mark2.jpg"
  5. #将当前目录下的 Download 文件夹上传到 OneDrive 网盘根目录
  6. OneDriveUploader -s "Download"
  7. #将当前目录下的 Download 文件夹上传到 OneDrive 网盘 Test 目录中
  8. OneDriveUploader -s "Download" -r "Test"
  9. #将同目录下的 Download 文件夹上传到 OneDriv 网盘 Test 目录中,使用 10 线程
  10. OneDriveUploader -t 10 -s "Download" -r "Test"
  11. #将同目录下的 Download 文件夹上传到 OneDrive 网盘 Test 目录中,使用 15 线程,并设置分块大小为 20M
  12. OneDriveUploader -t 15 -b 20 -s "Download" -r "Test"

 

Aria2 自动上传

将下面代码自己稍作修改后保存为 rcloneupload.sh 脚本文件。

  1. #!/bin/bash
  2. GID="$1";
  3. FileNum="$2";
  4. File="$3";
  5. MaxSize="15728640";
  6. Thread="3";  #默认 3 线程,自行修改,服务器配置不好的话,不建议太多
  7. Block="20";  #默认分块 20m,自行修改
  8. RemoteDIR="";  #上传到 Onedrive 的路径,默认为根目录,如果要上传到 MOERATS 目录,""里面请填成 MOERATS
  9. LocalDIR="/usr/local/caddy/www/aria2/Download/";  #Aria2 下载目录,记得最后面加上/
  10. Uploader="/usr/local/bin/OneDriveUploader";  #上传的程序完整路径,默认为本文安装的目录
  11. Config="/root/auth.json";  #初始化生成的配置 auth.json 绝对路径,参考第 3 步骤生成的路径
  12. if [[ -z $(echo "$FileNum" |grep -o '[0-9]*' |head -n1) ]]; then FileNum='0'; fi
  13. if [[ "$FileNum" -le '0' ]]; then exit 0; fi
  14. if [[ "$#" != '3' ]]; then exit 0; fi
  15. function LoadFile(){
  16.   if [[ ! -e "${Uploader}" ]]; then return; fi
  17.   IFS_BAK=$IFS
  18.   IFS=$'\n'
  19.   tmpFile="$(echo "${File/#$LocalDIR}" |cut -f1 -d'/')"
  20.   FileLoad="${LocalDIR}${tmpFile}"
  21.   if [[ ! -e "${FileLoad}" ]]; then return; fi
  22.   ItemSize=$(du -s "${FileLoad}" |cut -f1 |grep -o '[0-9]*' |head -n1)
  23.   if [[ -z "$ItemSize" ]]; then return; fi
  24.   if [[ "$ItemSize" -ge "$MaxSize" ]]; then
  25.     echo -ne "\033[33m${FileLoad} \033[0mtoo large to spik.\n";
  26.     return;
  27.   fi
  28.   ${Uploader} -c "${Config}" -t "${Thread}" -b "${Block}" -s "${FileLoad}" -r "${RemoteDIR}"
  29.   if [[ $? == '0' ]]; then
  30.     rm -rf "${FileLoad}";
  31.   fi
  32.   IFS=$IFS_BAK
  33. }
  34. LoadFile;

授权 chmod +x /root/.aria2/rcloneupload.sh ,同时再 Aria2 配置文件中加上一行 on-download-complete=/root/.aria2/rcloneupload.sh重启 Aria2 生效。

如果你想上传到指定的文件夹,修改如下:

  1. #上传到 Onedrive 里的 RATS 目录,参数改为:RemoteDIR="RATS"; 
  2. #上传到 Onedrive 里的 RATS 目录里的 RATS 目录,参数改为:RemoteDIR="RATS/RATS";
       下载 100% 后上传不了,一直卡在做种阶段解决方法:在 Aria2 配置文件里加入 seed-time=0 参数(意思是停止做种),重启 Aria2 就行了。

如果感觉上传速度较慢,可以编辑 /usr/local/etc/OneDrive/onedrive.cfg ,修改 threads 线程数,默认 2。可以修改为 5,建议别太高。

 

有时候我们在电脑上编辑一些脚本或者文件时,放到 linux vps 服务器上会出现问题,其实只需要安装  dos2unix 转换下格式就可以用了。

  1. 安装 dos2unix
  2. #Centos
  3. yum install dos2unix
  4. 转换文件
  5. dos2unix /root/xx   #文件位置

 

参考及整理:

OneIndex 部署教程,利用 OneDrive 打造专属分享型网盘

使用 Aria2+Aria2Ng+OneIndex+OneDrive 建立不限流量/离线 BT 下载/在线观看网盘

VPS 上传文件到 OneDrive 网盘脚本,可配合 Aria2 实现自动上传

 

历史上的今天:

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:11   其中:访客  6   博主  5

    • avatar Dreamelf 0

      我以为被折叠的脚本是个依赖,然后就装了并授权,接着发现下面的脚本才是主角的时候,从/user/local/bin中rm删除了onedrive的两个文件。接着安装并执行了初始化代码OneDriveUploader -a “code一长串直接贴进去的”。然后提示:
      Error: Get token [401 Unauthorized]
      我尝试使用其他浏览器进行授权(最大程度避免缓存同时允许cookie),但获得的code是一样的。错误也是一样的。
      第一个脚本安装成功了。但上传时发现无法在根目录创建目录什么都(登陆账号为root)
      Searching for ‘VideoUpload’ in ”
      2020-03-19 09:37:59 Creating folder ‘VideoUpload’ in ”
      Could not create folder ‘VideoUpload’ in ‘root’
      使用的账号是学校账号。

        • avatar 唯心寒辞  博主

          OneDriveUploader -a “url”
          将 url 换成你上面复制的授权地址,包括 http://loaclhost。试试
          还有有没有给脚本加权限以及脚本LocalDIR的变量有没有修改。
          账号这方面有没有影响我不太清楚。

        • avatar xx 0

          安装到最后部跳转到JU.TN这个网址,已经挂了。
          请问下怎么解

          • avatar W8XP 0

            老哥你的云盘文件是存在OneDrive,还是自己服务器上啊,你的下载速度很快

              • avatar 唯心寒辞  博主

                OneDrive

              • avatar 银麟 0

                Aria下载完上传到onedrive是走服务器流量吧···
                Aria和oneindex必须在一个服务器里吗···
                我把oneindex放在阿里云服务器
                把Aria放在家里群晖是否可行呢

                  • avatar 唯心寒辞  博主

                    Aria和oneindex可以放在不同服务器里

                  • avatar nice 2

                    看到那麽多代碼就怕了。。。

                      • avatar 唯心寒辞  博主

                        如果只是安装Oneindex,其实就跟我们建Wordpress一样简单,不,比建Wordpress更简单

                      • avatar 奶爸de笔记 4

                        不上车了,没有那么大的存储需求。

                          • avatar 唯心寒辞  博主

                            目前一般的网盘已经足够用了