これまではMattermostサーバのローカルファイルシステムに画像やら絵文字やらを保存して運用していました。
ローカル容量のひっ迫が気になるのと、OCIの無償枠でオブジェクト・ストレージが20GB使えるのでせっかくなので有効活用したい(せこい)と思って、MattermostのファイルストレージにOCI Object Storageを利用してみました。
OCI側の準備
まずはOCIにオブジェクト・ストレージを作成します。
今回はMattermostもOCI上で構築しているため、プライベートで作成します。
オブジェクト・ストレージの作成
コンソールからオブジェクト・ストレージのバケットを作成します。
- バケット名はメモしておいてください。
- バケット作成方法:https://docs.oracle.com/ja-jp/iaas/Content/Object/Tasks/managingbuckets_topic-To_create_a_bucket.htm

パブリックで作成されるので、作成後のバケットの詳細画面から可視性をプライベートに変更。

S3互換APIのアクセス設定とエンドポイント取得
テナンシ詳細画面の「オブジェクト・ストレージ設定の編集」で先ほど作ったバケットのコンパートメントを指定します。
- ここでオブジェクト・ストレージ・ネームスペースの値をメモしておきます。

ユーザーのプロファイル画面から「顧客秘密キー」を作成します。
生成されたキーはここでしか表示できないので、確実にコピーしてメモしておいてください。
- 秘密キー作成後に表示される対応するアクセス・キーの値もメモしておいてください。

Mattermost用のS3互換エンドポイントは以下になります。メモした値と置き換えてください。
<オブジェクト・ストレージ・ネームスペース>.compat.objectstorage.<リージョン識別子>.oraclecloud.com
- S3互換エンドポイントの前提条件など:https://docs.oracle.com/ja-jp/iaas/Content/Object/Tasks/s3compatibleapi.htm#usingAPI
- リージョン識別子はこちらで確認してください(ap-tokyo-1とかのやつ):https://docs.oracle.com/ja-jp/iaas/Content/General/Concepts/regions.htm#About
ネットワーク設定
Mattermostサーバがオブジェクト・ストレージ・バケットと通信できるようにします。
- サービス・ゲートウェイをVCNに作成します。
- Mattermostサーバのサブネットのルートテーブルに、オブジェクト・ストレージへの通信またはOSNへの通信のターゲットをサービス・ゲートウェイに指定するルールを追加します。
- デフォルトのセキュリティリストでエグレスは全部許可されているためセキュリティ・ルールの新規作成は不要と思います。
これでOCI側の準備完了です。
Mattermost側でファイルストレージにオブジェクト・ストレージを指定する
ここはMattermostの設定画面でエンドポイントやらシークレットキーなどを入力していくだけなので簡単です。
システムコンソール>環境>ファイルストレージ
以下のように指定してください。
- ファイルストレージシステム: Amazon S3
- ローカルストレージディレクトリー: –
- 今回はオブジェクト・ストレージにしたので勝手にグレーアウトされます
- 最大ファイルサイズ: 100
- 内容によるドキュメント検索を有効にする: 有効
- ZIPファイル内の文書の内容を検索可能にする: 無効
- Amazon S3バケット名: <作成したバケット名>
- Amazon S3 Pathプリフィックス: –
- Amazon S3 Pathプリフィックス: –
- Amazon S3アクセスキーID: <メモした顧客秘密キーのアクセス・キーの値>
- Amazon S3 エンドポイント: <メモしたS3互換エンドポイント>
- Amazon S3シークレットアクセスキー: <メモした顧客秘密キー>
- Amazon S3への安全な接続を有効にする: 有効
- Amazon S3のデバッグを有効にする: 無効
接続テストをして成功したらOK。
おわりに
MattermostはS3が使えるので、S3互換エンドポイントが公開されているOCIのオブジェクト・ストレージも同じように使うことができました。
ちなみにバケットの階層構造はこんな感じになっています。ローカルのファイルストレージを利用していたときと全く一緒です。サムネイルとかも毎回作られてるんですね。

まだ終われない。実は問題がひとつあります。
このままだと新規ファイルについてはオブジェクト・ストレージに保存されてMattermostから参照できるのですが、これまでローカルに保存していた過去ファイルについては参照できなくなります。

この画像のように、リンク切れのような状態になります。
自動でオブジェクト・ストレージに同期はしてくれないようですね。
なのでローカル->オブジェクト・ストレージへのファイル移行作業が必要になってきます。
ただし、ディレクトリ構造は上記のように全く同じなので、基本的にはファイル名や構造を変えずにそのままファイル群をバケットに持っていけば参照できるようになります。
次回は移行作業について手順を整理した記事を書く予定です。では!
コメント
s3互換なのおもしろいでありんす
歌舞伎町から!?