skimemo


Laravel-20181225

_ zenkoでS3互換ファイルストレージを作成してLaravelから利用する

本当はMastodonのメディアストレージにする予定ですが、Laravelの流れでも書いてみます。

_ zenkoのインストール

dockerがあるのでdockerで入れます。
dockerが入っていない場合は以下(Centos7)

# yum install yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --disable docker-ce-edge
# yum makecache fast
# wget https://download.docker.com/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# yum install docker-ce

_ zenkoのインストールと設定

# docker run -v /var/s3/data:/usr/src/app/localData -v /var/s3/metadata:/usr/src/app/localMetadata -v /var/s3/config.json:/usr/src/app/config.json -p 8000:8000 -d --restart=always scality/s3server

ストレージされたデータがdocker内に入ってしまうと永続化できないので、/var/s3以下にディレクトリを用意してdataMetadataをマウントしています。
また、外部からアクセスする場合restEndpointの設定が必要です。*1

接続確認はこちら*2のページを参考に行いました。しかーし、Cyberduckをそのままインストールして起動しても、プロコトル「S3(HTTP)」がでてきません。以下のページでプロファイルをダウンロードすると、使えるようになるようです。

■Cyberduck Help / Howto / Amazon S3
https://trac.cyberduck.io/wiki/help/en/howto/s3

接続が確認できたら、いよいよLaravelからの接続です。
ドライバーはS3をそのまま使います。
StorageでS3を使う方法については過去の記事を参照してください。

■config/filesystems.php

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
    'disks' => [
         :
        's3' => [
            'driver' => 's3',
            'key' => env('AWS_KEY'),
            'secret' => env('AWS_SECRET'),
            'region' => env('AWS_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'endpoint'  => 'http://s3.example.jp:8000',
            'use_path_style_endpoint' => true,
        ], 

カギは9, 10行目です。
endpointを指定することで、サーバーを指定することができます。*3
しかしそのままだとbucketがドメインの前に付いてしまいます。(http://bucket.s3.example.jp:8000 みたいな感じ)
use_path_style_endpointtrueを指定してやると、これを防ぐことができます。
(endpointは実際は.envに書いた方が良いと思います)

まだStorage::disk()->putFile()とdelete()しか試していませんが、無事動作しているようです。(put/delete後Cyverduckで確認)


 
Last-modified: 2018-12-25 (火) 22:14:07 (121d)