リモート開発メインのソフトウェア開発企業のエンジニアブログです

Dropbox 代替の Nextcloud を ConoHa VPS で使用する

はじめに

Nextcloud とは

Nextcloud とは、オープンソースの Dropbox みたいなソフトです。自前のサーバーに Nextcloud サーバーをインストールし、PC やスマホの Nextcloud クライアントからアクセスする形です。詳しくは以下の公式サイトをご覧下さい。

Nextcloud

今回やりたいこと

やりたいことは、Nextcloud をセットアップして、社内メンバーで使うファイル置き場として使う事です。

以下、要件です。

  • ファイルの種類はテキスト、Office ファイル、音声、動画など
  • ファイルサイズは結構大きいものがある(〜100MB)
  • 使う人数はとりあえず数人(メンバー全員が使うわけではない)
  • 現在の合計データ量は数十GB

なぜ Nextcloud か

今まで Dropbox の無料版を使っていましたが、容量が足りなくなりました。有料のプランを検討しましたが、個人向けプランもビジネス向けプランも、急に値段が高くなります。2TB とか 3TB も要らないので、もう少し安くして欲しいです。

Box は 550円/ユーザー/月 から開始なので、Dropbox より随分使いやすい価格体系ですし、機能も Dropbox より豊富です。

Box Pricing for Businesses & Individuals | Box US

ただ、せっかくなので何か新しいものを試してみたいと思って検索したところ、Nextcloud を知ったので、使ってみる事にしました。

なぜ ConoHa VPS か

Nextcloud のドキュメントを眺めたところ、結構セットアップが面倒くさそうだったので、WordPress のワンクリックインストール(多くのレンタルサーバー・VPS が提供している、ワンクリックで必要なソフトのインストール・セットアップが出来る仕組み)みたいなものをどっかで提供していないか、と調べたところ、以下の2つを見つけました。

この2つから、値段・必要な機能等を考えて、ConoHa VPS を使う事にしました。

Nextcloud のセットアップ

ここからは手順をざっと書いていきます。

インストール

まずは、ConoHa の管理画面からサーバーを追加する際に、スタートアップスクリプトで Nextcloud を選択します。詳しくはマニュアルを参照して下さい。

スタートアップスクリプトを使ってサーバーを追加する|ConoHa VPSサポート

そうすると、 http://<サーバーのIPアドレス>/nextcloud で Nextcloud にアクセス出来るようになります。その後は、画面に従って管理ユーザーの作成などを行えば、最低限使えるようになります。簡単ですね。

ちなみに、ConoHa のマニュアルなどには書かれていないようですが、サーバーの /root/nextcloud-configs というファイルに、自動で作成された MySQL のユーザー名・パスワードなどが書かれています。

VirtualHost の設定

http://<サーバーのIPアドレス>/nextcloud でアクセスするよりはホスト名でアクセスしたいので、VirtualHost の設定をします。

CentOS なので、/etc/httpd/conf.d/host.example.com.conf というようなファイルを以下の内容で作成し、service httpd restart を実行します。

<VirtualHost *:80>
    ServerName host.example.com
    DocumentRoot /var/www/html
    ErrorLog /var/log/httpd/host.example.com-error_log
    CustomLog /var/log/httpd/host.example.comt-access_log combined
</VirtualHost>

(DNS の設定はされている前提です。)

SSL (Let’s Encrypt) の設定

ConoHa では、SSL の設定をするスタートアップスクリプトもあるのですが、複数のスタートアップスクリプトを併用する事は出来ないようなので、SSL 証明書(Let’s Encrypt)の取得や設定は自分でやります。とは言え、Certbot や dehydrated を使えば簡単にできますし、ネット上に情報が沢山あるので、ここでは紹介しません。

.htaccess を有効にする

Nextcloud の管理画面にアクセスすると、現状の設定内容などを調べて、色々アドバイスをしてくれるのですが、その中の1つに「このままだと Nextcloud にアップロードしたファイルに誰でもアクセス出来てしまう」というようなメッセージがありました。

Apache の設定に以下を追加して再起動すると、 /var/www/html/nextcloud/data/.htaccess の設定が有効になり、上の警告も消えます。

    <Directory /var/www/html/nextcloud>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

Nextcloud のアップグレード

