サイトアイコン IT NEWS

UbuntuにNextCloudをインストールしてクラウドストレージ構築

以前から連載している自宅サーバーNextCloudインストールして、自分専用クラウドストレージを作っちゃいます!
NextCloudを使えば、PC・スマホ・タブレットなどのデバイスに関係なく、ネットが繋がるブラウザさえあれば(クライアントアプリもあり)、外出先から自宅のファイルサーバーにアクセスできますので、容量が足りないからといってクラウドストレージのサブスクに毎月課金しなくてもよくなりますよ!

NextCloudサーバーのシステム要件

まず、自宅サーバーNextCloudインストールして、自分専用のクラウドストレージを構築するには、以下のシステム要件を満たしている必要がありますので、構築する前に要件を満たしているか確認しましょう。

スクロールできます
対象動作環境                            
サーバOSRed Hat Enterprise Linux 8
Ubuntu 20.04 LTS
CentOS 8
データベースMySQL 8.0+ or MariaDB 10.2/10.3/10.4/10.5
PostgreSQL 9.6/10/11/12/13
ウェブサーバApache 2.4 with mod_php or php-fpm
Nginx with php-fpm
PHP Runtime7.3, 7.4, 8.0
NextCloudサーバーのシステム要件

今回はUbuntuに登録していきます!
この情報は、NextCloud日本公式サイトで確認しました。
ちなみに、公式サイトはこちらです。

また、利用できるアプリやブラウザなど、Nextcloudクライアントシステム要件も掲載されていますので、念のためこちらも確認しておいてください。

スクロールできます
対象動作環境                            
ブラウザMicrosoft Edge、Mozilla Firefox、Google Chrome/Chromium、Apple Safari
クライアントアプリ
(同期アプリ)
Windows8.1+、macOS Lion(10.7)+(64ビットのみ)、
Linux(CentOS 6.5+, Ubuntu 14.04+, Fedora 21+, openSUSE 13, SUSE Linux Enterprise 11 SP3+,
Debian 8 (Jessie)+, Red Hat Enterprise Linux 7)
モバイルアプリAndroid4.x+、iOS11.x+
NextCloudクライアントのシステム要件

Webサーバーとデータベースは必須!

システム要件で分かるように、NextCloudにはWebサーバーデータベースが必要です!
まだ構築していない方は、こちらの2つの記事を参考に、予め構築を済ませておいてください。
ちなみに、NextCloudPHPで動作します。

UbuntuにNextCloudをインストール

それでは、いつものように著者が崇拝する参考サイトを見ながらインストールしていきましょう!w

NextCloudインストールに必要なのは主に以下の3つです。

  1. PHPモジュールのインストール
  2. データベースの作成
  3. Webサーバーの設定

PHPモジュールのインストールと設定

NextCloudの公式サイトのシステム要件でもある通り、NextCloudはPHPで動作するので、まずは必要なPHPモジュールを全てインストールしていきます。
PHPバージョンはご自身の環境に合わせて読み替えてください。

# apt -y install php-pear php7.4-mbstring php7.4-intl php7.4-gd php7.4-zip php7.4-mysql php7.4-bcmath php7.4-gmp php7.4-opcache php-imagick php7.4-curl php-apcu

次に、NextCloud用のPHP設定ファイル(ここではnextcloud.conf)を新規で作成して編集していきます。

# vi /etc/php/7.4/fpm/pool.d/nextcloud.conf

内容は参考サイトの通りです。
コメントより下のパラメータは、サーバーの環境や使い方によって変更してくださいね!

[nextcloud]
user = www-data
group = www-data

listen.owner = www-data
listen.group = www-data
listen = /run/php/nextcloud.sock
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

php_value[session.save_handler] = files
php_value[session.save_path]    = /var/lib/php/sessions

