Ubuntu 18.04 に Nextcloud をインストールしてみたので、その覚書です。基本的に Nextcloud公式ドキュメントを参考にしながら作業をしていきます。

公式: Installation and server configuration — Nextcloud 15 Administration Manual 15 documentation

Nextcloud とは

Nextcloudとは、オープンソースのオンラインストレージサービスを提供できるソフトウェアで、サーバや、WindowsやAndroid、Mac用のクライアント用アプリがあります。類似のソフトウェアで、Owncloud もあります。類似しているというより、Owncloud は Nextcloud の兄貴分に当たります。Nextcloud は Owncloud からフォークされて開発されています( 詳しい話は、Wiki にあります)。

誤解を恐れずに、簡潔に言えば、「Dropbox」のプライベート版と思っていただいていいです。Windows用のクライアントからは、Nextcloud上のファイルやフォルダを、あたかもローカルファイルのように扱うことが出来て、大変便利です。

もし、VPS等を契約されているならば、インストールして損はない、と思います。

前提

以下の作業が既に終わっているということを前提にして記事を進めます。

ゴール

  • 使用するバージョンは、Nextcloud15 (現在のバージョンは15.0.7)
  • Nextcloud を tar ボールからインストール(他にも Snap を利用したインストール方法もあります)
  • Webサーバのサブディレクトリでアクセスできるように設定
  • インストール先は、/var/lib/nextcloud
  • URL は https://www.example.com/nextcloud/ でアクセス。

Nextcloud のインストール要件

Nextcloud15のインストール要件です。

オペレーションシステム

  • Ubuntu 18.04 LTS (推奨)
  • Red Hat Enterprise Linux 7 (推奨)
  • Debian 8, 9
  • SUSE Linux Enterprise Server 11 with SP3 & 12
  • openSUSE Leap 42.1 +
  • CentOS 7

データベース

  • MySQL or MariaDB 5.5+ (推奨)
  • Oracle Database 11g
  • PostgreSQL 9/10
  • SQLite

Webサーバ

  • Apache 2.4 with mod_php or php-fpm (推奨)
  • ngix with php-fpm

PHP

  • 7.0
  • 7.1
  • 7.2
  • 7.3

MariaDBの設定

インストール

詳細は、Ubuntu 18.04 + LAMP 環境構築 (3) – MariaDB 10.3 を参照。

ISOLATION LEVELとBINLOG FORMAT

Nextcloud で MySQL / MariaDB を利用する場合は、以下の要件が必須となります。

  • ストレージエンジンは InnoDB
  • DB の トランザクション分離レベルが “Read COMMITED”
  • Binary Logging を無効にするか、あるいは、BINLOG_FORMAT = ROW を設定する。
  • 文字コード Utf8mb4 を使用。

/etc/my.cnf などに次のような設定を追加します。

MySQL 4-byte サポート

/etc/my.cnf などに次のような設定を追加します(デフォルトで設定されているはずです)。

my.cnf の例

本家サイトの my.cnf の例を適用してみます。

ここでは、/etc/mysql/my.cnf に直接書くのを避けて、mariadb.cnf 上で設定します。これが作法としてよいかどうかは確認していませんが・・

理由としては、単純に my.cnf の末尾で mariadb.cnf がインクルードされるので、同じ変数がそれぞれにあった場合は my.cnf の値が mariadb.cnf の値で上書きされることを期待しているからです1

MariaDBを再起動します。

Nextcloud 用にデータベースを作成する

Nextcloud で利用するデータベース名と、それにアクセスするユーザー名とそのパスワードを設定します。

MariaDBにログインする。

データベースを作成。

Nextcloudのデータベースを使用するためのユーザを作成。

PHP の設定

PHP のインストール

詳細は、Ubuntu 18.04 + LAMP 環境構築 (4) – PHP 7.2 を参照。

