ふとアップグレードしたついでにセキュリティ&セットアップ警告を確認すると一杯警告が…
PHPのメモリ制限は推奨値512MBを下回ります。
え!エラーでアプリ落ちなくなって、今の今まで落ちたことも遅くなったことも無いんだけどなぁ。あれ?php --ini
の結果などは無視して、/etc/php/7.3/cli/php.ini
ではなく/etc/php/7.4/apache2/php.ini
の方を修正したら消えた。
メモリキャッシュが設定されていません。
メモリキャッシュが設定されていません。可能であれば、パフォーマンスを向上するため、memcacheを設定してください。より詳しい情報はドキュメントで参照できます。
Memory cachingを参照に設定する。
memcached
インストール
sudo apt install memcached
sudo apt install php7.4-memcached
/etc/php/7.4/cli/conf.d/10-opcache.ini
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
を追記。
こちらの場合/etc/php/7.4/cli/conf.d/10-opcache.ini
も/etc/php/7.4/apache2/conf.d/10-opcache.ini
もetc/php/7.4/mods-available/opcache.ini
にリンクしているので、どちらを編集しても同じ。
memcached
の確認
$ ps ax | grep memcached
6033 ? Ssl 0:01 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1 -P /var/run/memcached/memcached.pid
動いてるっぽい。
config.php
'memcache.distributed' => '\OC\Memcache\Memcached',
を追記。が、それでも警告は消えず。
Memory cachingを読み返すと、
If you enable only a distributed cache in your config.php (memcache.distributed) and not a local cache (memcache.local) you will still see the cache warning. config.php(memcache.distributed)で分散キャッシュのみを有効にし、ローカルキャッシュ(memcache.local)を有効にしない場合でも、キャッシュの警告が表示されます。
なるほど。ローカルキャッシュも有効にしろと。
APCu is a data cache, and it is available in most Linux distributions. On Red Hat/CentOS/Fedora systems install php-pecl-apcu. On Debian/Ubuntu/Mint systems install php-apcu.
とあるので、APCuをインストール。
sudo apt install php7.4-apcu
config.php
'memcache.local' => '\OC\Memcache\APCu',
を追記。
データベースの警告
- データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 “occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。
- The database is missing some primary keys. Due to the fact that adding primary keys on big tables could take some time they were not added automatically. By running “occ db:add-missing-primary-keys” those missing primary keys could be added manually while the instance keeps running.
- データベースにはオプションのカラムがいくつかありません。大きなテーブルにカラムを追加するには時間がかかるため、オプションのカラムは自動的に追加されませんでした。“occ db:add-missing-columns"を実行することで、不足しているカラムはインスタンスの実行中に手動で追加することができます。カラムが追加されると、応答性や使い勝手が改善される可能性があります。
- データベース内のいくつかの列で、big intへの変換が行われていません。 大きなテーブルでカラムタイプを変更すると時間がかかることがあるため、自動的には変更されませんでした。 ‘occ db:convert-filecache-bigint’を実行することによって、それらの保留中の変更は手動で適用できます。 この操作は、インスタンスがオフラインの間に行う必要があります。 詳細についてはこれに関するドキュメントページを読んでください。
これらはコマンドで一気に解決。
cd /var/www/nextcloud
sudo -u www-data php occ db:add-missing-indices
sudo -u www-data php occ db:add-missing-primary-keys
sudo -u www-data php occ db:add-missing-columns
sudo -u www-data php occ db:convert-filecache-bigint
で解消。画面だと:
が:
となってて、そのままやると
/var/www/nextcloud$ sudo -u www-data php occ db:convert-filecache-bigint
Command "db:convert-filecache-bigint" is not defined.
Do you want to run "db:convert-filecache-bigint" instead? (yes/no) [no]:
> no
と警告されるので注意。
このインスタンスには推奨されるPHPモジュールがいくつかありません。
このインスタンスには推奨されるPHPモジュールがいくつかありません。 パフォーマンスの向上と互換性の向上のために、それらをインストールすることを強くお勧めします。
sudo apt install php7.4-bcmath
sudo apt install php7.4-gmp
インストールすれば解消。
Webサーバーは適切にホスト名 “/.well-known/caldav” が引けるように設定されていません。
Webサーバーは適切にホスト名 “/.well-known/caldav” が引けるように設定されていません。より詳しい情報については、ドキュメントを参照ください。 Webサーバーは適切にホスト名 “/.well-known/carddav” が引けるように設定されていません。より詳しい情報については、ドキュメントを参照ください。
General troubleshooting — Nextcloud 15 Administration Manual 15 documentation
これがメッチャ嵌った…いや改めていかに自分がapache
についての理解がないまま適当にやっているかを思い知らされた。
【VPS活用】 Nextcloud でクラウドストレージをつくってみた ~ サーバー構築編 ~ | カゴヤのサーバー研究室での 3.4 を参考にして上手く行った。
結果だけ書くと
/etc/apache2/sites-available/nextcloud.conf
Redirect 301 /.well-known/host-meta /nextcloud/public.php?service=host-meta
Redirect 301 /.well-known/host-meta\.json /nextcloud/public.php?service=host-meta-json
Redirect 301 /.well-known/carddav /nextcloud/remote.php/dav
Redirect 301 /.well-known/caldav /nextcloud/remote.php/dav
Redirect 301 /.well-known/webfinger /nextcloud/public.php?service=webfinger
を追記して成功した。正直言って、これで上手く行くのは分かるが、何故、下の試行が上手く行かなかったのかが分からない。
以下は試行錯誤
まずはnextcloud.confに以下を追記した。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^\.well-known/host-meta /nextcloud/public.php?service=host-meta [QSA,L]
RewriteRule ^\.well-known/host-meta\.json /nextcloud/public.php?service=host-meta-json [QSA,L]
RewriteRule ^\.well-known/webfinger /nextcloud/public.php?service=webfinger [QSA,L]
RewriteRule ^\.well-known/carddav /nextcloud/remote.php/dav [R=301,L]
RewriteRule ^\.well-known/caldav /nextcloud/remote.php/dav [R=301,L]
</IfModule>
しかし、上手くいかない…
リライトがもしや有効になっていないのか?と
/etc/apache2/mods-available/rewrite.load
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
ロードしているファイルが/etc/apache2/mods-enabled/
配下にリンクとして存在するか確認
ubuntu:~$ ls -l /etc/apache2/mods-enabled/rewrite.load
lrwxrwxrwx 1 root root 30 4月 26 2016 /etc/apache2/mods-enabled/rewrite.load -> ../mods-available/rewrite.load
されている。
万が一、されてない場合は以下コマンドで有効化する。
sudo a2enmod rewrite
有効になっているが、ちっとも上手くいかない…
初めdav
が有効化してないから?とか思いsudo a2dismod dav
してnextcloud.confをDav on
にしても変わらず…
次にドキュメントどおり
/var/www/nextcloud/.htacces を
@@ -61,12 +61,11 @@
RewriteCond %{HTTP_USER_AGENT} DavClnt
RewriteRule ^$ /remote.php/webdav/ [L,R=302]
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
- RewriteRule ^\.well-known/host-meta /public.php?service=host-meta [QSA,L]
- RewriteRule ^\.well-known/host-meta\.json /public.php?service=host-meta-json [QSA,L]
- RewriteRule ^\.well-known/webfinger /public.php?service=webfinger [QSA,L]
- RewriteRule ^\.well-known/nodeinfo /public.php?service=nodeinfo [QSA,L]
- RewriteRule ^\.well-known/carddav /remote.php/dav/ [R=301,L]
- RewriteRule ^\.well-known/caldav /remote.php/dav/ [R=301,L]
+ RewriteRule ^\.well-known/host-meta /nextcloud/public.php?service=host-meta [QSA,L]
+ RewriteRule ^\.well-known/host-meta\.json /nextcloud/public.php?service=host-meta-json [QSA,L]
+ RewriteRule ^\.well-known/webfinger /nextcloud/public.php?service=webfinger [QSA,L]
+ RewriteRule ^\.well-known/carddav /nextcloud/remote.php/dav [R=301,L]
+ RewriteRule ^\.well-known/caldav /nextcloud/remote.php/dav [R=301,L]
RewriteRule ^remote/(.*) remote.php [QSA,L]
RewriteRule ^(?:build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
RewriteCond %{REQUEST_URI} !^/\.well-known/(acme-challenge|pki-validation)/.*
とするが、それでも駄目。
でも、ブラウザで https://ホスト名/nextcloud/.well-known/carddav 飛ぶと、ちゃんとThis is the WebDAV interface. It can only be accessed by WebDAV clients such as the Nextcloud desktop sync client.
と表示される。
え、そういうことじゃないの?
[solved] .well-known/caldav check in 13.0.7 explained - 🚧 Installation - Nextcloud communityでも解決策としては
Thanks for the hint, I finally solved it - in my case the syntax of the redirect in the httpd config had to be:
Redirect 301 /.well-known/carddav https://cloud.example.com/remote.php/dav
Redirect 301 /.well-known/caldav https://cloud.example.com/remote.php/dav
としていて、その助けとして Installation on Linux — Nextcloud 13 Administration Manual 13 documentationが参考になったというのだけど、これを読んでどうして、この解決策に辿りついたのか分からず…
Ubuntu 18.04 に Nextcloud をインストール | 雑廉堂の雑記帳なんかを見ると
次の節を、/etc/apache2/sites-available/default-ssl.conf に追加。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^/\.well-known/host-meta /nextcloud/public.php?service=host-meta [QSA,L]
RewriteRule ^/\.well-known/host-meta\.json /nextcloud/public.php?service=host-meta-json [QSA,L]
RewriteRule ^/\.well-known/webfinger /nextcloud/public.php?service=webfinger [QSA,L]
RewriteRule ^/\.well-known/carddav /nextcloud/remote.php/dav/ [R=301,L]
RewriteRule ^/\.well-known/caldav /nextcloud/remote.php/dav/ [R=301,L]
</IfModule>
としているが、自分のケースではうまく行かず…
Apache Rewrite 301のキャッシュ落とし穴 | GWT Centerなどでを見ると一度間違ったリダイクレト設定をしてしまうとキャッシュされてしまうとあったので、プライベートウィンドウを開いて確認するようにしたけど、結果は変わらず。
結果、一番上の解決策で上手くいったのだけど、それだと、ブラウザから飛んだときは .htacces が先に適用されて/nextcloud/remote.php/dav
に飛ぶんだよなぁ。
チェックはOKになったけど、本当に良いのか?と思いThunderbirdのカレンダーインポート設定でやると、リダイクレトは効いてる。大丈夫なのなのかな?1iOS搭載された端末ないから、まあ、どうでもいい話なんだけどね。
とりあえず、警告は解消。そしてセキュリティも問題なし。
いやあ、いままで conf/mods/sites-available conf/mods/sites-enabled の意味、分かってなかった。有効化するために-available配下にリンク作成するのね。過去の記事をみると直にコマンドln
でリンク貼ったりしてたけど、本当は良くないのかも。今さら修正しないけど。サイトの設定なのに、conf-availableに作ってたりとデタラメすぎたな。
上記サイトのおかげで多少、理解が進んだ。
-
ただこれだとThunderbirdでは上手く同期できない。もともと https://ホスト名/nextcloud/.well-known/caldav/calendars/ユーザー名/カレンダー名/ ならちゃんと同期・表示される。 ↩︎