この記事はWanoグループアドベントカレンダーの1日目です。
というわけで、表題の通り、ちょっと前に無限ストレージが欲しくなってownCloudを導入してみました。
結果、空き時間にサクッと作るつもりが、それなりに時間かかってしまった。
でもこれできっと一人のクリスマスも寂しくないんだ。
なんというか、最終的にS3との連携でうまく動かない部分があって適当にごまかしたので、このやり方はあまりよくないかもしれません。
ちゃんとした方法を知っている方は教えてください。
というわけで以下顛末。
やったこと
- phpと関連モジュールのインストール
- redisを入れる
- ownCloudのインストール
- Nginxの設定
- Let's Encryptを入れる
- mysqlの設定
- S3の設定
1. phpと関連モジュールのインストール
ownCloudはphpで動いているのでphpと必要なモジュールをインストールしておく。
php-redisはownCloudのファイル情報をキャッシュする場合に入れる。
sudo apt-get install -y php7.0 php7.0-fpm php-redis
インストールが終わったら、/etc/php/7.0/fpm
以下のphp-fpm.configとか、pool.d/www.conf
とかを必要に応じて書いてphpの設定をする。
終わったらphpを再起動する。
2. redisを入れる
redisにファイル情報のキャッシュをすることでownCloudの表示を早くするらしい。
とりあえず最新のredisをインストール。
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
tar xzf redis-4.0.1.tar.gz
cd redis-4.0.1/utils
sudo ./install_server.sh
なんかapt-getとかでサクッと入れるもんじゃないのね。
なお最新バージョンのredisのリンクは以下。
https://redis.io/download
3. ownCloudのインストール
https://download.owncloud.org/download/repositories/stable/owncloud/
に各OS毎のインストール方法が書いてあるので、手順に従ってインストールする。
4. nginxの設定
これが地味にわからなかった。
一応下記の記事が参考になるかなと思ったのだが、
https://qiita.com/inductor/items/62b08813dc5cedf4ff34
肝心のnginxの設定のリンクが切れていてわからなかった。
とりあえず色々ググったりもしたんだけど、最終的に普通にownCloudの公式ドキュメントをちゃんと見てみたらあっさりみつかるっていうこの。
https://doc.owncloud.org/server/10.0/admin_manual/installation/nginx_configuration.html
このドキュメントを見ると、設定が2つあるんだけど、
ownCloud in the webroot of NGINX
っていうのが、ownCloudをwebrootに配置する場合の設定(例: https://drive.hoge.com)で、
ownCloud in a subdir of NGINX
っていうのが、サブディレクトリを切って配置する場合の設定(例: https://hoge.com/dirve)
適宜環境に応じて必要な箇所を書き換える。
基本的にはserver_name
とsslまわり、あとupstreamの設定を書き換えると良いと思われる。
後述するLet's Encryptを使ってSSL鍵を取得する場合は、Let's Encryptでつかうcertbotが自動でssl鍵の場所の指定とか書いてくれるので、ssl_certificate
とssl_certificate_key
の行を消しておく。
この設定ファイルを/etc/nginx/sites-enabled
あたりにでも設置して、nginxを再起動。
5. Let's Encryptを入れる
適当にドメインの設定をしてサーバーにアクセスできるようになったら、Let's Encryptでssl鍵の取得と設定をする。
みんな大好きcertbotで入れる。
https://certbot.eff.org/
上記URLにアクセスして、SoftwareとSystemを選んで表示される通りにやるとなんか入る。
ちなみにUbuntu x Nginxの組み合わせでやると、サクッと鍵が作られた上に、nginxの設定を書き換えて自動でssl_certificate
とssl_certificate_key
の設定をしてくれて、さらにはcronに鍵の自動更新の処理の設定まで追加してくれる。
なんやこれ、いつの間にこんな便利になったんや...。
sudo service restart php7.0-fpm
6. mysqlの設定
https://qiita.com/seijikohara/items/69c008425fe5dae8b124
ここにあるように適当なDBと適当なユーザーを作る。
動かす
https://pig-log.com/owncloud-centos-install/
ここの初期セットアップの項目にあるように、管理者アカウントとDBの設定をする。
設定からキャッシュの設定もできるのでやっておく。
ちなみに、この画像は左上のアイコンとか色とかちょっとカスタマイズした例。
カスタマイズ方法は後述。
7. S3の設定
なんと、実はここまでが前置きで、ここからが本題。(なげぇよ)
ownCloudでのS3との連携でよく使われるのは、ownCloudのExternal storage supportというアプリ。
↑これ。
こいつは、S3の権限を与えたユーザーをAWSのIAMで作って、そいつのAccessKeyIdとSecretAccessKeyの情報を追加すれば、S3をディレクトリのように扱ってくれるシロモノ。
めっちゃ便利!かと思いきや、実際に使って見るとわかるのだが、めちゃくそ重い。
これ、自分の環境だけですかね?
なんかキャッシュの設定とか色々やってもとにかく重くて、ファイル一覧を取得するのに数分かかるレベル。
自分の環境では全くもって使い物にならなかった。
で、どうしたか。
S3を直接ディレクトリにマウントすればいいじゃん(^q^)
というわけで登場、みんな大好きgoofys
https://github.com/kahing/goofys
はい。これがこの記事の全てです。
goofys -o allow_other --uid 33 --gid 33 --cheap hoge-s3 /var/www/owncloud/data/hoge/files
ownCloudのファイルは、/var/www/owncloud/data
以下にユーザー名毎に作られるので、必要なユーザーのfiles以下を適当なbucketでマウントする。
キモは、-o allow_otherオプションでlinux上の他ユーザーがファイルのアクセスをできるようにしておくのと、--uid/--gidでファイルの所有者と所有者のグループをidで指定することで、ownCloudが自由にファイルを扱うことができるようにするということ。
なので--uid/--gidで指定するユーザーは、ownCloudを動かしているlinuxユーザー。
自分の場合はwww-dataだった。
実はこの設定をした当初、しばらく使っているとたまーにファイルの書き込みが失敗して、なぜかそのタイミングでgoofysのマウントが外れて使えなくなるって問題があったんだけど、最近goofysがバージョンアップしてて最新のv0.0.18にしたらその問題は起きなくなった。
なので、これをやるときはgoofysのバージョンが0.018以上のものを使うと良い。
結果
ownCloudをS3連携するときは、goofysを使うと秒速で1億稼げそうなぐらい早くなる。
参考記事
- https://qiita.com/ukitiyan/items/481f380502a462a2af69
- https://qiita.com/shibukk/items/430c5fc90c2f93a8cea7
(Tips)ownCloudの見た目のカスタマイズ方法
ownCloudの見た目は、テーマを作ることでカスタマイズすることができる。
https://doc.owncloud.org/server/10.0/developer_manual/core/theming.html
https://thinkit.co.jp/article/9773
/var/www/owncloud/themes/
以下にテーマファイルを設置して、/var/www/owncloud/config/config.php
のconfigにテーマ名を記述することで変更することができる。
自分は趣味でバンドをやっていて、バンド間でのファイル共有として作ったので、バンドのロゴとか表示したりしてみた。
うれしい。