Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

概要(実装とは関係ないので、読み飛ばして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連携時の遅さが気になっていました。
需要は不明ですが、うまくいったので同じ問題に悩むシステム管理者に届けば良いなと思います。

参考サイト

neko51ex
文章苦手ですが、がんばります。
eyemovic-inc
私たちはWeb開発のパートナーとしてお客様のビジネスを立ち上げ、継続的な成長をお手伝いする受託開発会社です。
https://www.eyemovic.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away