CentOS 7でNextCloud立ててみたおはなし

あすかです。

私は趣味で漫画描いてるんですが、パソコンが壊れたときに備えて、それらの漫画をどっかにバックアップしておきたくなってきます。
でも、漫画の中にはいかがわしい内容も含まれていまして、DropboxやOneDriveの規約に引っかかってある日突然アカウント削除されないか心配だったので、Dropboxと同じことができるOSSどっかにねーかなと思っていたら、ありました。なぜかありました。奇跡です。てかなぜ作った。発想がすげえよ。

というわけで、AWSCentOS 7上で構築してみたので、備忘録として。

AWSでも一部(児童ポルノや米国でタブーの獣姦はもちろん、相互同意がない性交など。二次ソース(公式日本語訳)も参照)のアダルトコンテンツは規約で禁止されてるのでグレーゾーンらしい。今のところギリギリかな。もっと安全なところ探しちうだけど値段が

NextCloudの特長

NextCloudは、誰でもDropboxみたいなオンラインストレージサービスを自分のサーバ上に構築できるという、キチガイ素晴らしいOSSです。

  • 利用料なし。サーバ代金だけ(もっともこれがDropboxより高価だったりする)
  • 利用規約なし。とにかく自由
  • 容量無制限、物理的なディスク容量だけ(もちろんユーザごとに容量決めることも可能)
  • ファイルのバックアップ・バージョン管理が無制限でできる(キチガイ容量の関係で今回は無効化しました)
  • NextCloud専用アプリが簡単に導入できる
  • WindowsMacスマホ向けクライアントアプリがあって簡単に同期できる。ていうか特定のローカルフォルダと特定のクラウドフォルダを結びつけることもでき、DropboxやOneDriveのようにクラウドに送るファイルを特別なフォルダにまとめないでおくこともできる

デメリット

  • 利用規約はないが、サーバ借りてる時はそっちの規約に従う必要がある
  • 気がついたら容量MAX、AWSのボリューム容量増やさないといけなくなったりする
  • たまに壊れるかもしれない(回復可)ので、複数人で使う場合はこまめにメンテナンスできる立場の人が必要
  • サーバ管理の知識が必要で、初心者にはおすすめできない。特に漫画描く人の中でサーバ扱える人は限られる
  • アプリの数がまだ少ない、英語も多い

アプリって?

NextCloudでは、通常のクラウドサービスにないものがあります。アプリです。

All apps - App Store - Nextcloud

f:id:kmynews:20170715103424p:plain

カレンダーとか

f:id:kmynews:20170715103531p:plain

簡易メモ機能とか
あとはタスク・チケット管理システムとか。

NextCloudのApp Storeでは、このほかにも、まだ試してないけど、カンバン管理システム(英語でもkanbanって書くらしい)、サークル管理システム(要するにプロジェクト機能)などがあります。
簡易メモ機能でメモ削除する時に確認ない・共有できないなど、一部のアプリでは実用性にやや難がありますが、下手すれば同人間での簡単なプロジェクト管理に使えるかも。ていうか誰かが高機能な統合アプリ作って公開すれば、サイボウズLiveのようなそこら辺のプロジェクト管理サービスを終息に追い込む・・・というのは言い過ぎにしても、それなりの打撃を与えうる脅威になる可能性も秘めています。

もっとも、使う人が多ければの話ですが・・・。

ownCloudとの違い

実は、NextCloudの前身として、ownCloudがあります。
ownCloudは今も現役でして、OSS版もありますが、どちらかといえば企業向けのソリューションとしての展開に重きをおいています。そのため、企業向けの機能優先してOSS版の開発が遅れる、みたいな事態になったらしく。
経緯はQiitaの記事に詳しくまとめられています。使うべきか?という問いの答えが明確に示されていない気もしますが、経緯を理解する上では重要な資料です。

qiita.com

