ubuntuにnextcloudを入れた後のトラブルシューティング（その2）

# はじめに
先般，[ubuntuにnextcloudを入れた後のトラブルシューティング（その1）](https://qiita.com/proftanaka/items/05deaf3e1e339f50027b)を記述ましたが，その続きをここでは記述します．
さて，nextcloudを構築するにあたっては，「管理者設定 -> 概要」に表示される事項に関わるトラブルシューティングが必要になります．
![スクリーンショット 2024-01-02 192144.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/773471/3ebab9bf-abb1-111c-adab-cab0ef3f6f2f.png)
そのトラブルシューティングについてのメモ書きとして残しておこうと思ったところです．

ここでは，
- 「データディレクトリやファイルがインターネットからアクセスされている可能性があります。.htaccessファイルが機能していません。データディレクトリにアクセスできないようにWebサーバーを設定するか、データディレクトリをWebサーバーのドキュメントルートの外に移動することを強くお勧めします。」
- 「Webサーバーで "/.well-known/webfinger" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。」
-　「Webサーバーで "/.well-known/nodeinfo" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。」
- 「Webサーバーで "/.well-known/caldav" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。」
- 「Webサーバーで "/.well-known/carddav" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。」
- 「メモリキャッシュが設定されていません。パフォーマンスを向上させるため、利用可能であればメモリキャッシュを設定してください。 詳細については、ドキュメント↗を参照してください。」
- 「Strict-Transport-Security "HTTP ヘッダーの秒数が少なくとも"15552000" に設定されていません。セキュリティを強化するには、セキュリティのヒント↗で説明されているようにHSTSを有効にすることをお勧めします。」
- 「OPcacheのインターン化文字列バッファーがまもなく一杯になります。全てのスクリプトをキャッシュに保管できるようにするには、opcache.interned_strings_bufferの値を8より多い値で、PHP設定に適用することを推奨します。」
- 「このインスタンスには、いくつかの推奨 PHP モジュールがありません。パフォーマンスと互換性を向上させるために、これらをインストールすることを強くお勧めします: bz2. 詳細については、ドキュメント↗を参照してください。」

について，メモ書きとして説明します．

# 前提条件
【OS】ubuntu22.04
【Webサーバ】apache
【nextcloud】ver.28
【データベース】mariadb
【php】8.1
【インストールパス】/var/www/html/nextcloud/
インストールは[「Ubuntu 22.04に Nextcloud をインストールする方法」](http://memorandum.cloud/2023/01/23/1858/)を参考に行いました．

# トラブルシューティング

## *「データディレクトリやファイルがインターネットからアクセスされている可能性があります。.htaccessファイルが機能していません。データディレクトリにアクセスできないようにWebサーバーを設定するか、データディレクトリをWebサーバーのドキュメントルートの外に移動することを強くお勧めします。」

これは，
nextcloudのインストールパス： /var/www/html/nextcloud/
サーバのドキュメントルート： /var/www/html/
の場合で発生しました．ここでは，[「NextCloudのインストール」](https://www.bigbang.mydns.jp/nextcloud-x.htm)や[「プロのインフラエンジニアが、ubuntu で、NextCloudを設定してみた。 」](https://note.com/fueaoi/n/n67510cd8fd70)さまざまな方法に示されているように，.htaccessではなく，nextcloud.confをつくる方法を採りました．
```
# vi /etc/apache2/sites-available/nextcloud.conf
```
として以下の内容を記述します．
```/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

  <IfModule mod_dav.c>
    Dav off
  </IfModule>
</Directory>
```
::: note info
最初の行はAliasが書かれていますが，ドメイン名がsrv.hoge.comの場合においてURLが
https://srv.hoge.com/nextcloud/
となる場合の記述です．
:::
そして，
```
# a2ensite nextcloud
# systemctl restart apache2
```
とすれば，このエラーは消えることでしょう．

:::note warn
a2ensite　はubuntu＋apacheにおけるもので，redhat系のlinuxではやり方が異なります．
:::

## *「Webサーバーで "/.well-known/webfinger" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。」
これは先述の nextcloud.conf に
```/etc/apache2/sites-available/nextcloud.conf
# これを最下部に加える
Redirect 301 /.well-known/webfinger /nextcloud/index.php/.well-known/webfinger
```
を最下部に書き加えます．

## *「Webサーバーで "/.well-known/nodeinfo" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。」
これは先述の nextcloud.conf に
```/etc/apache2/sites-available/nextcloud.conf
# これを最下部に加える
Redirect 301 /.well-known/nodeinfo /nextcloud/index.php/.well-known/nodeinfo
```
を最下部に書き加えます．

## *「Webサーバーで "/.well-known/caldav" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。」
これは先述の nextcloud.conf に
```/etc/apache2/sites-available/nextcloud.conf
# これを最下部に加える
Redirect 301 /.well-known/caldav /nextcloud/remote.php/dav
```
を最下部に書き加えます．

## *「Webサーバーで "/.well-known/carddav" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。」
これは先述の nextcloud.conf に
```/etc/apache2/sites-available/nextcloud.conf
# これを最下部に加える
Redirect 301 /.well-known/carddav /nextcloud/remote.php/dav
```
を最下部に書き加えます．

## nextcloud.conf
上記の.htaccessのことや，"/.well-known/*"など5つの問題解決はnextcloud.confの記述によって可能であることがわかりました．これらをまとめると，
```
# vi /etc/apache2/sites-available/nextcloud.conf
```
として
```/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

  <IfModule mod_dav.c>
    Dav off
  </IfModule>
</Directory>
Redirect 301 /.well-known/carddav /nextcloud/remote.php/dav
Redirect 301 /.well-known/caldav /nextcloud/remote.php/dav
Redirect 301 /.well-known/webfinger /nextcloud/index.php/.well-known/webfinger
Redirect 301 /.well-known/nodeinfo /nextcloud/index.php/.well-known/nodeinfo
```
と記述したあと，
```
# a2ensite nextcloud
# systemctl restart apache2
```
とすればよいのです．

::: note info
nextcloud.confの最後4行は順不同で構いません．
:::

## *「メモリキャッシュが設定されていません。パフォーマンスを向上させるため、利用可能であればメモリキャッシュを設定してください。 詳細については、ドキュメント↗を参照してください。」

これについては，[「Nextcloud の警告「メモリキャッシュが設定されていません。」」](https://ex1.m-yabe.com/archives/6293)や[「Nextcloudの警告を解消する 」](https://arimasou16.com/blog/2020/12/07/00349/)などを参考に config.php に 
'memcache.local' => '\OC\Memcache\APCu',
を書き加えることで解決可能です．

```/var/www/html/nextcloud/config/config.php
 #最後から2行目　")"のある行の上に以下の1行を加えます．
 'memcache.local' => '\OC\Memcache\APCu',
```
なお，この書き加えが済んだら，
```
# systemctl restart apache2
```
をする必要があります．

## ＊「Strict-Transport-Security "HTTP ヘッダーの秒数が少なくとも"15552000" に設定されていません。セキュリティを強化するには、セキュリティのヒント↗で説明されているようにHSTSを有効にすることをお勧めします。」

ここでは，モジュールmod_header.cを用いてconfファイルを作成することで解決できますが，ubuntuの場合にあっては，mod_header.cが標準では動きませんので，注意が必要です．

まず，念のために，
```
# apt install php-opcache
```
を行ってから，
```
# vi /etc/apache2/sites-available/next-cd.conf
```
としてnext-cd.confを新規作成します．

:::note info
最初の # apt install php-opcache は，まだphp-opcacheがインストールされていない場合もあり得るためのものです．
:::

```/etc/apache2/sites-available/next-cd.conf
# 新規作成
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
```
ここで，[「Apacheでmod_headersモジュールを有効にする」](https://ubuntu.perlzemi.com/blog/20200309174004.html)に書かれているように，mod_headers.cが動かすため，
```
# a2enmod headers
```
を行ってから，
```
# sudo a2ensite next-cd
# systemctl restart apache2
```
とすれば，私の場合ですと解決できました．

:::note warn
過去に a2enmod headers なるコマンドを行ったことがない場合は， a2enmod headers なるコマンドを忘れると警告文が消えないようです．
:::

## ＊「OPcacheのインターン化文字列バッファーがまもなく一杯になります。全てのスクリプトをキャッシュに保管できるようにするには、opcache.interned_strings_bufferの値を8より多い値で、PHP設定に適用することを推奨します。」
これは，[「Nectcloud recognizeアプリ導入後のOPcacheの設定。」](https://manualmaton.com/2022/10/26/nectcloud-recognize%E3%82%A2%E3%83%97%E3%83%AA%E5%B0%8E%E5%85%A5%E5%BE%8C%E3%81%AEopcache%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%80%82/)や[「【Nextcloud】メモリキャッシュを設定する。」](https://freefielder.jp/blog/2021/07/nextcloud-memory-cache.html)や[「オンラインストレージサーバー構築（Nextcloud）」](https://centossrv.com/almalinux/nextcloud.shtml)などを参考にすると， /etc/php/8.1/apache2/conf.d/10-opcache.ini を編集することで解決できます．
つまり，opchache.****に関する行を書き加え，コメント分を除き以下のような文が含まれるようにします．

```/etc/php/8.1/apache2/conf.d/10-opcache.ini
; configuration for php opcache module
; priority=10
zend_extension=opcache.so

; The OPcache shared memory storage size.
opcache.memory_consumption=128

; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=16

; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 1000000 are allowed.
opcache.max_accelerated_files=10000;

; How often (in seconds) to check file timestamps for changes to the shared
; memory storage allocation. ("1" means validate once per second, but only
; once per request. "0" means always validate)
opcache.revalidate_freq=2

; If disabled, all PHPDoc comments are dropped from the code to reduce the
; size of the optimized code.
opcache.save_comments=1

```
そのあと
```
# systemctl restart apache2
```
とすれば警告文が消えることでしょう．

:::note info
phpのバージョンが8.1である場合， /etc/php/8.1/apache2/conf.d/ における ini ファイルに記述されていれば，とりあえずOKでしょうが，ここでのiniファイルは用途別に分類されていると思われます．
:::

## ＊「このインスタンスには、いくつかの推奨 PHP モジュールがありません。パフォーマンスと互換性を向上させるために、これらをインストールすることを強くお勧めします: bz2. 詳細については、ドキュメント↗を参照してください。」

これは，[「Nextcloudの警告を解消する 」](https://arimasou16.com/blog/2020/12/07/00349/)や[「オンラインストレージサーバー構築（Nextcloud）」](https://centossrv.com/almalinux/nextcloud.shtml)などを参考に，php-bz2をインストールして，細かな調整を行えば解決できるようです．

まず，php-bz2をインストールします．
```
# apt install php8.1-bz2
```
つぎに，
```
# vi /var/www/html/nextcloud/3rdparty/deepdiver/zipstreamer/src/ZipStreamer.php
```
として，ZipStreamer.phpにおける private static function normalizeFilePath($filePath) の部分を編集します．

```/var/www/html/nextcloud/3rdparty/deepdiver/zipstreamer/src/ZipStreamer.php　一部抜粋

  private static function normalizeFilePath($filePath) {
　　//次の行の行頭に//を追加してコメントアウト
    //return trim(str_replace('\\', '/', $filePath), '/');
    //次の行を追加（すべてのファイルを一括ダウンロード時のファイル名文字化け対処）
    return mb_convert_encoding(trim(str_replace('\\', '/', $filePath), '/'),"SJIS","UTF-8");
  }
```

:::note info
インストールパス /var/www/html/nextcloud/ については各自の環境に応じて読み替えてください
:::
そのあと，apache2とphp8.1-fpmとを再起動します．
```
# systemctl restart apache2 php8.1-fpm
```
これで，ここでの警告は出なくなるでしょう．
:::note info
ここでは警告文にbz2が出現しましたので，php8.1-bz2をインストールしましたが，それ以外のモジュールが不足だと指摘された場合はphp8.1-のあとに必要なモジュール名を書いてインストールしてください．
:::

# おわりに

ここでは，[前編](https://qiita.com/proftanaka/items/05deaf3e1e339f50027b)に続いて，nextcloudにおける「管理者設定->概要」に現れる警告などを解消するためのトラブルシューティングについて説明しました．

ここでは，
- 「データディレクトリやファイルがインターネットからアクセスされている可能性があります。.htaccessファイルが機能していません。データディレクトリにアクセスできないようにWebサーバーを設定するか、データディレクトリをWebサーバーのドキュメントルートの外に移動することを強くお勧めします。」
- 「Webサーバーで "/.well-known/webfinger" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。」
-　「Webサーバーで "/.well-known/nodeinfo" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。」
- 「Webサーバーで "/.well-known/caldav" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。」
- 「Webサーバーで "/.well-known/carddav" が解決されるように正しく設定されていません。詳細については、ドキュメント↗をご覧ください。」
- 「メモリキャッシュが設定されていません。パフォーマンスを向上させるため、利用可能であればメモリキャッシュを設定してください。 詳細については、ドキュメント↗を参照してください。」
- 「Strict-Transport-Security "HTTP ヘッダーの秒数が少なくとも"15552000" に設定されていません。セキュリティを強化するには、セキュリティのヒント↗で説明されているようにHSTSを有効にすることをお勧めします。」
- 「OPcacheのインターン化文字列バッファーがまもなく一杯になります。全てのスクリプトをキャッシュに保管できるようにするには、opcache.interned_strings_bufferの値を8より多い値で、PHP設定に適用することを推奨します。」
- 「このインスタンスには、いくつかの推奨 PHP モジュールがありません。パフォーマンスと互換性を向上させるために、これらをインストールすることを強くお勧めします: bz2. 詳細については、ドキュメント↗を参照してください。」

について，取り扱いました．

それによって，前編からここまでの間に
![スクリーンショット 2024-01-03 140055.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/773471/d6d7a14d-1d05-fe3c-8b34-a33015f3a6b8.png)
のように警告を減らすことができました．

あと一息ですが，それについては再度稿を改めたいと思います．


# References
(1) [Ubuntu 22.04に Nextcloud をインストールする方法](http://memorandum.cloud/2023/01/23/1858/)
(2) [NextCloudのインストール](https://www.bigbang.mydns.jp/nextcloud-x.htm)
(3) [プロのインフラエンジニアが、ubuntu で、NextCloudを設定してみた。](https://note.com/fueaoi/n/n67510cd8fd70)
(4) [Nextcloud の警告「メモリキャッシュが設定されていません。」](https://ex1.m-yabe.com/archives/6293)
(5) [Nectcloud recognizeアプリ導入後のOPcacheの設定。](https://manualmaton.com/2022/10/26/nectcloud-recognize%E3%82%A2%E3%83%97%E3%83%AA%E5%B0%8E%E5%85%A5%E5%BE%8C%E3%81%AEopcache%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%80%82/)
(6) [Nextcloudの警告を解消する ](https://arimasou16.com/blog/2020/12/07/00349/)
(7) [オンラインストレージサーバー構築（Nextcloud）](https://centossrv.com/almalinux/nextcloud.shtml)