Nextcloud を Storage Server と連携する:容量、ユーザーごとの容量制限、共有

公開日 読了時間 12 分

Nextcloud はユーザー管理、容量制限、共有を備え、Storage Server は容量を提供します。組み合わせれば、小さなサーバー 1 台で足り、テラバイト級のデータは別の場所に置ける自前のクラウドができます。

Nextcloud は、Storage Server にできないことをすべてこなします。ユーザーを管理し、それぞれに専用の容量を割り当て、フォルダーを共有し、パスワードと有効期限を付けたリンクを発行し、ファイルを HTTPS でブラウザーに配信します。一方、Nextcloud を高くつかせるのは容量です。その容量はサーバーの NVMe SSD の上にあるからです。

この 2 つを組み合わせると、実務で定着した構成になります。Nextcloud は小さなサーバーで動かし、ファイルは Storage Server に置くという形です。本記事では設定方法を 2 通り示し、どちらがどんなときに向くかを説明し、必ずつまずくポイントも挙げます。

この組み合わせがよく合う理由

Nextcloud が提供するものStorage Server が提供するもの
パスワードと二要素認証付きのユーザーアカウント容量、1 TB から 20 TB
ユーザーごとの容量制限2 段目のバックアップとしてのスナップショット
パスワードと有効期限付きの共有リンクサーバーとは別のロケーション
ログインを伴う HTTPS での配信テラバイトあたり数分の 1 のコスト
バージョン管理とごみ箱用途を分けられる 100 個のサブアカウント

多くのプロジェクトで決め手になるのは、この点です。Storage Server にはサブアカウントごとの容量制限がありません。サブアカウントは自分のディレクトリの中にとどまりますが、その中からプラン全体を埋め尽くせます。Nextcloud はまさにそこを解決します。Nextcloud では、ユーザー全員に厳格な容量制限が付くからです。

2 通りの方法と、どちらが優れているか

方法 A:Nextcloud が内蔵の SMB ドライバーまたは SFTP ドライバーで、ストレージに自分で接続します。OS 側に手を入れる必要はありません。

方法 B:ストレージを OS 側でディレクトリとしてマウントし、Nextcloud ではそのディレクトリを指す「ローカル」型の外部ストレージを設定します。

root 権限があるなら、方法 B を選んでください。ファイルシステムを経由するほうが Nextcloud の SFTP ドライバーより体感できるほど速く、とくに小さなファイルが多い場合に差が出ます。ネットワークの一時的な不調にも強いです。方法 A は、OS に手を入れられない、あるいは入れたくない場合の答えになります。

準備:専用のサブアカウント

カスタマーエリアで Nextcloud 専用のサブアカウントを作成し、専用のホームディレクトリ、たとえば /nextcloud を指定します。実際に使うプロトコルだけを許可してください。あわせて「アクセス設定」で外部からの到達可能性がオンになっているかを確認します。オフのままだと、サーバーからストレージに届きません。

本記事の例では次の値を使っていますので、ご自身の値に置き換えてください。

項目値の例
ホスト名u123456.storage.kernelhost.net
サブアカウントu123456-sub1
共有名(SMB)backup
SMB のポート445
SFTP のポート23

方法 B:マウントしてローカルストレージとして使う

まずマウントです。Debian と Ubuntu では次のとおりです。

apt install -y cifs-utils
mkdir -p /mnt/storage
printf 'username=u123456-sub1\npassword=YOUR_PASSWORD\n' > /etc/samba/storage.cred
chmod 600 /etc/samba/storage.cred

続いて /etc/fstab への登録です。これで再起動後もマウントが残ります。

//u123456.storage.kernelhost.net/backup /mnt/storage cifs credentials=/etc/samba/storage.cred,uid=www-data,gid=www-data,file_mode=0660,dir_mode=0770,seal,_netdev,nofail 0 0

重要なオプションは 3 つです。uid=www-data はウェブサーバーに書き込みを許可し、seal は SMB 3 で通信を暗号化し、_netdev と nofail は、ストレージがたまたま応答しないときにサーバーの起動が途中で止まるのを防ぎます。

