写在前面
部署本项目需要有一定的linux基础,以及对onedrive api以及refresh_token有一定了解,需要耐心!当然你也可以选择更为简单的OneManager

开始前准备 GitHub

一台linux机器,一个cloudflare账号以及onedrive账号

获取client_id和client_secret(本文不详述)

获取refresh_token(采用rclone获取,当然你也可以使用这个小工具或者这个

安装rclone并配置具体配置方式不详述
编辑/root/.config/rclone/rclone.conf文件

##找到类似下面文件
[xxxx]
type = onedrive
client_id = 31370e70-7-4e9f-b342-4672c547a588
client_secret = JVlM~0qPxvBAy6U26-J_QMI0x6S~p
region = global
token = {"access_token":"","token_type":"Bearer","refresh_token":"0.ASoAQU0A_On4akKn9Re3bNLvj3AONzEGd59Os0JGcsVHpYgqANU.AgABAAAAAAD","expiry":"2021-06-07T16:57:32.717928215+09:00"}
drive_id = b!uPvWl8_q_4Hv7BtuTipIveZuSGHl4jrMFkZAIkL6QZhjzmmSt3KT
drive_type = business
##其中【"refresh_token":】后,【,"expiry":】前为token,例如示例中token为0.ASoAQU0A_On4akKn9Re3bNLvj3AONzEGd59Os0JGcsVHpYgqANU.AgABAAAAAAD

配置CloudFlare

登录CloudFlare,进入任意一域名下,右侧栏(往下翻)会有ID(zone_id和account_id),复制:
cloudflare-id
创建worker并记录下名称(下面要用),保存并部署。
worker

本地wrangler部署

安装依赖Node.js、npm

# Using Debian, as root
curl -fsSL https://deb.nodesource.com/setup_15.x | bash -
apt-get install -y nodejs

# Using Centos
# As root
curl -fsSL https://rpm.nodesource.com/setup_15.x | bash -

安装完成后可用npm -i来检查是否安装成功,出现下图即为正常。
npm

拉取项目开始安装

cd
git clone https://github.com/spencerwooo/onedrive-cf-index.git
cd onedrive-cf-index
npm i @cloudflare/wrangler -g
npm install
# 使用 wrangler 登录 CloudFlare 账户
wrangler login  ##根据提示输入y,复制链接授权
# 使用这一命令检查自己的登录状态
wrangler whoami

登录
授权
检查状态

修改项目目录下的wrangler.toml

wrangler.toml

  • name:worker 的名字
  • account_id:账户 id
  • zone_id:区域 id

创建 KV bucket并找到id,回到wrangler.toml,在kv_namespaces: 下填入id和preview id。

# 创建 KV bucket
wrangler kv:namespace create "BUCKET"
# 创建包括预览功能的 KV bucket
wrangler kv:namespace create "BUCKET" --preview

id

kv_namespaces = [
    { binding = "BUCKET", preview_id = "", id = "" }`
]
  • preview_id = ""
  • id = ""

修改src/config/default.js

  • client_id:第一步申请的id
  • base:你想要展示的网盘文件夹默认为/pubic,整个网盘填/

在KV中输入refresh_token

输入refresh_token

在./src/auth/onedrive.js里面加一个获取 refresh_token 的代码:

// ./src/auth/onedrive.js

// ...
export async function getAccessToken() {
  const timestamp = () => {
    return Math.floor(Date.now() / 1000)
  }

  const refresh_token = await BUCKET.get('refresh_token')  ##添加这一行!!

  // 之后所有的 config.refresh_token 都直接改为 refresh_token
  // ...
}

把其他原有定义了 REFRESH_TOKEN 的地方删掉(./src/config/default.js里的 refresh_token: REFRESH_TOKEN这一行)

添加client_secret

wrangler secret put CLIENT_SECRET

根据提示输入第一步申请的SECRET

正式部署

wrangler publish

enjoy!访问刚刚在 cf 添加的二级域名即可。

修改样式(可选)

src/render/htmlWrapper.js : 修改标题
src/folderView.js : 修改介绍

最后修改:2024 年 03 月 31 日
如果觉得我的文章对你有用,请随意赞赏