必要とされるPHPモジュール

  • ctype
  • curl
  • dom
  • gd
  • iconv
  • json
  • libxml (Linux package libxml2 must be >=2.7.0)
  • mbstring
  • openssl
  • pdo_mysql
  • posix
  • session
  • simplexml
  • XMLReader
  • XMLWriter
  • zip
  • zlib

また、以下のモジュールも推奨されています。

  • fileinfo (→ すでに導入済み)
  • bz2 (php7.2-bz2)
  • intl (php7.2-intl)

モジュールの追加

ほとんどのモジュールはすでに導入されているので、次のようにして追加のモジュールをインストールします。

pdo_mysql の設定

先のPHPの設定通りの場合、php-fpmを使用するので、/etc/php/7.2/fpm/conf.d/20-pdo_mysql.iniに、以下のように設定を記載します。

Nextcloud のインストール

  • Dowload for server をクリックする。

  • Details and download options をクリックする。

  • .tar.bz2 のダウンロードリンクと、MD5チェックサムのダウンロードリンクをコピーして、次のようにする。

MD5チェックサムを確認する。

ファイルを展開して、ディレクトリに配置する。

Nextcloud のファイルのオーナー・グループを変更する。

Apache Web サーバーの設定

次のファイルを作成し、編集します。

/etc/apache2/sites-available/nextcloud.conf

内容は次のとおりです。http://サイトのURL/mycloudへのアクセスを/var/lib/nextcloudのディレクトリへのエイリアスとした設定です。

サイトの設定を有効にします。

すでに有効にしているモジュールもありますが、以下のモジュールを有効にします。

最後にapache2 を再起動します。

インストールウィザードの実行

ブラウザからURLにアクセスします。

https://www.example.com/mycloud

任意の管理者ユーザー名と、パスワードを入力し、セットアップを完了します をクリックします。

管理者ユーザー名とパスワードは今後も必要になるので、忘れないようにしてください。

ModSecurityを併用している場合

modSecurity を併用している場合、ログイン後、ロード中のサークルが回ったまま、一向にページが帰ってこなくなります。

ここで、Apache2 のエラーログを見ると、以下のように ModSecurity のエラーがズラズラと出てくることがわかると思います。

このログのの細かい部分はあまり良くわかってはいませんが、注目すべきポイントがあります。それは、idmsgclienturi です。

client は、Webサーバにアクセスしているクライアントです。この時点では、自身のホスト名なりIPアドレスが表示されているはずです。

id は、ModSecurity のルールセットで定義されているポリシーのIDです。

ちなみに一番最初の行は、[ id "911100"] で、msg"Method is not allowed by policy となっています2

要するに、自身のIPからアクセスした場合に記録されているこれらのIDについては、ポリシーが適用されないようにする必要があります (くれぐれも悪意の第三者からのアクセスについてのエラーを除外しないように・・)。

除外リストを作成する

次の記事、”ModSecurity Web Application Firewall for NextCloud” を参考に、/etc/modsecurity/modsecurity_crs_99_whitelist.conf を作成して、その中に次のような除外フィルタを定義します。

<Directory /path/to/nextcloud> には、実際にNextcloudをデプロイしたパスを指定します。この場合は、この物理パスから下の部分へのリクエストに関しては、上記で指定したルールが除外されます。

特定のURIに対して除外させたい場合は、<LocationMatch /path/of/uri> とすることで、特定のURIのみに適用させることもできます。

保存後、Apache2を再起動します。

ModSecurity の crs-setup.conf を編集

ModSecurity の /usr/share/modsecurity-crs/crs-setup.conf に一部のアプリケーション向けの除外リストがあるので、それを有効にするのも手かもしれません。

Nextcloud にログインする

セキュリティポリシーの除外リストを適用させることができたら、再度ログインを試みます。

ログインに成功すると、次のような画面になります。

URL を綺麗にする

次のように設定することで、URL中のindex.phpを除去してくれます。
mod_envmod_rewriteモジュールがインストールされている必要があります。また、.htaccesswww-dataユーザーが書き込めるようにしておく必要があります。