mount -a
sudo -u www-data touch /mnt/storage/test && echo "書き込みは問題ありません"

そのあと Nextcloud でアプリ「外部ストレージサポート」を有効にし、ストレージを登録します。画面から行う場合は「管理」の「外部ストレージ」で、コマンドラインから行う場合は次のとおりです。

sudo -u www-data php occ app:enable files_external
sudo -u www-data php occ files_external:create データ local null::null -c datadir=/mnt/storage
sudo -u www-data php occ files_external:list

これで「データ」フォルダーが、許可したユーザーに表示されます。許可はユーザー単位またはグループ単位で設定できるので、全員に全部を見せる必要はありません。

方法 A:Nextcloud に直接外部ストレージを登録する

root 権限がなくても、マウントせずに実現できます。SMB を使うには、対応する PHP 拡張が必要です。

apt install -y smbclient php-smbclient
systemctl restart php8.3-fpm

そのうえで「管理」の「外部ストレージ」に項目を追加します。

項目値
フォルダー名データ
外部ストレージSMB / CIFS
ホストu123456.storage.kernelhost.net
共有backup
リモートサブフォルダーnextcloud
ユーザー名u123456-sub1
パスワードサブアカウントのパスワード

SFTP を使う場合は、代わりに種類として「SFTP」を選び、ホストに u123456.storage.kernelhost.net、ポートに 23 を入力します。この方法で最も多いつまずきがここです。Nextcloud は 22 を提案しますが、当社のストレージが待ち受けるのは 23 です。

ユーザーごとに容量制限を割り当てる

ここからが、この構成すべての理由になる部分です。「管理」の「ユーザー」で、アカウントごとに容量、たとえば 50 GB を入力します。コマンドラインから行う場合は次のとおりです。

sudo -u www-data php occ user:setting photographer1 files quota "50 GB"

Nextcloud はこの値に、バージョンとごみ箱の分も含めて計算します。それが正しい挙動ではあるのですが、意外に思われがちです。50 GB を割り当てられて 50 GB をアップロードした人は、古いバージョンのせいで思ったより早く上限に近づきます。追加より差し替えが多いアカウントでは、バージョンの保持期間を制限しておくと効果があります。

自分のウェブサイト向けの共有リンク

Nextcloud から見れば、外部ストレージはほかのフォルダーと変わらないので、共有もそのまま機能します。パスワードと有効期限を付けたリンクは 3 回のクリックで作成でき、ファイルはストレージから直接ではなく Nextcloud 経由で配信されます。つまり、ストレージの認証情報がサーバーの外に出ることはありません。

これこそ、Storage Server だけでは足りない部品です。ダウンロードページのあるウェブサイトを運営しているなら、ユーザー管理、権限、配信をまとめて手に入れられます。自分でプログラムを書く必要はありません。Nextcloud を使わない場合にどうなるかは、Storage Server を自分のウェブサイトで使うで解説しています。

必ずつまずく 4 つのポイント

  • データディレクトリはストレージに置かないでください。技術的には可能ですが、実務では危険です。Nextcloud はそこにロックファイルや中間データも書き込むため、ネットワークが一瞬途切れるだけでインスタンス全体が止まります。外部ストレージなら、障害の影響はそのフォルダー 1 つだけにとどまります。
  • データベースはローカルに残します。これは例外なしです。ストレージに置くのはファイルであって、それ以外は置きません。
  • Redis を設定してください。ファイルロック用のキャッシュがないと、外部ストレージを使う Nextcloud は体感できるほど遅くなります。ロックのたびにデータベースを経由するからです。
  • ポートは 22 ではなく 23 です。SFTP では Nextcloud が 22 を提案します。当社のストレージが待ち受けるのは 23 で、このときのエラーメッセージはあまり役に立ちません。

どのサーバーとどのプランを選ぶか

Nextcloud 自体には小さなマシンで十分です。ファイルは別の場所にあり、サーバーは管理だけを担います。数人から数十人程度のアクティブユーザーなら、Redis が動いていてバックグラウンド実行が設定済みであれば、RAM 4 GB から 8 GB で足ります。その手順は Nextcloud を自分のサーバーにインストールするで解説しています。