### 以下はサーバースペックや NextCloud の使用状況に応じて要調整
php_value[max_execution_time] = 3600
php_value[memory_limit] = 2G
php_value[post_max_size] = 2G
php_value[upload_max_filesize] = 2G
php_value[max_input_time] = 3600
php_value[max_input_vars] = 2000
php_value[date.timezone] = Asia/Tokyo

php_value[opcache.enable] = 1
php_value[opcache.memory_consumption] = 128
php_value[opcache.interned_strings_buffer] = 8
php_value[opcache.max_accelerated_files] = 10000
php_value[opcache.revalidate_freq] = 1
php_value[opcache.save_comments] = 1

今回はクラウドストレージなので、出し入れするファイルの大きさや転送時間に制限があると使い難くなるので、サーバーのスペックが許すならリソースを少し多めに確保しておくと良いでしょう。

最後に、php-fpm再起動して完了です!

# systemctl restart php7.4-fpm

データベースの作成

次は、MariaDBNextCloud用のデータベースとユーザーを作成します!
こちらもデータベース名やユーザー名、パスワードについてはお好みで設定してください。

# mysql
> create database nextcloud;
> grant all privileges on nextcloud.* to nextcloud@'localhost' identified by 'password';
> flush privileges;
> exit

データベースの作成はこれだけで完了です。

Apacheの設定

我が家の自宅サーバーNginxではなくApacheを使っていますので、ここからは参考サイトとは少し異なる設定をします。
既にWebは稼働中ですので、以前ご紹介したAliasを利用して、新たにNextCloud配下のディレクトリをドキュメントルートとして設定します。

Apache用の設定ファイル(ここでもnextcloud.conf)を以下のディレクトリに作成して編集します。

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

記載する内容は以下のとおりです。
ディレクトリに名やパスはご自身の環境に合わせてください。

Alias /nextcloud /var/www/html/nextcloud
<Directory "/var/www/html/nextcloud/">
  Require all granted
  AllowOverride All
  Options FollowSymLinks MultiViews
</Directory>

後は、保存して設定を有効化し、Apache再起動したら完了です!

# a2ensite nextcloud
# systemctl restart apache2

NextCloudをダウンロード

やっと土台が完成しました。。
いよいよNextCloudダウンロードして展開していきます。

基本的にはNextCloudの公式サイトからダウンロードしますが、自分にはとても分かりづらかったので、参考サイトの通りにwgetコマンドダウンロードします。

以下に公開されているNextCloudサーバーの一覧があるので、最新版のURLをコピーして使います。
今回は例としてバージョン25.0.1ダウンロードします。

一旦/var/www/html/ディレクトリに保存して、Apache設定ファイルAliasで指定したディレクトリ名で解凍し、併せて権限も変更します。

### NextCloudをダウンロード
# wget https://download.nextcloud.com/server/releases/nextcloud-25.0.1.zip -P /var/www/html/

### ZIPファイルを解凍
# unzip /var/www/html/nextcloud-25.0.1.zip -d /var/www/html/

### 権限を変更
# chown -R www-data. /var/www/html/nextcloud

以上でNextCloudインストールは完了です!
お疲れ様でした。

NextCloudの初期設定

まだ終わりじゃないよ~!世の中そんなに甘くない!w
最後にブラウザでWeb画面を開き、NextCloud初期設定を行います。

例)https://<ドメイン>/nextcloud/

入力するのはこれだけ。
この後、おすすめのアプリインストールするか聞かれますが、後からでもインストールできますので、必要なアプリだけインストールしておけば良いです。

NextCloudおすすめのアプリ

しかし、このおすすめアプリが優れもの!
実は、NextCloudクラウドストレージの機能だけではありません!
おすすめのアプリだけでも以下のことができるようになります。

NextCloudおすすめのアプリ
  • カレンダーによるスケジュール管理
  • 連絡先の管理
  • メールの送受信(メーラー)
  • Officeドキュメント(Microsoft Officeと互換性あり)
  • チャット
  • ビデオ通話

