将 GCP 存储挂载为文件系统,并使用 php 访问

Phanix
·
·
IPFS
·

主要是使用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 权限

Original link: Phanix's Blog

CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!