ストレージ側は、必要な容量で選びます。

プラン容量スナップショット料金
Storage-11 TB手動 10 個と自動 10 個9.99 EUR
Storage-25 TB手動 20 個と自動 20 個29.99 EUR
Storage-310 TB手動 30 個と自動 30 個39.99 EUR
Storage-420 TB手動 40 個と自動 40 個69.99 EUR

すべての Storage Server はドイツに設置されており、SMB、SFTP、WebDAV などに対応し、サブアカウントを 100 個まで作成でき、スナップショットも備えています。初期費用なし、プリペイド方式、最低契約期間なしです。必要な容量が増えたら、データに手を触れずに上位プランへ移行できます。

よくあるご質問

大きなディスクを積んだサーバー 1 台で済ませては駄目なのですか?
NVMe SSD を積んだサーバーのディスク容量は、何倍もの費用がかかるからです。Nextcloud 自体が必要とする容量と性能はごくわずかで、容量を占めるのはファイルです。そのため、小さなサーバーと Storage Server の組み合わせは、大きなディスクを積んだサーバーより通常はかなり安く済みます。
SMB と SFTP のどちらを使うべきですか?
Nextcloud のサーバーで root 権限を使えるなら、ストレージを SMB でファイルシステムにマウントし、Nextcloud ではそのディレクトリをローカルの外部ストレージとして登録してください。Nextcloud の SFTP ドライバーより高速で安定しています。SFTP ドライバーは、小さなファイルが多いと体感できるほど遅くなります。
ユーザーごとに容量を割り当てられますか?
はい、まさにそれがこの構成を採る理由です。Storage Server 自体にはサブアカウントごとの容量制限がありませんが、Nextcloud にはあります。ユーザー管理でアカウントごとに容量を割り当てれば、Nextcloud がそれを強制します。
外部ストレージにせず、データを直接ストレージに置けますか?
技術的には可能で、Nextcloud のデータディレクトリをマウントしたストレージ上に置くことになります。ただしおすすめはしません。Nextcloud はそこにロックファイル、サムネイル、中間データも書き込むため、ネットワークが一瞬途切れるだけでインスタンス全体が止まります。外部ストレージなら、障害の影響は該当するフォルダーだけにとどまります。
ストレージ上のファイルでも共有リンクは使えますか?
はい。Nextcloud から見れば、外部ストレージはほかのフォルダーと変わりません。パスワードと有効期限を付けた共有も同じように機能し、ファイルはストレージから直接ではなく Nextcloud 経由で配信されます。
速度はどのくらいですか?
大きなファイルでは、制限になるのはストレージではなくお使いのサーバーの回線です。小さなファイルが多い場合はアクセスごとにネットワークの遅延が加わるため、サムネイルは外部ストレージではなく Nextcloud のローカルキャッシュに置いてください。
ストレージに一時的に到達できなくなったら、どうなりますか?
外部ストレージとして登録してあれば、Nextcloud はそのフォルダーを利用できないと表示し、ほかの部分は動き続けます。一方、データディレクトリ全体をそこに置いていると、インスタンスが止まります。これが、外部ストレージ方式を選ぶ最大の理由です。
ストレージ上にデータベースは必要ですか?
いいえ、決して置かないでください。データベースはサーバー上の高速なローカルストレージに残します。Storage Server に置くのはファイルだけです。
小さなサーバーで何人のユーザーをさばけますか?
数人から数十人程度のアクティブユーザーなら、Redis と定期的なバックグラウンド実行を設定してあれば、RAM 4 GB から 8 GB のサーバーで問題なく足ります。ファイルはいずれにせよ別の場所にあり、サーバーは管理だけを担うからです。
この組み合わせの費用はどのくらいですか?
Nextcloud 用の小さなサーバー 1 台と、1 TB で月額 9.99 ユーロからの Storage Server です。5 TB の Storage-2 は 29.99、10 TB の Storage-3 は 39.99、20 TB の Storage-4 は 69.99 です。いずれも初期費用なし、プリペイド方式で、最低契約期間もありません。

Nextcloud Storage Server Externer Speicher SMB SFTP Quota Freigaben