ここまでで、Nextcloud を普通に使えるようになったのですが、インストールされているバージョンは 12 というかなり古いもののようなので、ここから最新の 16 までアップグレードしていきます。

とはいえ、基本的には画面から行えるので、そこまで大変ではありません。

12 -> 13 は画面から

管理画面からアップグレードを行って下さい。詳しくは以下のドキュメントを参照して下さい。

Upgrade via built-in updater — Nextcloud 12 Server Administration Manual 12 documentation

13 -> 14 は、PHP のアップグレードが必要

ConoHa の Nextcloud スタートアップスクリプトでインストールすると、PHP は 5.6 がインストールされますが、Nextcloud 14 で、PHP のバージョン要件が変わったようですので、まずは PHP をアップグレードします。

最初にインストールされているパッケージは以下の通りです。

php56u-common-5.6.40-1.ius.el7.x86_64
php56u-mysqlnd-5.6.40-1.ius.el7.x86_64
php56u-xml-5.6.40-1.ius.el7.x86_64
php56u-cli-5.6.40-1.ius.el7.x86_64
php56u-pear-1.10.5-1.ius.el7.noarch
php56u-pdo-5.6.40-1.ius.el7.x86_64
php56u-pecl-jsonc-devel-1.3.10-2.ius.el7.x86_64
php56u-5.6.40-1.ius.el7.x86_64
php56u-gd-5.6.40-1.ius.el7.x86_64
php56u-mbstring-5.6.40-1.ius.el7.x86_64
php56u-process-5.6.40-1.ius.el7.x86_64
php56u-pecl-jsonc-1.3.10-2.ius.el7.x86_64
php56u-devel-5.6.40-1.ius.el7.x86_64
php56u-mcrypt-5.6.40-1.ius.el7.x86_64
php56u-imap-5.6.40-1.ius.el7.x86_64

これを全部削除して、PHP 7.2 をインストールします。7.3 ではダメなので注意して下さい。

# PHP 5.6 の削除
rpm -e $(rpm -qa 'php56*')
# PHP 7.2 のインストール
yum install mod_php72u php72u-mysqlnd php72u-xml php72u-cli php72u-pdo php72u-gd php72u-mbstring php72u-process php72u-json  php72u-imap

PHP 5.6 -> 7.2 にあたって、いくつかのパッケージは無くなっていたりしていることに注意して下さい。

その後、管理画面より Nextcloud を 14 にアップグレードして下さい。

14 -> 15 は画面から+MySQL の設定変更

14 から 15 へのアップグレードも管理画面から行えますが、アップグレード後の管理画面で、設定内容に関する警告がいくつか出ていると思います。そのうち、MySQL での utf8mb4 関連のものにまずは対処します。(utf8mb4 が何なのかが分からない方は、検索をお願いします。)

Nextcloud のドキュメントは以下の通りです。

Enabling MySQL 4-byte support — Nextcloud 15 Administration Manual 15 documentation

やることとしては、まず /etc/my.cnf に以下を追記します。

[mysqld]
innodb_large_prefix=true
innodb_file_format=barracuda
innodb_file_per_table=1

次に service mariadb restart で MySQL (MariaDB) を再起動します。その後に、mysql コマンドで接続して、以下を実行します。

SET GLOBAL innodb_file_format=Barracuda;
ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

これで utf8mb4 の設定は完了ですが、作成済みのテーブルは utf8 のままです。幸い、 Nextcloud のスクリプトで変更出来ますので、以下の通り実行します。

cd /var/www/html/nextcloud
chmod +x occ
sudo -u apache ./occ config:system:set mysql.utf8mb4 --type boolean --value="true"
sudo -u apache ./occ maintenance:repair

その他、MySQL のテーブルにインデックスが貼られていないという警告も、ついでにこの時点で直しておきましょう。

sudo -u apache ./occ db:add-missing-indices

15 -> 16 は画面で

15 -> 16 も管理画面から行えます。

その他の細かい設定

その他、管理画面に出ていた細かい警告を修正しました。

/etc/php.ini でメモリ設定を変更

memory_limit = 512M

推奨パッケージのインストールと、DBの型の変更

yum install php72u-intl
sudo -u apache ./occ db:convert-filecache-bigint

