CentOS 7でNextCloud立ててみたおはなし
あすかです。
私は趣味で漫画描いてるんですが、パソコンが壊れたときに備えて、それらの漫画をどっかにバックアップしておきたくなってきます。
でも、漫画の中にはいかがわしい内容も含まれていまして、DropboxやOneDriveの規約に引っかかってある日突然アカウント削除されないか心配だったので、Dropboxと同じことができるOSSどっかにねーかなと思っていたら、ありました。なぜかありました。奇跡です。てかなぜ作った。発想がすげえよ。
というわけで、AWSのCentOS 7上で構築してみたので、備忘録として。
※AWSでも一部(児童ポルノや米国でタブーの獣姦はもちろん、相互同意がない性交など。二次ソース(公式日本語訳)も参照)のアダルトコンテンツは規約で禁止されてるのでグレーゾーンらしい。今のところギリギリかな。もっと安全なところ探しちうだけど値段が
NextCloudの特長
NextCloudは、誰でもDropboxみたいなオンラインストレージサービスを自分のサーバ上に構築できるという、キチガイ素晴らしいOSSです。
- 利用料なし。サーバ代金だけ(もっともこれがDropboxより高価だったりする)
- 利用規約なし。とにかく自由
- 容量無制限、物理的なディスク容量だけ(もちろんユーザごとに容量決めることも可能)
- ファイルのバックアップ・バージョン管理が無制限でできる(
キチガイ容量の関係で今回は無効化しました) - NextCloud専用アプリが簡単に導入できる
- Windows、Mac・スマホ向けクライアントアプリがあって簡単に同期できる。ていうか特定のローカルフォルダと特定のクラウドフォルダを結びつけることもでき、DropboxやOneDriveのようにクラウドに送るファイルを特別なフォルダにまとめないでおくこともできる
デメリット
アプリって?
NextCloudでは、通常のクラウドサービスにないものがあります。アプリです。
All apps - App Store - Nextcloud
カレンダーとか
簡易メモ機能とか
あとはタスク・チケット管理システムとか。
NextCloudのApp Storeでは、このほかにも、まだ試してないけど、カンバン管理システム(英語でもkanbanって書くらしい)、サークル管理システム(要するにプロジェクト機能)などがあります。
簡易メモ機能でメモ削除する時に確認ない・共有できないなど、一部のアプリでは実用性にやや難がありますが、下手すれば同人間での簡単なプロジェクト管理に使えるかも。ていうか誰かが高機能な統合アプリ作って公開すれば、サイボウズLiveのようなそこら辺のプロジェクト管理サービスを終息に追い込む・・・というのは言い過ぎにしても、それなりの打撃を与えうる脅威になる可能性も秘めています。
もっとも、使う人が多ければの話ですが・・・。
セットアップしました
長々と前置きしてしまいましたが、NextCloudをAWS鯖にインスコします。
NextCloudは、ASPでもJSPでもなんでもなく、PHPで書かれています。
前提条件として、
- インスコするNextCloudのバージョンは12.0
- CentOS 7 x64
- ApacheとMySQLはすでに入っているものを使う
- PHPはすでに5.4が入っているが、7.0にアプデする
- ファイルは外付けボリューム(OSとは異なるボリューム)を作って、そこに保存する。ボリュームの容量拡張が容易なので
また、NextCloudをこういう使い方しますよ、と。
- MySQLのsockやデータは、第三のボリュームに保存している
- HTTPSは最低条件。ただしお金の関係で自己証明の証明書を使う。証明書はすでに作成済のものを使う
- 容量削減のため、ファイルバージョン管理システムは使わない
- ファイルの同期にクライアントアプリを使う
上記のような環境で、引っかかったことなど書いてみます。
NextCloudのインスコ
ここが私の状況に一番近かったので、参考にしました。
How to install Nextcloud 11 on CentOS 7 – RoseHosting.com Blog
記事内ではMySQLではなくmariaDBを使っていたり、ApacheやPHPを新規インストールしたりとしてましたが、以下のように読み替えました。
curlで落とした、NextCloudの入ったtar.bz2がなぜか解凍できない!
ので、今回はtarではなくzipのほうを落として、unzip
インスコして解凍しました。
NextCloud最新版をダウンロードするためのURIは、
このページから抜くことができます。
PHP 7.0がApacheで動かない!
PHPのページを開いても、プレーンテキストが表示されるだけです。
上の記事ではうまく動いたらしいんですよね。なぜなんでしょう。
そこで、
How To Upgrade to PHP 7 on CentOS 7 | DigitalOcean
こっちの記事を読んで、mod_phpと、php-cliを7.0にアプデしました。
もちろん、php-mbstring
やphp-gd
はphp70u-mbstring
やphp70u-gd
に置き換え。php70u-pecl-zip
はインスコできなかったけど、インスコしなくても動いた。
yum
で70uのついたものをinstall
しようとしたらConflictが発生するので、前のライブラリをremove
しながら進めます。
/etc/php.iniを書き換え
ここでみなさんに、嬉しいお知らせがあります。
NextCloudは、初期状態ではアップロードできるファイルサイズの上限が!なんと!2MB!CLIP STUDIO PAINTのデータ全滅!わーいすごーい!たーのしー!
この2MBというのが、実はNextCloudではなくPHPの制限に由来しているので、/etc/php.ini
を編集してこの制限をなんとかします。
この記事にあるとおり、3つの設定項目を変える必要があります。
しかし、メモリ使用量の上限を上げすぎたら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にアップロードされたファイルを保存する、
chown
でapache
アカウントのアクセス権限が付与されたフォルダの絶対パスをくれ - MySQLへ接続する時の情報くれ
と言われますので、これらのデータを入力します。
情報入れて接続すると、NextCloudのセットアップが終了し、ストレージの画面が開きます。
ファイルのバージョン管理を無効にする(任意)
これは、間違って消したり上書きしたりしたファイルも復元できるよっていうNextCloudの売りの1つらしく。ファイル容量圧迫してクラウド料金が無駄に増えかねないとの判断で、まず最新から○件のファイルだけとっておくという設定がないか探しましたがこれもないらしく。
仕方ないので、バージョン管理機能そのものを無効化することにしました。
画面右上のメニューから「アプリ」を選択します。
アプリ一覧から「Versions」を探して「無効にする」をクリックします。
カレンダーアプリをインスコする(任意)
さっきのアプリ画面で、「共同作業」を選ぶと一覧に「Calendar」が表示されますので、「有効にする」ボタンを押します。
さっき書いた簡易メモ機能はNotes、タスク管理システムはTasksのことです。必要なアプリがあったら、ここからいつでも簡単にインスコできます。
インスコすると、画面上部になんかアイコンが増えてるので、そこからアクセスします。
クライアントアプリから、フォルダを同期する
このページの右下からWindowsクライアントアプリがダウンロードできますので、ダウンロードします。
インスコして、サーバにログインすれば、同期が開始されます。
デフォルトでは、Dropboxと同じように、特別なフォルダの中にファイルを入れないとNextCloudと同期してくれません。
特定ローカルフォルダと特定クラウドフォルダを結びつけたい、例えばC:\Users\KMY\Pictures\comicフォルダをNextCloudのComicsフォルダに結びつけたいってなったときは、クライアントアプリの設定画面を開いて
「同期フォルダを追加」ボタンをクリックします。
(もしこのボタンが無効化されててクリックできない時は、既存の設定をマイナスボタンで消してしまいます)
このボタンをクリックするとウィザードが出てきます。
- ローカルフォルダ選択
- クラウドフォルダを選択
して完了すれば、ローカルのフォルダをクラウドにアップロードする作業が開始されます。
これが、
こうなります。
詳しくは、ownCloudの記事ですが、これがちょっと参考になります。
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;
これでちゃんとアップロードできました。