TL;DR
- NextCloudのユーザデータを,AWS S3に保存する方法を解説します
- NextCloudのデータがクラウドストレージに格納されるようになるので(費用が掛かるデメリットを除けば),容量を気にせずに使用することができます
- (NextCloudの機能通り)ユーザごとに個別のディレクトリが使え,かつ,共有設定もできます
NextCloudがS3を利用する2つの方法
- NextCloudがS3を利用する方法として,以下の2つの方法があります
- NextCloudアプリを使用して,ユーザが共有されるディレクトリをS3上に作る方法
- データディレクトリをS3にまるまる置く方法
- この記事では,後者の方法を扱います
- 前者の(アプリを使う)方法は,NextCloudに設定された全ユーザが共有するディレクトリを作る方法で,ユーザごとに振り分けることができないようです(未調査です)
- Qiita nextcloudによるプライベートオンラインストレージの構築などが参考になります
- 後者の方法は,データディレクトリがS3に置かれるので,ホストのストレージ負荷を軽減できます(その分費用も掛かります)
- 前者の(アプリを使う)方法は,NextCloudに設定された全ユーザが共有するディレクトリを作る方法で,ユーザごとに振り分けることができないようです(未調査です)
NextCloudのユーザデータをS3に置く方法
- NextCloudの主ストレージ設定のドキュメントを参考に取り組みます
設定
- 以下の3つの手順で進めます
- IAMでS3にアクセスできるユーザを作成する
- S3にNextCloud用のバケットを作成する
- NextCloudに作成したバケット情報を設定する
IAMでS3アクセスユーザを作成する
aws IAMにアクセスし,ユーザを作成します.
- メニューから[ユーザ]を選び,[ユーザを追加]をクリックする
- 適当なユーザ名を入力し[プログラムによるアクセス]にチェックします
- アクセス許可の設定で[既存のポリシーを直接アタッチ]を選択し,[AmazonS3FullAccess]をチェックする
- 「成功」と言われたら,[アクセスキーID]および[シークレットアクセスキー]を記録しておく
S3のバケットを作成する
aws S3で,前項のユーザでアクセスできるNextCloud用のバケットを作成します.
- [バケットを作成する]をクリックします
- 適当なバケット名を入力します
- アクセス許可などはそのまま(「パブリックアクセスをすべてブロック」)でOKです
- 「バケットの作成」をクリックし,バケットを作成します
- バケットが作成されました.次節では,このバケットにデータを格納するようにNextCloudの設定を行います
NextCloudの設定
- NextCloudが稼働しているホストの,
config/config.php
のCONFIGアレイの中に,S3の設定を記載します.- NextCloudをDockerで稼働させている場合は,コンテナの
/var/www/html
にconfigディレクトリがあります
- NextCloudをDockerで稼働させている場合は,コンテナの
- 以下のように,
objectstore
キーで,前項までで作ったawsユーザおよびS3の情報を記載します-
'bucket'
: バケット名 -
'region'
: S3のリージョン('ap-northeast-1'など) -
'key'
: 20文字の大文字英数字のアクセスキー -
'secret'
: 40文字の英数字記号のシークレットキー
-
<?php
// config/config.php
$CONFIG = array (
//.....<snip>.....
'objectstore' => array(
'class' => 'OC\\Files\\ObjectStore\\S3',
'arguments' => array(
'bucket' => '<バケット名>',
'autocreate' => true,
'region' => '<S3のリージョン>',
'key' => '<20文字の大文字英数字のアクセスキー>',
'secret' => '<40文字の英数字記号のシークレットキー>',
'use_ssl' => false,
'use_path_style'=> false,
),
),
//.....<snip>.....
);
動作確認
- ブラウザでNextCloudにアクセス(ログイン)すると,ユーザディレクトリがS3になります
- S3のバケットには,
urn:oid:数字
のようなファイル名で,データが格納されます