レンタルサーバーのColorfulBoxで容量が余っていたので、興味本位でNextcloudを導入してみました。素人なりに、何とか運用できそうな状態までは設定できたので、その際に気づいたことを備忘録として残しておきます。
ColorfulBoxとNextcloudの相性について
ColorfulBox はサーバー管理用のコントロールパネルとして cPanel を採用しており、ここから Nextcloud をかんたんに導入することができます。インストール方法についてのサポートページもあります(以下)。
実際にやってみたところ、操作は WordPress の導入と同じような感じで、本当に 5 分くらいでもできます。
Nextcloud の設定の多くは、ブラウザで Nextcloud にログインすることにより、日本語のインターフェイスで操作することができます。ユーザー管理や権限の付与、メールサーバーや通知の設定、最新版へのアップデート、ログの確認などは、ブラウザから実行できます。
しかし、ただ自動インストールしただけの状態では、セキュリティとセットアップに関する警告がいくつも表示されます(Nextcloud ログイン後、右上のアイコン →「管理者設定」→「概要」ページで確認できます)。
これらの警告を解決する方法は、検索すればだいたいヒントが見つかりますが、Nextcloud はさまざまな環境で導入されていて、レンタルサーバーに該当する情報は一握りです。また、その中で ColorfulBox に該当する情報はさらに限られるので、適用できる方法を見つけるのには少し苦労するケースもありました(各種の解決策は以下に紹介します)。
なお、サーバーの設定は通常、SSH 接続してコマンド操作を伴うものが多くあります。Docker を使うという情報もよくみかけます。しかし、Docker や SSH 接続、コマンドでの操作は素人の私には敷居が高いものです。が、試行錯誤したところ、ColorfulBox の cPanel ではコマンドを使わなくても大体の設定ができることがわかりました(Windows から SSH 接続できるようにはなりましたが、結局使っていません)。
cPanel の「ファイル マネージャー」ではほとんどのファイル操作が可能ですし、いざとなれば「Terminal」でコマンドライン操作もできるからです。
TIPS:「ファイル マネージャー」の初期設定では隠しファイルが表示されませんが、「設定」で「非表示のファイルの表示」をオンにすると、.htaccess などのファイルも表示され、編集できるようになります。
「phpMyAdmin」でデータベースの操作もできるし、「Cron ジョブ」でバックグラウンドジョブを設定することもできました。
そんなわけで、ColorfulBox は Nextcloud の運用にも向いているのではないかと思われます。
ColorfulBoxにNextcloudを導入する際の注意事項
以下、インストールやセットアップに関して気づいたことを雑多に書いておきます。
ColorfulBox で Nextcloud を導入するには PHP のバージョンに注意
Nextcloud のシステム要件はこちらのページに記載されています。
現時点(Nextcloud 28)では PHP 8.1-8.3 が必要なので、古い場合はアップグレードする必要があります(アップグレードしないとNextcloudをインストールできないかどうかなど、詳細は忘れました)。
ColorfulBox では、cPanel の「MultiPHP マネージャー」からドメインごとに PHP のバージョンを変更できます:
サブディレクトリよりドメイン直下にインストールするほうが良い?
ColorfulBox の cPanel から Installatron Applications Installer を使用してインストールしようとすると、初期設定の「ロケーション」ではオプションの「ディレクトリ」が「files」に設定されています。
この設定のままインストールすると、Nextcloud の URL は「https://xxxxxx.jp/files/」となります。
別にこれでも問題ないのですが、後からちょっとした問題に気が付きました。というのも、Nextcloud では以下のページに URL を入力することでセキュリティレベルをチェックすることができるのですが、
ここで私の Nextcloud をチェックしたところ、評価(Rating)が A となり、最高の A+ になりません。引っ掛かった問題箇所は1つで、「__Host-Prefix」という項目です。以下の説明が表示されます。
The __Host prefix mitigates cookie injection vulnerabilities within potential third-party software sharing the same second level domain. It is an additional hardening on top of ‘normal’ same-site cookies.
https://scan.nextcloud.com
この修正方法を調べたところ、どうやらサブディレクトリにインストールした場合には避けられないようです(参考英語ページ)。セキュリティ上の大きなリスクではなさそうですが、最高の「A+」のセキュリティが欲しい場合はドメイン直下にインストールしたほうがよさそうです(インストール時、「ディレクトリ(オプション)」フィールドを空白にする)。
かといって public_html 下に直接ファイルが置かれるのは嫌なので、サブドメインを作成してその直下にインストールするというのも一手かもしれません。
ColorfulBox での Nextcloud 導入のトラブルシューティング
ColorfulBox に Nextcloud をインストールすると、初期状態では次のように「セキュリティ&セットアップ警告」が多数表示されます。
これらの警告のうち、色付きのものは特に重要そうなので、これを解消しないと良い気持ちがしません。
以下では、素人ながらエラーや警告をつぶした方法を備忘録として載せておきます。ファイルを編集する際はバックアップをとり、問題が起きたら戻せるようにします。
Nextcloud でテキストファイルが文字化けする問題の解決法
Nextcloud で新規のテキストファイルを作成すると、「.md」ファイルが作成されます。これはマークダウン形式で、ブラウザ上では見やすく便利なのですが、Windows環境などではエディタを入れないと見れないなど、ちょっと不便です。
そこで普通の「.txt」のテキストファイルを作成すると、文字化けが発生します。
この解決方法は以下が参考になりました。
修正するファイルは、ColorfulBox の場合も以下の場所にありました。
public_html/<nextcloudディレクトリ名>/apps/text/lib/Service/EncodingService.php
cPanel の「ファイルマネージャー」でファイルを選択して「編集」をクリックし、以下のように「SJIS-win」と「SJIS」の 2 項目を追加すれば解決しました。
class EncodingService {
public const COMMON_ENCODINGS = [ 'SJIS-win', 'SJIS', 'UTF-8', 'GB2312', 'GBK', 'BIG-5', 'SJIS-win', 'EUC-JP', 'Windows-1252', 'ISO-8859-15', 'ISO-8859-1', 'ASCII'];
エンコードを変更してしまったりすると問題が起きるので、実際に編集する前に、ダウンロードしてバックアップをとっておくことをお勧めします。
ちなみにこのファイル変更は Nextcloud をアップデートすると戻ってしまうようなので、注意が必要です。
Strict-Transport-Security “HTTP ヘッダーの秒数が少なくとも”15552000” に設定されていません。
Strict-Transport-Security “HTTP ヘッダーの秒数が少なくとも”15552000” に設定されていません。セキュリティを強化するには、セキュリティのヒント↗で説明されているようにHSTSを有効にすることをお勧めします。
これにはさまざまな方法がありますが、ColorfulBox の場合、cPanel の「ファイルマネージャー」でpublic_html/<nextcloudディレクトリ名> 下の .htaccess ファイルを編集し、末尾に以下の行を追加したら警告が無くなりました。
Header set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
以下のページを参考にしました。
PHP OPcacheモジュールが正しく設定されていません。
PHP OPcacheモジュールが正しく設定されていません。 OPcache のインターン化文字列バッファがほぼいっぱいです。繰り返しの文字列を効果的にキャッシュするために、PHPの設定に “opcache.interned_strings_buffer” を “8” よりも高い値で設定することをおすすめします。
このエラーには苦戦しました。いろいろ調べると、opcache.ini の設定を変更すればよさそうですが、ColofulBox の「ファイルマネージャー」ではこのファイルを見つけられませんでした。
PHP の設定は、以下のコードを書いた適当な .php ファイルをサーバーに置いてブラウザで表示することにより、チェックすることができます。
<?php phpinfo(); ?>
これで確認したところ、ColorfulBox では OPcache はデフォルトで有効になっていて、opcache.interned_strings_buffer は 8 に設定されていました。
OPcache の推奨の設定は調べるといろいろでてきますが、よくわからないので放置していたら警告が自然に消えました。と思ったらまた発生したり…
ColofulBox の php.ini の設定は、以下の方法で cPanel の「MultiPHP INI Editor」から編集できるようです(サポート外)。
しかし、ここから opcache.interned_strings_buffer などの値を変更しようとしても変更が反映されなかったため、変更する権限がないのかもしれません。共有のレンタルサーバーなので仕方ありません。
Nextcloud のマニュアルによると、OPcache はパフォーマンス向上のためのもので、デフォルトの OPcache 設定で通常は十分であるとのこと。キャッシュサイズの上限に対して 90% 以上になると警告が表示される仕様のようですが、設定を変更できないのであれば放置してもよいのかなと勝手に解釈しました。
参考:”Enable PHP OPcache” (Nextcloud マニュアル)
サーバーにはメンテナンスウィンドウの開始時間が設定されていません。
cPanel の「ファイルマネージャー」で、public_html/<nextcloudディレクトリ名>/config/config.php を編集し、次の3行目の一行を追加したら解消されました。
$CONFIG = array (
// 中略
'maintenance_window_start' => 1,
);
タイムゾーンの設定との関連がよくわからず、何時になるのか不明ですが、とりあえず警告は消えました。
参考:”Background jobs” (Nextcloud マニュアル)
ついでに、config.php で以下の2行も追加しておくと、次の2つの警告が消えます:「ご使用のシステムには、デフォルトの電話地域が設定されていません。~」、「メモリキャッシュが設定されていません。パフォーマンスを向上させるため、利用可能であればメモリキャッシュを設定してください。」
$CONFIG = array (
// 中略
'maintenance_window_start' => 1,
'default_phone_region' => 'JP',
'memcache.local' => '\OC\Memcache\APCu',
);
参考:”Memory caching” (Nextcloud マニュアル)
Webサーバーで “/.well-known/webfinger” が解決されるように正しく設定されていません。
以下の警告が表示されていました。
Webサーバーで “/.well-known/webfinger” が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。
Webサーバーで “/.well-known/nodeinfo” が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。
Webサーバーで “/.well-known/caldav” が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。
Webサーバーで “/.well-known/carddav” が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。
これらの警告に対しては、.htaccess に以下のコードを追加すると解決しました。ここでの .htaccess は Nextcloud のインストールディレクトリ下のファイルではなく、Web サーバーのドキュメントルート(public_html)にある .htaccess である必要があります。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^\.well-known/carddav /<Nextcloudディレクトリ名>/remote.php/dav [R=301,L]
RewriteRule ^\.well-known/caldav /<Nextcloudディレクトリ名>/remote.php/dav [R=301,L]
RewriteRule ^\.well-known/webfinger /<Nextcloudディレクトリ名>/index.php/.well-known/webfinger [R=301,L]
RewriteRule ^\.well-known/nodeinfo /<Nextcloudディレクトリ名>/index.php/.well-known/nodeinfo [R=301,L]
</IfModule>
参考:”Service discovery” (Nextcloud マニュアル)
追記:Nextcloud 29 くらいから、上記の3番目の警告の英語版「Your web server is not properly set up to resolve `.well-known` URLs, failed on: `/.well-known/caldav`」が表示されるようになりました。この解決方法はわかりませんでした。
Cronによるバックグラウンドジョブの実行を設定できない場合
Nextcloud ログイン後の右上のアイコン →「管理者設定」→「基本設定」に「バックグラウンドジョブ」という項目があり、デフォルトでは「Ajax」が設定されていますが、推奨は「Cron」とのこと。
しかし、ただ「Cron」を選択するだけでは設定は完了しません。「最終ジョブ実行は X時間前 です。何か問題が発生しています。」や「最後のバックグラウンドジョブの実行は X 時間前 でした。何かがおかしいようです。」などというメッセージが表示されてしまいます。
5分ごとに cron.php ファイルを実行するように設定する必要があります。
この設定は、ColorfulBox では cPanel の「Cron ジョブ」から設定できます。
私の場合、「新しい cron ジョブの追加」で、「共通設定」に5分間に1回を選択し、以下のコードを入力しました。
/usr/local/bin/ea-php82 --define apc.enable_cli=1 /home/xcneouzf/public_html/<Nextcloudディレクトリ名>/cron.php
※「ea-php82」の部分の PHP のバージョンは設定環境によって異なる場合があるのでご注意ください。
マニュアルによると「–define apc.enable_cli=1」は構成によっては必要になるとのことでしたが、最初はなしで設定したところうまく行かなかったので、追加したところ解決しました。
これで無事実行できるようになったようで、Nextcloudの基本設定画面でも「最終ジョブ実行は 2分前 です。」などと表示されるようになりました。
参考:”Background jobs” (Nextcloud マニュアル)
Nextcloudでファイルやフォルダを削除できない場合
Nextcloud で大きなフォルダを削除しようとしたら、エラーが発生して削除できないことがありました。
同様の問題の対応として、以下のページが参考になりました。
ColorfulBox の場合、cPanel で phpMyAdmin を使用し、Nextcloud で使っているデータベース内でフィルタを使用し、「oc_file_locks」を探したところ、見つかりません。
代わりに「file_locks」でフィルタすると、「ple9_file_locks」という名前なら多数ヒットします。テーブル接頭辞が「oc_」(ownCloud が由来?)とは限らないのでしょう。
これを全選択し、削除したら、無事(?)フォルダ等を削除できるようになっていました。仕組みがよくわからないので削除するのは怖いのですが、今のところ悪影響は見つかりません。
参考)ColorfulBox で解決を諦めた Nextcloud の警告
以下の警告については、権限が限られるレンタルサーバーでは修正ができない(できても難しい)と判断し、解決を見送っています。使用上、特に大きな問題はない警告と思います(たぶん)。
- データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 “occ db:add-missing-indices”を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。 オプションのインデックス “oc_npushhash_di” がテーブル “notifications_pushhash”にありません
- PHP OPcacheモジュールが正しく設定されていません。 OPcache のインターン化文字列バッファがほぼいっぱいです。繰り返しの文字列を効果的にキャッシュするために、PHPの設定に “opcache.interned_strings_buffer” を “8” よりも高い値で設定することをおすすめします。
- データベースがトランザクションファイルロックに使われています。パフォーマンスをあげるには、可能であればメモリーのキャッシュを設定してください。
- このインスタンスには、いくつかの推奨 PHP モジュールがありません。パフォーマンスと互換性を向上させるために、これらをインストールすることを強くお勧めします: – gmp WebAuthn パスワードレスログインと、SFTPストレージ用 詳細については、ドキュメント↗を参照してください。