學習工作 工作 程式

Mount GCP storage as filesystem, and access with php

紀錄一下… 主要是使用 gcsfuse 這個工具,還有就是使用 Google\Cloud\Storage\StorageClient 這個套件

mount as filesystem

Google cloud plateform 提供了 gcsfuse 這個工具可以 mount bucket storage 到檔案系統中,方法如下;

$ export GCSFUSE_REPO=gcsfuse-`lsb_release -c -s`
$ echo "deb http://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list
$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install gcsfuse
$ sudo mkdir /photovideo
$ sudo gcsfuse photovideo /photovideo/
$ sudo ls -al /photovideo-ulsee

要unmount 也很簡單

$ fusermount -u /home/shared/local_folder/

access with php

要透過 php 存取的話,需要使用 google api,可以在這邊找到,透過composer就可以安裝完成。
比較繁瑣的是在 access authentication 部分,雖然在機器上安裝 cloud sdk 後,便可如同 alibabacloud oss 一樣,mount 上去之後就可以當成跟一般檔案存取一樣直接讀寫。但是 Google 並不建議這樣使用,主要是怕被破台後整個storage被看光光,所以建議透過api來進行(可以參考Authentication Guide)。

遵照 Authentication Guide 產生 json 格式的 key 之後存檔,比方說存在呼叫 php 檔的上層路徑,為 ../service_api_key.json ,然後就可以引用 google cloud storage library,透過這個 keyfile 存取儲存空間了。

<?php
require '../vendor/autoload.php';

use Google\Cloud\Storage\StorageClient;
use Google\Cloud\Core\ServiceBuilder;
....
....
class UploadsController extends ControllerBase
{
    public function test()
    {
//....
//....
        $storage = new StorageClient([
            'keyFilePath' => '../service_api_key.json'
        ]);
        $storage->registerStreamWrapper();


        $files[0]->moveTo($this->storageconfig->tmp . $upload->upload1);

        exec("sudo mv " . $this->storageconfig->tmp . $upload->upload1 . " " . $this->storageconfig->upload . $upload->upload1);

//....
//....

        // read file
        $target_file_gs = "gs://gcp-test-storage/source/". $upload->upload1;
        readfile($target_file_gs);
    }
}

主要透過 new StorageClient 並給予 key file,然後呼叫 registerStreamWrapper() 取得存取權限。比較奇妙的是,當作檔案上傳時,必須先存到 local file 後再搬到 gcp storage 去,所以同時也要記得打開 www server 的 sudo mv 權限

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料