在刚刚玩VPS的时候,我就听说了OneIndex,之所以迟迟没有去了解,原因有二:一是我本身并不依赖Onedrive,二是因为懒。现在又开始来用,原因是继某Centos7主机掉bbr之后给我带来的一系列备份恢复问题,便从Owncloud转到Onedrive。本以为可以直接分享,没想到因为某些被人熟知的原因 ,个人版OD的分享链接在国内是打不开的。于是想到利用Oneindex这个第三方应用了。本期简单介绍一下如何部署OneIndex~
交流群:Newlearnerの水群
简介
OneIndex是一个类似与PHP目录的程序,其主要功能是将OneDrive的文件目录给列出来,仅仅需要将程序部署在服务器上,不占用太大的空间,索引中的文件并不占用服务器空间,仅仅占用OneDrive容量,流量也不用走服务器流量。支持部分音视频/图片格式在线浏览和下载,本质是一个在线下载网站。
环境要求
1、PHP空间,PHP 5.6+ 需打开curl支持
2、OneDrive 账号 (个人、企业版或教育版/工作或学校帐户)
3、OneIndex 程序
本期使用lnmp环境来安装OneIndex,我个人使用的是PHP7.2,但是据issues反映,在使用PHP7.2的时候,会出现Warning: Use of undefined constant exts - assumed 'exts' (this will throw an Error in a future version of PHP) in /www/wwwroot/yun.imxh.site/lib/route.php on line 33
这样的错误。
提供可能解决问题的思路:最新版本PHP错误问题及临时解决方法/直接安装PHP5.6
部署
1、lnmp一键脚本
1 2 3 4 5 6 7 8 9 |
#部署lnmp的过程就不细讲了,我用的是PHP7.2,一切正常。担心会出现问题的朋友请食用5.6版本 #进入域名命名的根目录,然后: wget https://github.com/donwa/oneindex/releases/download/3.0/oneindex.zip unzip mv #给config和cache两个目录赋予权限 chmod -R 777 config cache |
打开该域名,就进入安装的页面了,为了给以后的使用带来便利,我们先不急着在前端配置。继续在后端nginx编写伪静态:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#找到对应的nginx配置文件,lnmp一键脚本一般位于/usr/local/nginx/conf/vhost里面 添加如下内容: if (!-f $request_filename) { set $rule_0 1$rule_0; } if (!-d $request_filename) { set $rule_0 2$rule_0; } if ($rule_0 = "21") { rewrite ^/(.*)$ /index.php?/$1 last; } |
该伪静态可以避免链接中存在/?/
2、Docker安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#首先安装docker 可以参考 https://yeasy.gitbooks.io/docker_practice/install/ #部署oneindex并运行 docker run -d --name oneindex \ -p 80:80 --restart=always \ (端口在不理解的情况下保持一致,80/443) -v ~/oneindex/config:/var/www/html/config \ -v ~/oneindex/cache:/var/www/html/cache \ -e REFRESH_TOKEN='0 * * * *' \ -e REFRESH_CACHE='*/10 * * * *' \ setzero/oneindex REFRESH_TOKEN刷新一次token的crontab表达式,默认值0 * * * *,即每小时 REFRESH_CACHE刷新一次cache的crontab表达式,默认值*/10 * * * *,即每10分钟 #停止删除容器: docker stop oneindex docker rm -v oneindex |
3、前端配置
登录你的域名,开始部署
这里点击蓝色的「获取应用ID和机密」,会跳转到Onedrive的官网,获取client_id
和client_secret
注意保存这两个信息,核对填写无误之后,点击「下一步」
最后一步是绑定账号,点击之后跳转到Onedrive,授权即可
Further more
打开http(s)://域名/admin
即可登录,如果在第一步没有配置伪静态,就会出现404等错误。管理初始密码为:oneindex
- 首先在「基本设置」中开启「去掉
/?/
」,OneIndex默认给出整个OD的目录,如果你的网盘中有一些大姐姐不想被人看到,你可以选择在OD中新建一个专门用于共享的目录(比如/share),并修改设置中的「onedrive起始目录」。 - 关于缓存,缓存全部存放在后端的cache文件夹里面,需要我们定期清理缓存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#登录后端 crontab -e #添加(以下基于lnmp一键脚本) */10 * * * * php /home/wwwroot/你的域名/one.php cache:refresh #非lnmp一键脚本 */10 * * * * php /oneindex配置目录/one.php cache:refresh #其中关于定时的解释 * * * * * 要执行的命令 | | | | | | | | | ---- 周当中的某天 (0 - 7) (周日为 0 或 7) | | | ------ 月份 (1 - 12) | | -------- 一月当中的某天 (1 - 31) | ---------- 小时 (0 - 23) ------------ 分钟 (0 - 59) |
- 考虑文件的安全性以及防止滥用,我们可以为文件目录添加密码
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#新建一个名为.password的无后缀格式文件,在其中输入密码 该文件可在https://github.com/donwa/oneindex/tree/files下载 #macOS生成 进入terminal,cd到某目录 vi .password :wq command+shift+. #windows生成 run cmd echo hi > .password |
- 在文件夹底部添加说明
在 OneDrive 的文件夹中添加
README.md
文件,使用 Markdown 语法。
- 在文件夹头部添加说明:
在 OneDrive 的文件夹中添加
HEAD.md
文件,使用 Markdown 语法。
- 直接输出网页
在 OneDrive 的文件夹中添加
index.html
文件,程序会直接输出网页而不列目录。
配合 文件展示设置-直接输出 效果更佳。
- 命令行功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#仅能在PHP CLI模式下运行 #清除缓存: php one.php cache:clear #刷新缓存: php one.php cache:refresh #刷新令牌: php one.php token:refresh #上传文件: php one.php upload:file 本地文件 [OneDrive文件] #上传文件夹: php one.php upload:folder 本地文件夹 [OneDrive文件夹] |
墙国人有墙国人的无奈,采用这种办法才能够使用web下载Onedrive的内容,眼泪往肚子里流~当然OneIndex也可以配合Aria2在线下载和观看一些影片等。担心违反TOS,怕是要谢罪,还是不去冒这个险了,大家手里有抗投诉的小鸡完全可以尝试。
不错,正准备弄这个呢,感谢教程
github.io怎么部署OneIndex
你好,今天是2月22日,自2月21日开始尝试安装oneindex就失败,中转桥接页报404,查看ftp是配置目录内未生成token.php,不知道怎么解决这个问题呢?我曾尝试post,onedrive api,但是没成功。
刚好前不久我也打不开了,排查之后觉得应该是token过期了,拉取最新版本重装了一下,解决了问题
已经加tg群,不知是否能够咨询一下,目前我oneindex无法安装,但是转用另一个程序,通过heroku连接github安装成功并能够使用,但是我还是想试试看oneindex无法安装是否有办法解决,目前所看到的是因为中转回调页404报错,然后通过回调页的code来进行post获取token始终是失败,附上通过其他程序在heroku安装完毕的网站。
博客的问题都可以来tg讨论群讨论的,之前我有回答过,不知道你有没有看见:https://t.me/NewlearnerGroup/552715