Edited at

EC2で運用中のownCloudに、S3をgoofysでゴリ押し連携


概要(実装とは関係ないので、読み飛ばしてOK)

うちの会社では、他社とのファイルやり取りのため、ownCloudを運用しています。

EBSの容量もほどほどに、S3を外部ストレージとして設定したことで、ownCloudが「バックアップ不要の無限ストレージ」になったのだと勝手に思い込んでいました。

ある日、スタッフから 「ownCloudにアクセスできない」 と連絡を受けました。

原因はEBSの容量不足でした。

あれ、外部ストレージ設定も行っているのになぜ、、

どうやらowncloudではユーザー毎にS3バケットを用意して個別に外部ストレージ設定を行う必要があるようです。1

そんな面倒なことしてられない!ということで、今回はEC2にS3をマウントさせ、直接ファイル参照させるゴリ押しの方法で問題解決に挑みます。


構成イメージ


改修前


  • スタッフごとにアカウントを作成


  • AmazonS3ディレクトリにファイルをアップ


改修後


  • 社内で共通アカウントを作成

  • ルートディレクトリ直下にファイルをアップ


インストール作業


fuseのインストール

$ sudo yum install fuse


Goのインストール

Goのダウンロードページからダウンロードを行います。

Goは触ったことがないのでよく分かっていませんが、Featured downloads内のLinuxのURLで良さそうです。

// インストール

$ sudo wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz
$ sudo tar -C /usr/local -xzf /usr/local/src/go1.11.2.linux-amd64.tar.gz
$ sudo rm go1.11.2.linux-amd64.tar.gz

// パス設定
$ export GOROOT=/usr/local/go
$ export PATH=$PATH:$GOROOT/bin
$ env | grep -i go
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin:/usr/local/go/bin
GOROOT=/usr/local/go

// バージョン確認
$ go version
go version go1.11.2 linux/amd64


goofysのインストール

// インストール

$ export GOPATH=${HOME}/go
$ go get github.com/kahing/goofys
$ export PATH=${PATH}:${GOPATH}/bin

// バージョン
$ goofys --version
goofys version 0.19.0-use 'make build' to fill version hash correctly


マウント設定


AWSの設定

$ sudo aws configure

AWS Access Key ID [None]: [アクセスキーID]
AWS Secret Access Key [None]: [シークレットキー]
Default region name [None]: ap-northeast-1
Default output format [None]: json


ownCloudのユーザー作成

ownCloudより、共通アカウントとするユーザーを作成します。

ユーザーを作成することで、サーバー内にユーザーディレクトリが作成されます。


マウント作業

goofysの設定についてはこちらを参考にさせていただきました。

$ sudo su -

# cd /owncloud ←ownCloudがインストールされているディレクトリ
# cd data/user ←作成した共通アカウント

// アカウント内のファイルがあれば削除
# rm -Rf Documents
# rm -Rf ownCloud\ Manual.pdf
# rm -Rf Photos/

// マウント
# id owncloud ←ownCloudの動作ユーザー
uid=33(owncloud) gid=33(owncloud) groups=33(owncloud)
# goofys -o allow_other --uid 33 --gid 33 --cheap xxx-owncloud /owncloud/data/user/files

// チェック
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 969M 56K 969M 1% /dev
tmpfs 979M 0 979M 0% /dev/shm
/dev/a5yhQeLVw3 40G 19G 21G 47% /
xxx-owncloud 1.0P 0 1.0P 0% /owncloud/data/user ←1ペタバイトが見えた!


ファイルの読み込み

ownCloudでは、対象ディレクトリにファイルをコピペしただけでは利用できないようです。2

ファイルキャッシュを更新する必要があるため、下記コマンドを放ちます。

sudo -u apache /var/www/owncloud/occ file:scan [ユーザーアカウント]


あとがき

ownCloudはファイル共有もできとても便利ですが、サーバー容量問題やS3連携時の遅さが気になっていました。

需要は不明ですが、うまくいったので同じ問題に悩むシステム管理者に届けば良いなと思います。


参考サイト