參見項目地址,此筆記是基於原教程的補充。

最近在 Telegram 上關注了一些 Google Drive 資源分享群組,白嫖固然很香,但是 Google Drive 並不支持諸如一些國內網盤的一鍵轉存的功能,而且轉存大量資源也會受到大小的限制,而 Google Drive 百寶箱正好能夠完美滿足我對大量 Google Drive 資源的轉存需求。另外,它還支持使用 Telegram Bot 進行操作,非常方便。

安裝並配置寶塔面板和 Web

在下使用的是 CentOS 系統,在ssh中輸入以下命令安裝。

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

安裝好寶塔面板後,根據提示安裝 web 環境,推薦 LNMP。然後在寶塔面板軟體管理中安裝PM2管理器。

最後,在寶塔面板里新建一個網站,並填寫上解析好的域名。

在站點設置中申請好 Let's Encrypt 的 SSL證書。

安裝 Google Drive 百寶箱服務和依賴

在ssh中輸入命令克隆項目到本地。

git clone https://github.com/iwestlin/gd-utils && cd gd-utils

再安裝依賴。

npm i

配置 Service Account

這裡要用到 AutoRclone 來利用 Service Accounts 來替代普通 Google 賬號進行拷貝/上傳。

安裝 python 依賴及 Rclone 主程序

在ssh終端輸入以下命令:

yum update
yum install python3-pip git screen -y
curl https://rclone.org/install.sh | sudo bash
sudo git clone https://github.com/xyou365/AutoRclone && cd AutoRclone && sudo pip3 install -r requirements.txt

生成 Service Account

首先,開啟 Drive API 並在寶塔文件管理里將 credentials.json 上傳到伺服器的 root/gd-utils/AutoRclone 目錄當中。

切換到 AutoRclone 目錄。

cd /root/gd-utils/AutoRclone/

如果你之前沒創建過項目,則直接在ssh中輸入命令:

python3 gen_sa_accounts.py --quick-setup 1
  • 創建1個項目
  • 開啟相關的服務
  • 創建100個 service accounts
  • 將100個 service accounts 的授權文件下載到 accounts 文件夾下面

100個SA = 750GB*100 = 75T,一天就能轉存 75T 的資源。

如果你已經有N個項目,現需要創建新的項目並在新的項目中創建service accounts,則在ssh中輸入命令:

python3 gen_sa_accounts.py --quick-setup 2 --new-only
  • 額外創建2個項目(項目 N+1 到項目 N+2)
  • 開啟相關的服務
  • 創建200個 service accounts(2個項目,每個項目100個)
  • 將200個 service accounts 的授權文件下載到 accounts 文件夾下面

如果你想用已有的項目來創建service accounts(不創建新的項目),則在ssh中輸入命令:

python3 gen_sa_accounts.py --quick-setup -1

注意這會覆蓋掉已有的service accounts

接著打開給出的鏈接授權。

授權並複製 code 到ssh終端。

第一次會遇到 Service Usage API 服務未開啟的情況,這時ssh會給出網址,打開並啟用 Service Usage API 即可。

順利完成後,AutoRclone 文件下面的 accounts 文件夾下會有很多的 json 文件。

將 Service Accounts 加入共享雲端硬碟(選做)

為了更好地管理創建的SA,可以選擇將它們加入 Google Groups,以此將 Google Groups 加入谷歌團隊盤中,實現將資源轉存入谷歌團隊盤。

首先,在 Google APIs 中找到項目及SA。

看到「憑據」處,點擊進入找到每個SA賬號所對應的郵箱地址。

創建一個 Google Group ,將 service accounts 對應的郵箱地址挨個添加進去,每次只能添加 10 個,以英文逗號 "," 作為兩個郵箱之間的間隔,每 24 小時只能添加 100 個,並記住此 Group 的郵箱地址。

最後,前往谷歌共享雲端硬碟,在「管理成員」的選項中通過輸入郵箱地址的方式添加好剛剛建立的 Google Group。

複製 Service Accounts

在ssh終端執行以下命令:

cd /root/gd-utils/AutoRclone/accounts/
cp -r ./* /root/gd-utils/sa

接著回到sa目錄,檢查SA是否被成功複製。

cd /root/gd-utils/sa
ls

若返回了SA的json文件的列表,則表示SA被成功複製了。

配置個人帳號

獲取 client_idclient_secret

首先,要啟用 Google Drive API

然後創建 OAuth client ID,首次創建會要求配置同意屏幕,填寫應用名稱後直接保存即可,應用類型選擇其他

接著就可以看到客戶端ID client_id 和客戶端密鑰 client_secret,複製並保存好。

獲取 refresh_token

在ssh輸入以下命令執行rclone的賬號配置:

cd /root/gd-utils
rclone config

根據提示綁定 Google Drive。

$ rclone config
...
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> n  # 輸入 n ,新建
name> # 輸入名字
···
Storage> # 在這裡輸入 Google Drive 對應的序號
···
Google Application Client Id
Setting your own is recommended.
See https://rclone.org/drive/#making-your-own-client-id for how to create your own.
If you leave this blank, it will use an internal key which is low performance.
Enter a string value. Press Enter for the default ("").
client_id> # 輸入 client_id
Google Application Client Secret
Setting your own is recommended.
Enter a string value. Press Enter for the default ("").
client_secret> # 輸入 client_secret
Scope that rclone should use when requesting access from drive.
Choose a number from below, or type in your own value
 1 / Full access all files, excluding Application Data Folder.
   \ "drive"
 2 / Read-only access to file metadata and file contents.
   \ "drive.readonly"
   / Access to files created by rclone only.
 3 | These are visible in the drive website.
   | File authorization is revoked when the user deauthorizes the app.
   \ "drive.file"
   / Allows read and write access to the Application Data folder.
 4 | This is not visible in the drive website.
   \ "drive.appfolder"
   / Allows read-only access to file metadata but
 5 | does not allow any access to read or download file content.
   \ "drive.metadata.readonly"
scope> 1 # 完整許可權訪問
ID of the root folder
Leave blank normally.

Fill in to access "Computers" folders (see docs), or for rclone to use
a non root folder as its starting point.

Note that if this is blank, the first time rclone runs it will fill it
in with the ID of the root folder.

Enter a string value. Press Enter for the default ("").
root_folder_id> # 留空
Service Account Credentials JSON file path
Leave blank normally.
Needed only if you want use SA instead of interactive login.
Enter a string value. Press Enter for the default ("").
service_account_file> # 留空
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n
Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> n # 輸入 n
If your browser does not open automatically go to the following link:https://accounts.google.com/o/oauth2/XXXXXXX
Log in and authorize rclone for access # 複製上面的鏈接到瀏覽器中打開進行授權。
Enter verification code> # 輸入網頁上顯示的驗證碼
Configure this as a team drive?
y) Yes
n) No
y/n> y # 如果是團隊盤輸入 y ,需要在接下來進行選擇具體的團隊盤,否則輸入 n
···
--------------------
[name]
type = drive
client_id = client_id
client_secret = client_secret
scope = drive
token = {"access_token":"XXXXX","token_type":"Bearer","refresh_token":"refresh_token","expiry":"expiry"} # 保存其中的 refresh_token
team_drive = team_drive
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y # 輸入 y 確認
···
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q # 輸入 q 退出

接著,在ssh執行以下命令:

cat /root/.config/rclone/rclone.conf 

此時應該可以看到 client_idclient_secretrefresh_token 這三個變數,隨後在寶塔文件管理里找到伺服器中/root/gd-utils/config.js這個文件,使用編輯把這三個變數分別對應填入其中,需要注意的是這三個值必須被成對的英文引號包裹,且引號後以英文逗號結尾。

如果 rclone.conf 里沒有 client_idclient_secret,說明配置 rclone 的時候默認用了 rclone 自己的 client_id,連 rclone 官方都不建議這樣做,因為大家共享了它的介面調用限額,在使用高峰期可能會觸發限制。

最後在ssh中輸入命令:

node check.js

如果返回了谷歌硬碟(注意,非團隊盤)根目錄的數據,則說明配置成功。

配置 Telegram Bot 及站點

首先在 Telegram BotFather 那裡根據指示創建一個新機器人並拿到該 bot 的 token,然後再將之填入 config.js 中的 tg_token 變數當中,接著在 tg_whitelist 變數當中根據提示填入自己的Telegram用戶名。

回到寶塔面板,在安全選項中添加23333埠放行。

然後在PM2管理器中添加以下項目自動運行。

此時,回到安全選項,可以看到23333埠正在使用中。

接著,在網站配置里添加反向代理,目標 URL 填 http://127.0.0.1:23333,站點就配置完成。

繼續回到ssh終端輸入以下命令(將 YOUR_WEBSITE_URL 替換成自己的網址):

curl 'YOUR_WEBSITE_URL/api/gdurl/count?fid=124pjM5LggSuwI1n40bcD5tQ13wS0M6wg'

如果返回了gd-utils 成功啟動的信息,便說明部署成功了。

最後,在ssh終端輸入以下命令(將 YOUR_WEBSITEYOUR_BOT_TOKEN 分別替換成自己的網址和 bot token):

curl -F "url=YOUR_WEBSITE/api/gdurl/tgbot" 'https://api.telegram.org/botYOUR_BOT_TOKEN/setWebhook'

如此一來,便將伺服器連接上了 Telegram bot,這時,給bot發送 /help ,如果它回復了使用說明,便說明 bot 配置成功了。

備註

無效 SA 清理

如果在使用途中遇到了以下幾種問題,說明 sa 目錄下混雜了沒有許可權的 json 文件。

  • 任務異常中斷
  • 命令行日誌無限循環輸出但進度不變
  • 複製完發現丟文件或文件夾沒有正確地被創建

這些情況會發生在SA沒有對應目錄的閱讀許可權的時候。 當進行 server side copy 時,需要向 Google 的伺服器提交要複製的文件ID和複製的位置,也就是新創建的目錄ID,由於在請求時是隨機選取的SA,所以當選中沒有許可權的SA時,這次拷貝請求沒有對應目錄的許可權,就會發生以上錯誤。

以下是解決辦法:

cd /root/gd-utils
git pull
./validate-sa.js -h  # 查看使用說明
./validate-sa.js 目錄ID # 此目錄ID是任意一個你的sa擁有閱讀許可權的目錄ID,例如在 rclone 綁定的谷歌團隊盤的ID

程序會讀取sa目錄下所有json文件,依次檢查它們是否擁有對 你的目錄ID 的閱讀許可權,如果最後發現了無效的SA,程序會提供選項允許用戶將無效的 sa json 移動到特定目錄。

重啟 PM2 進程

所有改動後,必須重啟PM2進程。

pm2 reload server

參考資料


封面來源:幻想郷の夏遊び | syuri22 #pixiv https://www.pixiv.net/artworks/84241955