ownCloudのほうが製品として成熟されているイメージはあったのですが、私の感覚ではownCloudよりNextCloudを選びました。

セットアップしました

長々と前置きしてしまいましたが、NextCloudをAWS鯖にインスコします。
NextCloudは、ASPでもJSPでもなんでもなく、PHPで書かれています。

前提条件として、

  • インスコするNextCloudのバージョンは12.0
  • CentOS 7 x64
  • ApacheMySQLはすでに入っているものを使う
  • PHPはすでに5.4が入っているが、7.0にアプデする
  • ファイルは外付けボリューム(OSとは異なるボリューム)を作って、そこに保存する。ボリュームの容量拡張が容易なので

また、NextCloudをこういう使い方しますよ、と。

  • MySQLのsockやデータは、第三のボリュームに保存している
  • HTTPSは最低条件。ただしお金の関係で自己証明の証明書を使う。証明書はすでに作成済のものを使う
  • 容量削減のため、ファイルバージョン管理システムは使わない
  • ファイルの同期にクライアントアプリを使う

上記のような環境で、引っかかったことなど書いてみます。

NextCloudのインスコ

ここが私の状況に一番近かったので、参考にしました。

How to install Nextcloud 11 on CentOS 7 – RoseHosting.com Blog

記事内ではMySQLではなくmariaDBを使っていたり、ApachePHPを新規インストールしたりとしてましたが、以下のように読み替えました。

  • mariaDBインスコはなし。MySQLでデータベースとユーザを新規作成する
  • Apacheは既存のものにSSL設定をとっつけてそのまま使用
  • PHPは、5.4をyum -y remove phpで消して、7.0のインスコを上の記事に従って実施

curlで落とした、NextCloudの入ったtar.bz2がなぜか解凍できない!

ので、今回はtarではなくzipのほうを落として、unzipインスコして解凍しました。
NextCloud最新版をダウンロードするためのURIは、

nextcloud.com

このページから抜くことができます。

PHP 7.0がApacheで動かない!

PHPのページを開いても、プレーンテキストが表示されるだけです。
上の記事ではうまく動いたらしいんですよね。なぜなんでしょう。
そこで、

How To Upgrade to PHP 7 on CentOS 7 | DigitalOcean

こっちの記事を読んで、mod_phpと、php-cliを7.0にアプデしました。
もちろん、php-mbstringphp-gdphp70u-mbstringphp70u-gdに置き換え。php70u-pecl-zipインスコできなかったけど、インスコしなくても動いた。
yumで70uのついたものをinstallしようとしたらConflictが発生するので、前のライブラリをremoveしながら進めます。

/etc/php.iniを書き換え

ここでみなさんに、嬉しいお知らせがあります。

NextCloudは、初期状態ではアップロードできるファイルサイズの上限が!なんと!2MBCLIP STUDIO PAINTのデータ全滅!わーいすごーい!たーのしー!

この2MBというのが、実はNextCloudではなくPHPの制限に由来しているので、/etc/php.iniを編集してこの制限をなんとかします。
この記事にあるとおり、3つの設定項目を変える必要があります。

www.php-factory.net

しかし、メモリ使用量の上限を上げすぎたらOSクラッシュにつながりかねないので、サーバの残りRAM容量と相談して、220MBにしました。ファイルサイズの上限は、余裕を持たせて200MBにしてあります。
メモリの空き容量はfree -mコマンドでMB単位で確認できるので、各自の環境で調べて、適切な値にしてください。
ここらへんがAWSのむずいところ。ていうかファイルサイズ上限がRAM容量に依存するなんて知らなかった。

ここでもう1つ。今回、MySQLのsockやデータを別のボリュームにうつしているので、PHPの設定も変更する必要があります。

【php】MySQLに接続するときにエラー発生 at softelメモ

こちらの記事を参考に、sockファイルの位置を指定します。

初期セットアップしました

