成功搭建 onedrive-cf-index 的亿点经验
在通过一些神秘渠道获取到一枚同济校友邮箱后,我也顺带获得了一个由世纪互联运营的 拥有 1TB 储存空间的 Onedrive(还有 25TB 存储空间的 SharePoint)。于是我想着折腾点什么...
这次要搭建的 Onedrive 列表程序是
由 CloudFlare Workers 强力驱动的 OneDrive 索引
作者也有写 中文文档,但其中有一些错误和挺多细节描述没到位(也许是我笨)
经过一番折腾最终还是完成了部署,并记录下完整步骤。于是乎有了这一篇补充教程
内容主要 以作者的文档为基础,按照作者的步骤进行补充
搭建环境:
Oracle 测试机 1C8G
Debian 10 (4.19.0-16-amd64)
生成 OneDrive API 令牌
也就是创建可用的 API。因为我的这枚世纪互联的账号是没有创建 API 的权限的,所以需要一个有权使用 API 的账号创建一个应用来给它使用。
访问此 URL 创建新的 Blade app:Microsoft Azure.cn App registrations(OneDrive 世纪互联版本)
- 访问 应用注册,使用微软账户登陆,选择
新注册
- 填写应用的
名称
,例如my-onedrive-cf-index
- 将
受支持的帐户类型
设置为任何组织目录(任何 Azure AD 目录 - 多租户)中的帐户
- 将
重定向 URI (可选)
设置为Web
(下拉选项框)、https://localhost
(回调 URL 地址) - 点击
注册
注册应用
- 访问 应用注册,使用微软账户登陆,选择
- 打开
概述
面板获取你的应用程序(客户端) ID
获取应用程序(客户端)ID - 打开
证书和密码
面板,点击新客户端密码
,创建一个新的客户端密码
,并将截止期限
设置为从不
。点击添加
并复制该密码的值
并保存下来 (关闭页面后就复制不了了!)
Update:更新后最多已只能设置为2年
添加客户端密码 打开
API 权限
面板,点击Microsoft Graph
,选择委托的权限
,并搜索offline_access
,Files.Read
,Files.Read.All
并选择这三个权限,然后点击添加权限
添加API权限 获取
refresh_token
,这一步需要 Node.js 和 npm 环境,不清楚或不知道的可以先看下准备工作的第 2 部分确认 Node.js 与 npm 正常
node -v npm -v
分别返回版本号即正常
npx @beetcb/ms-graph-cli
,依次选择Operated by 21Vianet in China
,OneDrive
,然后输入客户端ID
,客户端密码
,回调 URL 地址
后就会获得一串链接
注意:填写回调URL地址时不要直接回车默认,默认的是http://localhost
而不是作者一开始要求填写的https://localhost
。如果这里填写错误会导致接受应用后拿不到需要的东西- 使用浏览器 (可以是自己电脑) 访问这个链接,并登陆世纪互联账号,接受用许可。完成后如下图,需要完整复制地址栏中的内容并填回 VPS 中
接受用许可 不出意外会获得这样一大串的内容
{ client_id: '之前填入的客户端ID', client_secret: '之前填入的客户端密码', redirect_uri: 'https://localhost', auth_endpoint: 'https://login.partner.microsoftonline.cn/common/oauth2/v2.0', refresh_token: '我是refresh_token,复制我!', #只复制单引号内的部分,不要单引号 access_token: '我是access_token', drive_api: 'https://microsoftgraph.chinacloudapi.cn/v1.0/me/drive', graph_api: 'https://microsoftgraph.chinacloudapi.cn/v1.0' }
- 最后,在 OneDrive 中创建一个需要用到的文件夹,比如 /Public 即可。建议不要直接分享根目录!
最后,这么折腾完,我们应该成功拿到如下的几个凭证:
refresh_token
client_id
(客户端ID)client_secret
(客户端密码)redirect_uri
(回调 URL 地址)base
比如上面创建的 /Public
准备工作
- 拉取作者的仓库
git clone https://github.com/spencerwooo/onedrive-cf-index.git
使用 nvm 安装 Node.js 和 npm。别问为什么,
问就是试过后最方便的...# 安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash # 一瞬间后安装完毕,打开新的新的新的终端验证 nvm 安装情况 command -v nvm 成功安装会得到一个 nvm 的回复 # 安装 Node.js 和 npm nvm install 'lts/*'
安装完毕后从 获取
refresh_token
这一步过来的人可以回去继续 获取refresh_token
了获取 CloudFlare 的 API Token 前往获取
- 创建一枚
API 令牌
,注意不是API密钥 - API 令牌模板选择
编辑 Cloudflare Workers
- 帐户资源 包括 所有账户
- 区域资源 包括 所有区域
然后一路下一步创建完毕后将令牌内容保存下来 (关闭页面后就复制不了了!)
- 创建一枚
CloudFlare Workers 相关工作
坑1:不加参数会提示 node: Permission denied
坑2:nvm直接安装的 Stable 版(v15.13.0)安装报错,所以前面是安装的 LTS 版(v14.16.0)# 安装 CloudFlare Workers 官方编译部署工具 npm i @cloudflare/wrangler -g --unsafe-perm=true --allow-root # 进入程序目录 cd ./onedrive-cf-index # 使用 npm 安装依赖 npm install # 通过 API Token 使用 wrangler 登录 CloudFlare 账户 wrangler config # 输入前面取得的 API 令牌 # 使用这一命令检查自己的登录状态 wrangler whoami
获取需要的 CloudFlare 参数
打开 CloudFlare 并登录,选择一个添加的域名,再向下滚动一点,在右侧栏处 API 保存下区域 ID
以及账户 ID
同时,在首页右侧 Workers 中创建一个 Worker,然后直接保存并部署
。名称 (前缀) 可稍后在 Worker 列表中重命名
回到 VPS 中,此时应该在 onedrive-cf-index 文件夹内
修改 wrangler.toml- name:就是刚刚创建的 Worker 名称。例如这段中的
部分
<name>.<worker_subdomain>.workers.dev
- account_id:前面获取到的 CloudFlare 账户 ID
- zone_id:前面获取到的 CloudFlare 区域 ID
- name:就是刚刚创建的 Worker 名称。例如这段中的
创建叫做
BUCKET
的 Workers KV# 创建 KV bucket wrangler kv:namespace create "BUCKET" # ... 或者,创建包括预览功能的 KV bucket wrangler kv:namespace create "BUCKET" --preview
修改 wrangler.toml 里面的 kv_namespaces 部分
# 注意区分创建的是不是带预览功能的 KV bucket # 不带预览 kv_namespaces = [ { binding = "BUCKET", id = "修改为上一步创建后获取的ID" } ] # 带预览 kv_namespaces = [ { binding = "BUCKET", id = "修改为上一步创建后获取的ID", preview_id = "修改为上一步创建后获取的preview_id" } ]
- client_id:前面获取的 OneDrive 客户端ID
- base:前面创建的 base 目录 (比如/Public)
- redirect_uri:https://localhost
部署的是由世纪互联运营的中国版 OneDrive,所以还需要以下步骤
修改 type 下的 accountType 为 1
保持 driveType 不变,即 0使用 wrangler 添加 Cloudflare Workers 环境变量
# 在这里粘贴 refresh_token wrangler secret put REFRESH_TOKEN # 在这里粘贴 client_secret wrangler secret put CLIENT_SECRET # 在这里输入自己想设置的认证密码 wrangler secret put AUTH_PASSWORD
至此,所有准备工作已经就绪,只欠东风!
编译与部署
如果之前创建的是带预览功能的 KV bucket,可以使用 wrangler 预览部署wrangler preview
如果一切顺利,即可使用如下命令发布 Cloudflare Workerwrangler publish
没有报错的话,打开你的 Worker 地址看看成果吧
使用自定义域名访问Worker
进入想要自定义的域名后,点击功能栏中的 Workers
按钮,然后点击 添加路由
在 路由
一栏中添加你想要自定义的具体域名,选择本应用所在的 Worker,随后保存即可
例如 od.abc.xyz/*
,或需要根域名访问的话 abc.xyz/*
再次点击功能栏中的 DNS
按钮,然后点击 添加记录
- 类型:CNAME
- 名称:自定义前缀,根域名填
@
- 目标:Woker 的原地址
- TTL:自动
- 代理状态:已代理(必须开启代理)
完成后保存即可通过自定义域名访问 Worker 了
最后的话
这篇教程只是写了最基础的搭建过程,它的目的是确保你能成功搭建并使用最基础的功能。
更多功能与自定义可以参考 作者的原文档
超棒!
好
好文我收!