Nextcloudをエックスサーバーにインストールして自分専用のクラウドストレージを構築する

DropboxGoogleドライブと同じような機能を持つ自分専用のクラウドストレージエックスサーバー上に構築します。使用するソフトウェアはフリーでオープンソースのNextcloudです。

クラウドストレージ(オンラインストレージ)の構築と聞くと難しく思えますが、WordPressをサーバーにインストールするのと難易度は変わりません。NextcloudもWordPressと同じく、PHP・JavaScript・MySQL(SQLite)で動作しています。

また、Nextcloudにも様々なプラグイン(アプリ)が用意されており、多様な機能を追加することができます。今回はセキュリティアプリを利用して二段階認証を追加します。

加えて、Nextcloudには、Windows、Mac、iOS、Androidなど、複数のプラットフォームでクライアントアプリが用意されており、異なるOS間でもWebブラウザを介さずに、OSのエクスプローラーでデータを共有することができます。

環境
Nextcloud
24.0.4
PHP
8.0.1
MariaDB
10.5

準備

まず、インストール場所とデーターベースの用意をします。

インストールする場所を決める

今回は、Nextcloud本体をhome/server_id/example.com/public_html/nextcloudへ。
データー保存は非公開ディレクトリにhome/server_id/data/nextcloudを用意しました。

home/server_id/
|-- example.com/
|   |-- .../
|   `-- public_html/
|       `-- nextcloud/
`-- data/
    `-- nextcloud/

データベースの準備

エックスサーバーのサーバーパネル(MySQL設定)にて

  • 新規データベースの作成
  • 必要があれば新規ユーザー作成
  • アクセス権所有の設定

インストーラーのダウンロード

Nextcloud Installへアクセス、
DOWNLOAD Server > Community projects > Web installer をクリック、
setup-nextcloud.phpをダウンロードします。今回はサーバーへの転送を省くために直接サーバーにダウンロードします。

エックスサーバーにSSH接続して以下のコマンドを実行します

$ cd ~/example.com/public_html/nextcloud

$ wget https://download.nextcloud.com/server/installer/setup-nextcloud.php
......
...... `setup-nextcloud.php' へ保存完了

インストール

example.com/nextcloud/setup-nextcloud.phpへアクセスしてインストールします。

インストールディレクトリの指定に「.」を入力してカレントディレクトリに展開します。以上でインストールが完了してセットアップに移るのですが、エックスサーバーではこの記事公開時点で500 Internal Server Errorが出ます。

エラーログを確認すると「Invalid command 'ModPagespeed', perhaps misspelled or defined by a module not included in the server configuration」とあったので、example.com/nextcloud/.htaccessの該当箇所を修正します。

<IfModule pagespeed_module>
#  ModPagespeed Off コメントアウト
</IfModule>

セットアップ

example.com/nextcloudへアクセスしてセットアップをします。

ユーザー名

ユーザー名ユーザーIDになります。ここで入力した文字列(ユーザーID。最大64文字)がWebDAVアクセスへのURLとして使用されます。ユーザー名の変更は後からも可能ですが、IDは変更できません。

データフォルダー

準備で作成したディレクトリパスを入力します。

ユーザー作成(インストール)

その他の入力も済まし、インストールをクリックします。次ページの推薦アプリはキャンセルをクリックします。

設定

概要

ログイン後の画面右上のユーザーアイコンをクリックしてメニューから「設定」を選択します。
次に左サイドバーの、管理の下の「概要」を選択します。

エラー

エラーがいくつか出ているので、

を参考に解決します。全て解決することはできませんでしたが、現時点では動作に支障はないので問題が出たときに対処します。

メモリーキャッシュが構成されていません。パフォーマンスを向上させるために、可能な場合はmemcacheを構成してください。詳細については、ドキュメント↗をご覧ください。

というエラーは、config.php
'memcache.local' => '\OC\Memcache\APCu'
を書くことで解消されますが、SSH接続でoccを利用する際に

An unhandled exception has been thrown:
OCP\HintException: [0]: Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)

とのエラーを起こしてしまいます。php.iniapc.enable_cli=1を設定すれば解消するようですが、サーバーの再起動をできないこと、また、動作に問題は無いのでこのエラーは放置します。

共有

今回は共有関連は使用しないので全てのチェックを外しました。

二段階認証の設定

アプリのインストール

画面右上のユーザーアイコンをクリックしてメニューから「アプリ」を選択します。
次に左サイドバーの「セキュリティ」を選択します。

画面右に表示されたアプリの中から「Two-Factor TOTP Provider」を選択し、「ダウンロードして有効化する」をクリックします。

有効化

画面右上のユーザーアイコンをクリックしてメニューから「設定」を選択します。
次に左サイドバーの、個人の下の「セキュリティ」を選択します。

二段階認証の設定項目が表示されているの設定、有効化します。

データの暗号化

各ファイルの中身は暗号化されますが、暗号化と復元化のための秘密鍵と公開鍵はサーバー上に在り、ディレクトリ構造やファイル名はそのままです。

アプリの有効化

画面右上のユーザーアイコンをクリックしてメニューから「アプリ」を選択します。
次に左サイドバーの「無効なアプリ」を選択します。

画面右に表示されたアプリの中から「Default encryption module」の「有効にする」をクリックします。

有効化

画面右上のユーザーアイコンをクリックしてメニューから「設定」を選択します。
次に左サイドバーの、管理の下の「セキュリティ」を選択します。

サーバーサイド暗号化の設定項目にチェックを入れ、有効化します。

ファイルの暗号化はこの機能を有効化した後にアップロードしたファイルに対して行われ、既存ファイルは暗号化されません。既存ファイルを暗号化する場合は、SSH接続し以下のコマンドを実行します。

$ pwd
/path/to/nextcloud_dir

$ ./occ encryption:encrypt-all

参考: Encryption configuration


以上で最低限の設定は終了です。その他の項目は使用法に合わせて設定してください。

更新

ログイン後の画面右上のユーザーアイコンをクリックしてメニューから「設定」を選択します。
次に左サイドバーの、管理の下の「概要」を選択します。

新しいバージョンが利用可能な場合は通知が表示されるので、アップデーターを開くをクリックします。

エラーが起こるので、ページをそのままにし、インストール時と同じく.htaccessを修正します。
また、メンテナンスモードになっているのでconfig.php'maintenance' => falseと修正します。

修正後、画面に表示されたボタンをクリックで更新作業が進行します。

おわりに

これで自分専用のオンラインストレージを構築することができました。
あとは、Nextcloud Installから、クライアントアプリ(Download for desktopから)をダウンロードし設定すれば、ローカルディレクトリを扱うようにエックスサーバー上のファイルを扱えます。

既存のクラウドストレージの容量不足や同時接続数に悩まされているなら、Nextcloudの導入はお勧めです。