細かい警告はまだ出ていますが、ここまでで大体使える状態になっていると思います。

高度な話題

外部の認証機構を使う

デフォルトだと、Nextcloud サーバー内の DB でユーザーを管理しますが、外部で管理したいというのは良くあるニーズです。定番の LDAP に加え、IMAP, SMB, FTP, SSH, WebDAV, 標準認証, あるいは XMPP (詳しくはよく分かってません)といった認証方式に対応しているようです。

今回は、諸々の事情により、メールサーバーに登録されているユーザーが Nextcloud にもアクセス出来るようにする必要があったため、IMAP を使用しました。具体的な設定方法は以下の通りです。

cd /var/www/html/nextcloud
sudo -u apache ./occ app:enable user_external

/var/www/html/nextcloud/config/config.php に、以下のような記述を追記します。各パラメーターの意味は、上述の user_external のページをご参照下さい。

'user_backends' => array(
    array(
        'class' => 'OC_User_IMAP',
        'arguments' => array(
            '127.0.0.1', 993, 'ssl', 'example.com', true, false
        ),
    ),
),

その後、念のため、 apache を再起動して完了です。

冗長性の確保

業務のファイルを扱うので冗長性を確保したいというのも良くある要望です。(どの程度の冗長性が必要か、どういった事象を考慮するか、とかその辺の細かい話はおいておくとして、)これに関して少し調べた結果、簡単に実現する方法は無さそうです。

考えられる案としては、以下のような稼働系-待機系パターンでしょうか。

  • インスタンスをもう1つ用意する(イメージ作成 -> 復元等で簡単に実現できる)
  • DB は、MySQL のレプリケーションを使用する
  • ファイルの保管場所はローカルディスクでは無く、共有ディスクあるいは S3 にする
  • 稼働系が落ちたら、手動で切り替える

ちなみに、今回はそこまでの可用性は必要無いので、とりあえず ConoHa の自動バックアップ機能を設定して、最低限の備えとする事にしました。

自動バックアップ|VPSならConoHa

Nextcloud クライアント

ここまではずっとサーバー側の話をしてきましたが、Nextcloud を使うには、(Dropbox と同様に)各自の PC にクライアントソフトを入れる必要があります。

Mac 版は今回の環境では動かず → 今は OK

検証のため、Windows と Mac のクライアントソフトを両方使ってみましたが、Mac の場合は(恐らく)バグのため上手く動作しませんでした。バグ報告はしておきましたが、2019/8/13 現在で 681 個の issue がオープンされているので、恐らく当面は修正されない気がします。

Sync fails when Nextcloud isn’t installed in the root folder · Issue #1365 · nextcloud/desktop

上の issue に書いた通り、Nextcloud がサーバーのサブディレクトリに配置されていると起きる問題のようで、ルートディレクトリ直下にインストールすれば問題が起きないと思います。ただ、ConoHa と「さくら」のどちらとも、インストールスクリプトを使うと http://ホスト名/nextcloud にインストールされてしまうので、Mac ユーザーが多い環境では、スタートアップスクリプトではなくマニュアルで Nextcloud をインストールする必要があります。

(2021年6月29日追記)1年以上前にこの問題は修正されたようです。GitHub の issue は放置されたままですが。

Windows 版は今のところ問題なし

Windows の場合は今のところ大きな問題は出ていません。

まとめ

Nextcloud は、オープンソース版の Dropbox のようなものです。大きな組織では素直に Box や Dropbox を使うのがベストプラクティスだと思いますが、数人程度の組織・チームだとそこまで容量・機能が必要で無い事も多いので、Nextcloud を自前のサーバーに入れて使うというのも1つの選択肢です。

Nextcloud のセットアップは手動でやると若干面倒そうなので、ConoHa VPS やさくらのVPS が提供しているスタートアップスクリプトを上手く活用するのが良いのですが、ConoHa のスタートアップスクリプトでインストールされるのは古いバージョンなので注意が必要です。海外の VPS などでも Nextcloud が簡単に使えるようになっているところがいっぱいあるので、以下のページから探してみて下さい。

Providers – Nextcloud

← 前の投稿

(小ネタ)GitHubDarkを使ってGitHubをダークモードなUIにする

次の投稿 →

package.jsonとpackage-lock.jsonの運用方法について

コメントを残す