更新记录

更新记录

20210906

Google Drive网盘挂载

前言

GoIndex是一款部署在Cloudflare WorkersGoogle Drive目录索引程序,本篇介绍如何借助GoIndex+Cloudflare挂载Google Driver

步骤说明

1
2
3
1.注册google、cloudflare账号,构建要分享的网盘空间
2.选择goindex主题,随后依据官网提示录入信息获取到部署代码
3.在cloudflare worker进行部署

参考步骤

1.注册google、cloudflare账号

google:Google Driver(登录验证google权限,可获取一定免费额度)

cloudflare:cloudflare

2.goindex

可在github上选择goindex的主题,可参考goindex,其中提供了几种不用的方式构建

此处选择goindex-theme-acrou作为参考,如有网站打不开的情况可直接去对应github下查看其他策略

点击GoIndex Code Builder填充信息并获取部署的代码

​ PS:此处DriverID相对应文件夹,例如https://drive.google.com/drive/folders/xxx,可通过构建多个文件夹自定对要展示的内容进行分类,网站部署后默认以第一条记录作为初始化展示,可通过切换"不同的盘"(即不同的文件夹)进而进行权限、分类等管理

3.部署

登录cloudflare:进入Workers工作台,根据官网提示完成子域设定、付费计划确认、邮箱验证操作

子域设定:https://my-worker.**[子域名]**.workers.dev

随后创建服务->输入名称,选择任意模板(后续需自行编辑重新填充上述获取的代码信息)。创建完成,可选择进入指定服务,管理相关的资源信息(替换代码并保存部署即可)

上述操作执行完成,则验证部署是否成功,直接访问路由即可

扩展

​ 完成上述步骤后基本就完成了Google Driver挂载的基础流程,但这种快速部署的操作在高峰期可能会有相应的访问限制,因此可以构建基于自己的api部署,其构建思路说明如下所示

<1>获取GDriver客户端需要借助Google Drive API,启用API后选择创建项目

<2>随后创建一个OAuth客户端 ID,构建完成获取相应的client_id、client_secret

<3>使用rclone获取refresh_token

​ 点击rclone官网,下载需要的版本,随后解压项目并配置

​ cmd进入解压的目录,执行指令rclone config,第一次构建按照提示输入n创建新的规则,随后填充信息

  • name:名称(任意,可填项目名称)
  • Storage:指定类型(找到对应Google Driver的编号信息,输入编号即可)
  • client_id:在google cloud console创建应用生成client_id(也就是前面的步骤生成的客户端ID)
  • client_secret:(前面的步骤生成的客户端secret)
  • scope:确认完成,随后可选择访问的权限(此处授予所有文件的访问权限(一般是1),如需控制则自行相应调整权限等级即可)
  • root_folder_id:(直接回车跳过)

  • service_account_file:(直接回车跳过)

  • 随后提问Edit advanced config?选择n即可;最后确认是否完成配置,选择Y后会自动弹出权限校验页面链接验证应用

可能存在的问题

  • 链接跳转验证出现Error 400: redirect_uri_mismatch

​ 参考提示,修改客户端的配置信息,调整授权的重定向URI(需要一段时间生效,官方预计5min左右),但发现还是无法正常响应

​ 于是我在rclone官网中看到解决思路

​ 参考上述解决思路我重新生成了凭据信息,再次重新配置相关的client_id、client_secret随后可正常响应,选择对应的用户授予权限

  • 如果用户授权出现Error 403: access_denied

​ 则说明该应用没有添加测试用户,需要相应添加测试用户

​ 会提示应用未经验证,正常确认即可,校验成功则显示如下内容

​ 如果got code失败,则是代理问题,需要设置代理(部分可能需要配置代理环境变量、重启系统后生效)

1
2
set http_proxy=127.0.0.1:端口号
set https_proxy=127.0.0.1:端口号

<4>调整代码,重新部署项目

​ 如后续需要调整目录结构可参考前面的步骤生成数据,也可直接调整代码中的相关参数配置重新填充信息

1
2
3
4
5
var authConfig = {
client_id: "",
client_secret: "",
refresh_token: "", // 授权 token
}