5.GD-Utils百宝箱的安装和配置
上一节:
准备工作:
对rclone,autoRclone,gclone有一定的了解;
一颗蠢蠢欲动的心;
对lnmp建站环境配置比较熟悉会降低难度;
对tg机器人的配置有基础的话会降低学习难度。
什么样的人需要gd-utils?
- a.更快速高效地转存谷歌公共分享文件夹和团队盘的资源,拼时间赶在10TB/天公开下载额度用完前功成身退
- b.需要便捷的tg移动设备随时拷贝转存体验,移动的资源库,行走的绅士。
- c.大量的资源拷贝转移分享,远超750GB/24h的资源消耗量,希望几个小时就拷贝几百TB谷歌资源的疯狂松鼠党
AutoRclone是用python对rclone命令的一层封装(依赖rclone),gclone是基于rclone的魔改(核心就是rclone),而百宝箱则是直接调用的官方API,不依赖于rclone
百宝箱为什么更快?
相比autoRclone对sa的操作是循规蹈矩一板一眼的按顺序拷贝完就切换sa
gclone是在进程中自动切换sa,每次750G满额后无需再次请求api读取目录文件,大量文件拷贝速度会有提升
而百宝箱则是随机调用更多sa,每个sa同时直接读取google drive api的资源文件id记录
记录保存在本地数据库,统计完成后,所有操作都是基于本地数据库的操作,而不需要多次读取调用drive api
续传任务也会更加稳定准确
如果使用20线程,随机调用20个sa,每个sa每秒只调用一次请求,每秒都可以实现20次请求,而前些工具,都是单独一个sa的反复请求调用,请求频率过快就很容易触发单sa的api接口限制。
作为真正的多sa并发分派任务+本地数据库记录文件数据结构信息和拷贝进度信息,百宝箱基本上可以超脱谷歌api的限制,本地vps分配的线程数越多,效率越高,越不容易触发单sa的api请求限制。
当然,这也意味着大量文件结构读取的时候,你的vps内存和cpu得注意点了,虽然1gb内存上限设置,作者尝试是可以成功转存200w+文件的,但是为了以防万一,建议使用更多内存的vps或者本地pc并且使用如下参数设定node占用内存上限为1GB
node --max-old-space-size=1024 count folder-id -S
甚至你设置为4086,4GB更好
-----以上都是我瞎扯的。
目前版本此类高速多sa请求热门资源,均会遇到频繁的403 user rate limit限制,忙猜是可能大量的sa同时请求同一份文件,谷歌远程硬盘或者数据库并发瓶颈,高频率拒绝大部分的请求,导致会出现正常情况下满750GB额度才拒绝连接的403 错误
建议关注作者更新日志:
目前官方做法是增大连续403次数判定再加入剔除队列,治标不治本吧
2020.10.07更新:现在每个创建者名下的文件总限额2tb/24h,以下解决办法已经成为历史,围观下就好。
- a.怂一点的,个人觉得只能避其锋芒,要么早点拷完要么晚点去拷
- b.百宝箱作者说的两种选择:要么定时pm2 reload server要么改成false无视403错误(失去了自动切换sa的功能)
8.6日更新方法为添加如下参数于config.js文件里:
const RETRY_LIMIT = 7 // 如果某次请求失败,允许其重试的最大次数
module.exports = 内增加参数导出:EXCEED_LIMIT
- c.买gsuite管理全局,10万个sa账号正面刚,一轮过去拷贝完毕,只要sa足够多,cd结束,又可以再战了
- d.某些工具或许大佬部署更人性化的更新sa使用逻辑,被频繁403拒绝的sa先缓一缓,过些时候又调用看看情况
5.a. node环境和依赖安装
作者建议安装v12版本
Node.js v12.x
# As root //以root用户执行下面的指令
curl -sL https://rpm.nodesource.com/setup_12.x | bash -
来自 https://github.com/nodesource/distributions/blob/master/README.md#rpminstall
根据提示
sudo yum install -y nodejs
安装,另外提示可能需要 install gcc-c++ make
,这些我们之前安装python3环境包的时候已经安装过了,就略过
命令行执行 git clone https://github.com/iwestlin/gd-utils && cd gd-utils
克隆并切换到本项目文件夹下
执行 npm install --unsafe-perm=true --allow-root
安装依赖,部分依赖可能需要代理环境才能下载,所以需要上一步的配置
来自 https://github.com/iwestlin/gd-utils
如果报错信息里有 better-sqlite3,先执行 npm config set unsafe-perm=true
然后 rm -rf node_module
删掉依赖目录,最后再执行下 npm i
安装试试。
5.b. Service Account 配置
获取到 SA 的 json 文件并将其加入团队盘成员后,请将文件拷贝到gd-utils的 sa 目录下。
确认自己当前位于gd-utils安装目录下,直接复制过来:
cp -r ~/AutoRclone/accounts/* ./sa
如果你没有用sa,那么就需要 rclone config show
显示rclone配置文件,至少需要一个标准配置好的谷歌盘,包括以下三个内容:
client_id = 288003166466-fm0kn6q8ot3q3gv8lo6835hrblnt61gg.apps.googleusercontent.com
client_secret = Sj_Iwnll-PNlIdFbDDg4Js0r
token = {"access_token":"ya29.a0AfH6SMAkSeU5ZQC-RijWYapcLSkbIFqKpsP_34JL8iGQ74cisqOZFiC58KCyVYRJHZ_pp00Q3wlZe_ZnLNSV8W--BxsBrF1nW7C5s1uV0wc3O6tF8za1DxTYvmoApbwSUJRSrW9On-e2bt4rtCCf9STGvOiOnSOVLZk","token_type":"Bearer","refresh_token":"1//0etVjw5XIFKV8CgYIARAAGA4SNwF-L9IriOKssmP92NSZcizvxt_gHMyIufyFJ7bUEOpNZToc5JBYLGEd_NjkZy_Vgyeu9VuTOXA","expiry":"2020-06-30T19:50:41.7096896+08:00"}
将 client_id,client_secret,refresh_token
三者填入gd-utils下面 的config.js文件里完成配置,有了sa的话,这三者可以不填。同时还需要填写一个默认的目标盘ID,作为默认存储盘符
test:0AK-jeaa5dIZeUk9PVA
参数配置好以后,在命令行执行 node check.js,如果命令返回了你的个人谷歌硬盘根目录的数据,说明配置成功,可以开始使用本工具了。纯sa操作不需要执行此测试
而且记得执行命令的时候,记得命令最后带上 -S 参数告诉程序使用SA授权进行操作。
参考文章:
https://javascript.ctolib.com/iwestlin-gd-utils.html
一般就是用 ./count fileID
,./copy fileID
两个工具来操作,-h
查看相应的帮助
接下来我们需要获取telegraph 机器人的token
5.c. telegraph bot机器人配置
https://core.telegram.org/bots#6-botfather
和bot管理员聊天
https://web.telegram.org/#/im?p=@BotFather
使用/ newbot命令创建一个新的bot。BotFather会要求您提供名称和用户名,然后为您的新机器人生成授权令牌。
机器人的名称显示在联系方式和其他地方。
该用户名是一个简短的名字,提到和t.me链接使用。用户名长度为5-32个字符,并且不区分大小写,但只能包含拉丁字符,数字和下划线。您的机器人的用户名必须以“机器人”结尾,例如“ tetris_bot”或“ TetrisBot”。
该令牌是沿着线串110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw所需授权BOT和发送请求到机器人API。确保令牌安全并安全存储,任何人都可以使用它来控制您的机器人。
Done! Congratulations on your new bot. You will find it at t.me/moe_maid_loli_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.
Use this token to access the HTTP API:
1271588160:AAEi_sXwTNAIAKeiHQpGOQ5jU96A4k-jDNA
Keep your token secure and store it safely, it can be used by anyone to control your bot.
For a description of the Bot API, see this page: https://core.telegram.org/bots/api
来自 https://web.telegram.org/#/im?p=@BotFather
将bot 的api填入 config.js里tg_token栏
然后tg__whitelist填写你的tg用户名,即https://t.me/plumn这里的,不是你显示的昵称,而是@你的那个用户名,这样就仅允许你访问调遣这个bot
如果需要更多用户共享,以逗号隔开,添加第二个用户到新的单引号里
配置完毕后
直接执行 npm i pm2 -g
开启守护程序
安装好pm2之后,执行 pm2 start server.js --node-args="--max-old-space-size=1024"
,代码运行后会在服务器上监听23333端口。
检查防火墙状态:firewall-cmd --state
没安装的就 yum install firewalld
安装了没运行的建议 更新下 yum update firewalld
启动:systemctl start firewalld
firewall-cmd --list-all
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=23333/tcp
firewall-cmd --reload
firewall-cmd --list-all
systemctl enable firewalld
如果你启动程序后想看运行日志,执行 pm2 logs
查看 pm2 守护的进程列表,执行 pm2 l
停止运行中的进程,执行 pm2 stop
对应的进程名称namepm2 start
对应name启动进程
5.d.nginx的安装和网址的配置
centos7自带源没有nginx,我们添加下nginx官方源
touch /etc/yum.repos.d/nginx.repo
vi /etc/yum.repos.d/nginx.repo
加入以下内容
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
yum list |grep nginx
查询下配置源是否成功
然后安装 nginx执行:
yum -y install nginx
nginx启动并加入自启动:
systemctl start nginx
systemctl enable nginx
cat /etc/nginx/nginx.conf
里面是否包括下面这行,一般是有的,如果没有,则加上
include /etc/nginx/conf.d/*.conf;
然后在 /etc/nginx/conf.d/目录下,创建对应域名网站的配置文件,根据默认文件修改获得。
touch /etc/nginx/conf.d/omo.moe.conf
vi一下,创建如下反代配置:
server {
listen 443 ssl;
#ssl on;
server_name loli.omo.moe;
root /home/wwwroot/omo.moe;
access_log /var/log/nginx/omo.moe.access.log main;
ssl_certificate "/usr/local/cert/omo_moe.crt";#证书路径自己改
ssl_certificate_key "/usr/local/cert/omo_moe.key";#证书路径自己改
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:23333/;
}
}
证书路径自己可以定义,直接用 mkdir -p /usr/local/cert/
即可
证书申请,门路五花八门,自签证书也可以,Let's Encrypt 三个月免费证书,自己搞个自动crontab三个月续签一次也行,namecheap经常有免费1年证书活动,另外我的博客也有关于证书申请方法,这里就不多做演示,实在觉得证书烦的,可以考虑作者默认提供的cloudflare cdn方式,本地不使用ssl,仅用80端口,cloudflare那边代理proxy 你的这条域名解析,ssl设置为灵活,这样就可以保证tg bot能以https连接到cf,然后cf到你vps只用http即可,但是我觉得对小白来说,这样可能额外增加cloudflare的注册和熟悉学习成本,cdn的线路原理的理解困难,所以真的不想搞ssl的,建议去用免证书和nginx脚本是最好的,总之各位根据自己当前的状态,选择适合自己的方式,以后有空再一步步熟练,先用上了再说吧
好了,这里退出screen,我们直连使用 rz
上传证书到/usr/local/cert/
因为我在screen使用lrzsz发生了无法解决的bug:
特别注意:进入screen session后,同时按住(CTRL和A键)然后输入 :zmodem pass
然后再回车<ENTER>即可使用 rz/sz
如果你没注意直接在screen里面输入 rz/sz
卡死,请先 ctrl+a+d
退出当前窗口,退出访问:screen -D
然后 screen -X -S seesionID/screenname quit
即便如此,我好像还是会发生传到100%未完成的bug,懒得折腾了,建议找不到问题的话,还是直连使用lrzsz,别在screen里使用
证书上传完毕,记得
去域名服务商修改dns解析为对应vps的ip,一个A记录,到上面你的servername 二级域名,我这里是loli二级域名,到你的vps ip
记得防火墙放行http,https服务/80和443端口nginx -t
检查下配置文件语法是否通过,nginx -s reload
重启nginx服务
检查网站是否部署成功,可以命令行执行(请将YOUR_WEBSITE_URL替换成你的网址)
curl 'YOUR_WEBSITE_URL/api/gdurl/count?fid=124pjM5LggSuwI1n40bcD5tQ13wS0M6wg'
fid任意文件名都行
这里对应的是:
curl 'https://loli.omo.moe/api/gdurl/count?fid=124pjM5LggSuwI1n40bcD5tQ13wS0M6wg'
curl 'https://loli.omo.moe/api/gdurl/count?fid=1brdm59br_xdO4mytRPWyKutrCdmrl6Rd'
如果你用的http 80端口搭载cf的ssl证书,那么此处网址不需要用https,用http协议即可。
如果返回了gd-utils 成功启动的消息,说明部署成功了。
如果502 bad way,尝试关闭selinux:setenforce 0
nginx -s reload
后可用,则可以 sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
永久关闭
最后,在命令行执行(请将YOUR_WEBSITE和YOUR_BOT_TOKEN分别替换成你自己的网址和bot token)
curl -F "url=YOUR_WEBSITE/api/gdurl/tgbot" 'https://api.telegram.org/botYOUR_BOT_TOKEN/setWebhook'
curl -F "url=loli.omo.moe/api/gdurl/tgbot" 'https://api.telegram.org/bot1271588160:AAEi_sXwTNAIAKeiHQpGOQ5jU96A4k-jDNA/setWebhook'
这样,就将你的服务器连接上你的 telegram bot 了,试着给bot发送个 /help
,如果它回复给你使用说明,那就配置成功了。
如果要取消bot的webhook,输入:
curl https://api.telegram.org/bot1271588160:AAEi_sXwTNAIAKeiHQpGOQ5jU96A4k-jDNA/deleteWebhook
即可。
随着把玩的不断深入,你可能会需要bookmark书签功能,指令如下:
/bm set bookmarkname folderID/DriveID
示例:
/bm set test盘 0AK-jeaadlZeUk9PVA
这样下次使用/copy 目标盘id就可以写成这个书签名字了,适合手握N个团队盘,随心所欲快速将不同类型的资源转存到不同的仓库里,分类管理更方便
确认你当前server配置满意后,pm2 l
列出正常运行,那么就可以保存并加入pm2开机自启动守护了:pm2 save
保存当前server配置pm2 startup
加入自启动
这样重启vps后,一切都会继续运转,当然,中断的任务还是需要你手动输入 /task
续命的
如果拷贝的时候意外提示没有可用的SA,可以尝试使用 pm2 reload server
重启对应server名,当然,你确实用完了每24小时的额度,就考虑增加sa或者等作者更新吧,对了更新方式:
进入gd-utils目录下 git pull
即可然后 pm2 reload server
5.e.使用IBM免费容器搭建gd百宝箱
这个脚本可以让你方便的通过免费的IBM容器安装自动运行gd百宝箱,挺低成本的一个解决方案,感兴趣的可以看看:https://github.com/artxia/IBM-gd-utils
总算是把gd-utils搞完了。东西都不难安装使用,就是大佬们的文档写的太晦涩残缺,简直像金庸小说里的残本秘籍,差点修炼的走火入魔,实在不想再做什么更新完善了,能帮大家解决80%问题,这个系列的教程目的也算是达到了
下一节:
上一节: