我又在想辦法榨乾VPS小雞的性能了。之前寫過mStream 建構個人音樂雲,但是搬瓦工49.9美元CN2 GT套餐的硬盤只有20G,能放的歌曲數量有限。如果使用google-drive-ocamlfuse掛Google Drive雲盤,就能利用Google Drive做為音樂存儲空間,還能達到代理谷歌雲盤,免翻牆聽歌的效果。
google-drive-ocamlfuse 配置
以下操作全部需要在root環境執行
安裝
首先必須安裝google-drive-ocamlfuse(以下簡稱gdfuse),由於gfuse的docker image很久沒維護了而且使用麻煩,這次採用直接安裝。
1 | sudo add-apt-repository ppa:alessandro-strada/ppa |
申請 Google Drive API & 授權
到Google APIs & Services搜索啟用Google Drive API
,申請一個其他
類型的Oath2.0 Credential
,記下Client ID
和Client Secrets
。然後在VPS上執行以下指令
1 | google-drive-ocamlfuse -headless -label googledrive -id [client id] -secret [client secret] |
例子
1 | google-drive-ocamlfuse -headless -label googledrive -id 123456-yyyyyyy.apps.googleusercontent.com -secret yyyyyyzzzzz |
接著命令行會提示
1 | Please, open the following URL in a web browser: https://accounts.google.com/o/oauth2/auth?client_id=##yourClientID##.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&response_type=code&access_type=offline&approval_prompt=force |
用本機的瀏覽器打開網址,授權存取Google Drive。然後將得到的授權碼貼上到VPS命令行,按回車,出現Access token retrieved correctly
就是成功了。
建立掛載點 && 掛載
1 | mkdir ~/data/gdrive |
如果需要掛載不同的帳號,可以用label區別,不加label則gdfuse會使用預設值default
。
編輯 config
gfuse對於共享的檔案需要特別設定才會同步,因此需要修改config然後重新掛載。
1 | fusermount -u ~/data/gdrive |
music
部分換成你自己的label名,若沒有label,路徑就是~/.gfuse/default/config
。修改以下內容:
1 | read_only=true |
gfuse掛載的文件夾內容是和google drive同步的,若在vps上修改或新增檔案也會同步上傳到google drive。我只是要聽音樂沒必要上載,因此設置read_only避免vps動到google drive的檔案。修改後重新掛載回去
1 | google-drive-ocamlfuse -label music ~/data/gdrive -o allow_other |
設定開機自動掛載
在家目錄新增一個shell script, gdfuse.sh
, 內容如下
1 | #!/bin/bash |
加上權限
1 | chmod +x ~/gdfuse.sh |
然後在/etc/rc.local
加上~/gfuse.sh
即可
mStream配置
docker-compose.yml
1 | mstream: |
config/config.json
1 | "folders": { |
Dockerfile
1 | FROM linuxserver/mstream:latest |
路徑說明
gfuse預設是掛載整個google drive,而且自己上傳的檔案(擁用者是自已)與他人共用的檔案(擁有者是上傳者)是分開的。自己上傳的檔案會直接放在掛載目錄
,他人共用的檔案放在掛載目錄/.shared
。為了保持掛載內容的簡潔,我開了一個小號專門放音樂,然後把放主號的lossless
文件夾共享給小號,因此我的目錄就是/gdrive/.shared/lossless
,在mStream的網頁中會顯示成gdrive
。
成果
連上mStream,輸入帳號google
,密碼password
即可看到google drive己經掛載上去。等資料庫同步完就可以聽了。
幾個坑
- 共享的檔案和自己的檔案在不同的文件夾
前面說明過,擁有者是自己的檔案和擁有者非自己的檔案分別在兩個不同的目錄,這樣路徑很難管理,而且掛載目錄下還會有共享檔案的馬甲,如圖所示。
建議的解決方法是建一個小號,將需要的檔案由主號共享給小號,這樣只要存取.shared
就行了。 - Docker container存取掛載目錄提示
permission denied
掛載時要加上-o allow_other
,否則mStream會瘋狂崩潰。 - mStream瘋狂崩潰
docker的volumes需要以ro
方式binding。或者乾脆別用docker部署mstream,因為docker的權限管理和gdfuse不是很兼容,docker設計的時候並沒有考慮到和host交互的時的權限管理與同步。 - 重開機後,
gdrive
裡的內容消失
檢查開機自動掛載,或者手動再掛載一次。 - mStream數據庫有重複的項目
在Dockerfile執行rm -rf /config/db
,就會強制mStream在每次build時重建數據庫。 - 服務器流量消耗大
換個無限流量的服務器,或者設定mStream的編碼模式節省流量。 - 播wav時很卡
wav對網絡要求較高,建議用flac格式。 - CPU佔用飆高
我在Google Drive裡放了至少1000首歌吧,結果搬瓦工小雞在600多首的時候就卡了,還給我downclock讓我的VPS更卡。實測512MB/1vCPU的主機可以承受的歌曲數量是200-300首左右,超過這個數量就要換更高級的服務器。
結語
wav格式無損音樂檔案太大,超耗流量,沒有無限流量不要輕易嘗試。實際測試一陣子後發現還有掃描歌曲庫時CPU佔用飆高(然後就被BWH downclock,我的服務器就更卡了)、服務器重開後經常無法正確重新掛載google drive、或是重新掛載後的google drive權限和Docker產生各種愛恨情愁導致mStream抽風等問題,坑非常多,總的來說在配置低的機子上穩定性有待加強。
評論加載中