有名所のMicrosoft Office一式にTeamsやZoom、もしくはLineWorks、またはSlackのような高機能アプリを全て無料で使えるので、NextCloudを導入するだけでビジネスに必要なシステムが揃っちゃいます!

管理者

もう、至れり尽くせりですね!
これらの有料級のアプリを無料で利用できます。

NextCloudインストール初期設定は以上で完了です!
お疲れ様でした!

クライアントアプリを使う

NextCloudの最大のメリットは、ブラウザさえあればあらゆるデバイスで利用できるからです。
さらに、各デバイス(OS)に対応したネイティブアプリなクライアントアプリも用意されているので、ぜひ試してみてください!

  • Windows
  • MacOS
  • Android
  • iOS
  • Linux

ダウンロードは各OSのアプリストア、または以下の公式サイトから!

【おまけ1】データディレクトリを変更する

構築した後に、やっぱりデータディレクトリを変更したいと思うこともありますよね?
著者の場合は、せっかくストレージ(ファイル)サーバーを構築しているので、NextCloudのデータも全てそちらで管理しようと思います。

上記の例では、/var/www/html/nextcloud/data/になっていますが、これを/mnt/nas/nextcloud/data/に移行します。

NextCloudデータディレクトリを変更する場合、コマンドでメンテナンスモードにして、あーだこーだやるらしいのですが、これまた面倒なので、以前ご紹介したMariaDBデータディレクトリを変更したのと同じ要領で、シンボリックリンクを利用した変更を行いたいと思います!

### 移行先ディレクトリを作成
# mkdir /mnt/nas/nextcloud

### 移行元のファイルを全てコピー
# cp -pR /var/www/html/nextcloud/data /mnt/nas/nextcloud/data

### バックアップを兼ねて既存のディレクトリ名を変更
# mv /var/www/html/nextcloud/data /var/www/html/nextcloud/data.old

### シンボリックリンク作成
# ln -s /mnt/nas/nextcloud/data /var/www/html/nextcloud/data

【おまけ2】パーミンションエラーについて

上記でdataディレクトリを変更した後、以下のようにパーミッションに関するエラーが発生して、NextCloudのWeb画面にアクセスできなくなりました。

エラー
データディレクトリは他のユーザーからも読み取ることができます
ディレクトリが他のユーザーから見えないように、パーミッションを 0770 に変更してください。

この文章の通り、パーミッション770に変更しなさいと言われているが、言われた通りにパーミッション770に変更してもエラーは解消されませんでした。。

調べてみると、PHPのコードの中にパーミッションをチェックしている箇所があるので、その中のパラメータを変更するとアクセスできるとのことでしたが、面倒なのでパーミッションをチェックしているif文を全てコメントアウトしましたw

vi /var/www/html/nextcloud/lib/private/legacy/OC_Util.php
/**
         * Check for correct file permissions of data directory
         *
         * @param string $dataDirectory
         * @return array arrays with error messages and hints
         */
        public static function checkDataDirectoryPermissions($dataDirectory) {
                if (\OC::$server->getConfig()->getSystemValue('check_data_directory_permissions', true) === false) {
                        return  [];
                }

                $perms = substr(decoct(@fileperms($dataDirectory)), -3);
                /*
                if (substr($perms, -1) !== '0') {
                        chmod($dataDirectory, 0770);
                        clearstatcache();
                        $perms = substr(decoct(@fileperms($dataDirectory)), -3);
                        if ($perms[2] !== '0') {
                                $l = \OC::$server->getL10N('lib');
                                return [[
                                        'error' => $l->t('Your data directory is readable by other users.'),
                                        'hint' => $l->t('Please change the permissions to 0770 so that the directory cannot be listed by other users.'),
                                ]];
                        }
                }
                 */
                return [];
        }

これでフル機能使えるので、めでたしめでたし。

モバイルバージョンを終了