その上で、config.phpに次の設定を変更します。

occコマンドで、.htaccessファイルを更新します。

その他

ログイン直後のページ右上の、ユーザーのイニシャルが入った丸いアイコンをクリックし、[設定] をクリックすると、「設定」画面に入ることができます (設定画面に入るには、パスワードを要求されます)。

左側ペインの[管理] 項目にある[概要] をクリックすると、バージョン情報に加えて、「セキュリティ & セットアップ警告」 という画面に遷移します。

ここの「セキュリティ & セットアップ警告」 に警告が出ている場合、解決をしておく必要があります。

以下は、その例です。

X-Frame-Options not set to SAMEORIGIN

warning “X-Frame-Options not set to SAMEORIGIN”

クリックジャッキング対策 を元に、mod_headers を設定してください。

Your web server is not yet ..

Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken.

ModSecurity を併用している場合 の設定で回避できます。

それでもなお、ModSecurity のエラーが発生する場合は、ホワイトリストにIDを追加してください。

Strict-Transport-Security

“Strict-Transport-Security” HTTPヘッダが最低でも “15552000” 秒に設定されていません。セキュリティを強化するには、セキュリティTips ↗で解説しているHSTSを有効にすることを推奨します。

参考: Enable HTTP Strict Transport Security

次の、<IfModule mod_headers.c> ... </IfModule> の節を追加します。

Service discovery

Your web server is not properly set up to resolve “/.well-known/caldav”. Further information can be found in the documentation.
Your web server is not properly set up to resolve “/.well-known/carddav”. Further information can be found in the documentation.

参考: Service discovery – General trouble shooting

次の節を、/etc/apache2/sites-available/default-ssl.confに追加。

PHP OPcacheが適切に設定されていません…

PHP OPcacheが適切に設定されていません。よりパフォーマンスを向上させるには、php.iniで次の設定を推奨します

/etc/php/7.2/fpm/php.iniに、Opcache 関連の設定が有効になっているか確認します。

設定が反映されない場合、

で、php7.2-fpm を再起動してみる。

メモリキャッシュが設定されていません…

メモリキャッシュが設定されていません。可能であれば、パフォーマンスを向上するため、memcacheを設定してください。

参考: Server tuning — Nextcloud 15 Administration Manual 15 documentation
参考: Memory caching — Nextcloud 15 Administration Manual 15 documentation

php-apcu をインストール。

config.php に次の項目を追加する。

/etc/php/7.2/fpm/php.ini に、次の行を追加する。

Some columns in the database are missing…

Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. By running ‘occ db:convert-filecache-bigint’ those pending changes could be applied manually. This operation needs to be made while the instance is offline. For further details read the documentation page about this.

  • filecache.mtime
  • filecache.storage_mtime

次のコマンドを実行してください。

まとめ

この文書をまとめるにあたって、再度インストールを検証したのですが、いろいろグダグダで失敗しまくりました。

ログイン画面でループになってしまうような場合は、ネットワーク関係の設定の見直し

  • /etc/netplan/01-netcfg.yaml
  • /etc/hosts
  • /etc/hostname

の記載間違いがないかをよく確認したほうがいいかもしれません。

また、ModSecurityについては、インストール時にはいったんOffにしておいて、インストール後有効にして調整、のほうがいいかもしれません。

あと、公式のインストールガイドは、たいへん見にくいですよね。やっている間に頭がこんがらがってきてしまいました。

まぁ、とにかく自己責任でおねがいします。。


  1. MariaDB の設定をどこに書くのか、my.cnfmariadb.confconf.d/以下のディレクトリか、mariadb.conf.d/以下のディレクトリか、その最適な解がまだよくわかっていませんが・・。 
  2. ちなみにこのルールセットは、/usr/share/modsecurity-crs/rules/REQUEST-911-METHOD-ENFORCEMENT.conf にあります。id の頭3文字 ( 911 ) が、ルールセットのファイル名に対応しています。 

0件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です