URI叩いて、NextCloudのページを開きます。NextCloudはPHPでできているので、NextCloudを置いたディレクトリへアクセスするだけです。

すると、初期セットアップとして、

  • 管理権限を持ったアカウント新規作成しるからIDとパス打ってくれ
  • NextCloudにアップロードされたファイルを保存する、chownapacheアカウントのアクセス権限が付与されたフォルダの絶対パスをくれ
  • MySQLへ接続する時の情報くれ

と言われますので、これらのデータを入力します。
情報入れて接続すると、NextCloudのセットアップが終了し、ストレージの画面が開きます。

ファイルのバージョン管理を無効にする(任意)

これは、間違って消したり上書きしたりしたファイルも復元できるよっていうNextCloudの売りの1つらしく。ファイル容量圧迫してクラウド料金が無駄に増えかねないとの判断で、まず最新から○件のファイルだけとっておくという設定がないか探しましたがこれもないらしく。
仕方ないので、バージョン管理機能そのものを無効化することにしました。

画面右上のメニューから「アプリ」を選択します。

f:id:kmynews:20170715112004p:plain

アプリ一覧から「Versions」を探して「無効にする」をクリックします。

f:id:kmynews:20170715112050p:plain

カレンダーアプリをインスコする(任意)

さっきのアプリ画面で、「共同作業」を選ぶと一覧に「Calendar」が表示されますので、「有効にする」ボタンを押します。

f:id:kmynews:20170715112303p:plain

さっき書いた簡易メモ機能はNotes、タスク管理システムはTasksのことです。必要なアプリがあったら、ここからいつでも簡単にインスコできます。

インスコすると、画面上部になんかアイコンが増えてるので、そこからアクセスします。

f:id:kmynews:20170715112455p:plain

クライアントアプリから、フォルダを同期する

nextcloud.com

このページの右下からWindowsクライアントアプリがダウンロードできますので、ダウンロードします。
インスコして、サーバにログインすれば、同期が開始されます。

デフォルトでは、Dropboxと同じように、特別なフォルダの中にファイルを入れないとNextCloudと同期してくれません。
特定ローカルフォルダと特定クラウドフォルダを結びつけたい、例えばC:\Users\KMY\Pictures\comicフォルダをNextCloudのComicsフォルダに結びつけたいってなったときは、クライアントアプリの設定画面を開いて

f:id:kmynews:20170715113217p:plain

「同期フォルダを追加」ボタンをクリックします。
(もしこのボタンが無効化されててクリックできない時は、既存の設定をマイナスボタンで消してしまいます)

このボタンをクリックするとウィザードが出てきます。

  • ローカルフォルダ選択
  • クラウドフォルダを選択

して完了すれば、ローカルのフォルダをクラウドにアップロードする作業が開始されます。

f:id:kmynews:20170715113554p:plain

これが、

f:id:kmynews:20170715113633p:plain

こうなります。
詳しくは、ownCloudの記事ですが、これがちょっと参考になります。

everyday-growth.com

NextCloud使ってる上で起きたトラブル

昨夜インスコしたばかりですが、すでに2度トラブルが起きています。

NextCloudを使ってたら突然500になった

普通に使ってただけで突然500になりました。
NextCloudいきなり壊れたのかと慌てていたら、どうやら原因はMySQLのsockファイルがなぜか消えてしまったのが原因らしく。
systemctlコマンドでMySQLを再起動したらあっさり直りました。

あるファイルがロックされていると言われて、特定ファイルがアップロードできない

File is locked - how to unlock - howto - Nextcloud community

このページを参考にして、以下のコマンドを打ってみました。

sudo -u apache php /home/***/nextcloud/occ files:scan --all

しかし、これをやってみてもだめだったので、MySQL内にあるファイルロックデータを削除します。
まず、MySQLにログインして、use Nextcloud;でデータベースを選択してから、以下のクエリを実行します。

delete from oc_file_locks where `lock`=1;

これでちゃんとアップロードできました。