Nextcloud を OpenLiteSpeed のサブディレクトリにインストールする

Nextcloud Enterprise Linux 9
このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。
スポンサーリンク

ConoHa の VPS 上で以前から構築してきた AlmaLinux 9(RHEL9)の OpenLiteSpeed 環境に、Nextcloud をインストールする検証を行います。今回はドメイン直下ではなく、サブディレクトリに配置していきます。

Red Hat Enterprise Linix 9 に http/3 対応のウェブサーバー(OpenLiteSpeed)を構築する
前回からだいぶ間が空いてしまいましたが、ConoHa の VPS にインストールした RHEL9 上にウェブサーバーを導入していきます。ちょうど最近 OpenLiteSpeed のリポジトリに CentOS 9 用が追加されていましたので、...

環境

  • OS: AlmaLinux release 9.5 (Teal Serval)
  • ウェブサーバー: OpenLiteSpeed 1.8.3
  • PHP: lsphp 8.2.28
  • データベース:MariaDB 10.11.12-1
  • サーバー: ConoHa VPS
ConoHa VPS

手順

Nextcloud のダウンロード

最近では Docker コンテナの All-in-One もありますが、今回は Zip アーカイブからインストールしていきます。

https://nextcloud.com/install/#community-projects から、最新のアーカイブを取得します。バージョンは Nextcloud Hub 10(31.0.5)でした。

Zip ファイルを解凍し、ファイル一式を /usr/share/nextcloud に配置します。

wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
mv nextcloud/ /usr/share/
chown nobody. -R /usr/share/nextcloud/
rm latest.zip

ファイルを配置したら、OpenLiteSpeed(nobody)ユーザーに変更しておきます。

データベースの準備

MariaDB と phpMyAdmin は導入済みなので、説明は省略します。まだ設定されていない方は下記を参考にしてください。

Red Hat Enterprise Linix 9 にデータベースサーバー(MariaDB)を構築する
前回は OpenLiteSpeed でウェブサーバーを構築しましたが、今回はその続きとしてデータベースサーバーを構築していきます。MariaDB のインストール今回は、サポート期限の長い MariaDB 10.11(LTS)を選択しました。...

phpMyAdmin から nextcloud ユーザーを作成し、同名のデータベースにすべての権限を付与します。

LSPHP83 をインストール

Nextcloud Hub 10(ver. 31)では PHP 8.3 の利用が推奨されていますので、LSPHP83 のインストールを行っていきます。

dnf install lsphp83 lsphp83-bcmath lsphp83-common lsphp83-gd lsphp83-gmp lsphp83-imap lsphp83-intl lsphp83-mbstring lsphp83-mysqlnd lsphp83-opcache lsphp83-pdo lsphp83-pecl-apcu lsphp83-pecl-igbinary lsphp83-pecl-imagick lsphp83-pecl-redis lsphp83-process lsphp83-sodium lsphp83-tidy lsphp83-xml lsphp83-zip

OpenLiteSpeed の外部アプリとして追加

OLS の管理画面にログインし、サーバー設定 > 外部アプリ > 新しい外部アプリから「LiteSpeed SAPI アプリ」を追加します。

項目は下記の通り設定しました。

  • 名前:lsphp83
  • アドレス:uds://tmp/lshttpd/lsphp83.sock
  • 最大接続数:10
  • 環境:PHP_LSAPI_CHILDREN=20
  • LSAPI_AVOID_FORK=200M
  • 初期リクエストタイムアウト(秒):60
  • リトライタイムアウト(秒):0
  • 永続的な接続:はい
  • 応答バッファリング:いいえ
  • 自動起動:CGIデーモンを通してT
  • コマンド:$SERVER_ROOT/lsphp83/bin/lsphp
  • バックログ:100
  • インスタンス:1
  • メモリソフトリミット(バイト):2047M
  • メモリハードリミット(バイト):2047M
  • プロセスソフトリミット:1400
  • プロセスハードリミット:1500

新しいバーチャルホストを追加

※既存のバーチャルホストを使う場合は設定不要です。

  • バーチャルホスト名:example.com
  • Virtual Host Root:/var/www/$VH_NAME
  • 設定ファイル:$SERVER_ROOT/conf/vhosts/$VH_NAME/vhconf.conf
  • シンボリックリンクを許可する:はい
  • スクリプト/外部アプリを有効にする:はい
  • 抑制された:はい
  • 外部アプリのUIDモードの設定:Server UID

新しいスクリプトハンドラを追加

バーチャルホスト > スクリプトハンドラ から、新しいスクリプトハンドラを追加します。

  • サフィックス:php
  • ハンドラタイプ:LiteSpeed SAPI
  • ハンドラ名:lsphp83

指定したバーチャルホスト全体に PHP 8.3 が適用されますので、PHP のバージョンを使い分けたい場合はサブドメインでバーチャルホストを切ると良いでしょう。

Nextcloud 用のサブディレクトリを追加

バーチャルホスト > コンテキスト から、Nextcloud 用の設定を追加

  • タイプ:Static
  • URI:/nextcloud
  • 場所:/usr/share/nextcloud/
  • アクセス可能:はい

設定が終わったら OLS を緩やかな再起動しておきましょう。

インストールスクリプトの実行

以上で下準備は完了です。ブラウザで Nextcloud の URL(https://example.com/nextcloud/)にアクセスして、初回セットアップをしていきます。

セットアップが終わると、アプリのレコメンド画面に転送されますが、なぜかドメインが抜けた URL(https://nextcloud/index.php/core/apps/recommended)に飛ばされました。

ドメインを補完して(https://example.com/nextcloud/index.php/core/apps/recommended)アクセスし直します。

推奨アプリのインストール画面が表示されましたが、まずは最小構成できちんとセットアップすることを目的としているため、今回はスキップしました。

エラー対応

Nextcloud の「管理者設定」の概要ページに沢山のエラーが表示されています。

セキュリティ&セットアップ警告
  • データディレクトリやファイルがインターネットからアクセスされている可能性があります。.htaccessファイルが機能していません。データディレクトリにアクセスできないようにWebサーバーを設定するか、データディレクトリをWebサーバーのドキュメントルートの外に移動することを強くお勧めします。
  • PHPのメモリ制限が推奨値の512 MBを下回っています。アップデータを含む一部の機能やアプリが正しく動作しない場合があります。
  • PHP の設定オプション "output_buffering" を無効にする必要があります
  • Web サーバが "/ocm-provider/" を解決するように正しく設定されていません。 これは、このフォルダを直接配信するように更新されていないウェブサーバの設定に関連している可能性が高いです。 Apacheの場合は".htaccess"、Nginxの場合はドキュメントに記載されているリライトルールと比較してください。 Nginxの場合、これらは通常「location ~」で始まる行で、更新が必要です。 詳細については、ドキュメントを参照してください。
  • ウェブサーバが .well-known URL を正しく解決できるように設定されていません。失敗箇所: /.well-known/webfinger 詳細については、ドキュメントを参照してください。
  • サーバーにはメンテナンスウィンドウの開始時間が設定されていません。これは、リソースを多く使用する日常のバックグラウンドジョブが、メインの利用時間中にも実行されることを意味します。利用者がこれらの重いタスクによる負荷の影響を受けにくくするために、低い利用時間に設定することをおすすめします。 詳細については、ドキュメントを参照してください。
  • One or more mimetype migrations are available. Occasionally new mimetypes are added to better handle certain file types. Migrating the mimetypes take a long time on larger instances so this is not done automatically during upgrades. Use the command occ maintenance:repair --include-expensive to perform the migrations.
  • PHP OPcacheモジュールが正しく設定されていません。 OPcache のインターン化文字列バッファがほぼいっぱいです。繰り返しの文字列を効果的にキャッシュするために、PHPの設定に "opcache.interned_strings_buffer" を "8" よりも高い値で設定することをおすすめします。. 詳細については、ドキュメントを参照してください。
  • データベースがトランザクションファイルロックに使われています。パフォーマンスをあげるには、可能であればメモリーのキャッシュを設定してください。 詳細については、ドキュメントを参照してください。
  • メモリキャッシュが設定されていません。パフォーマンスを向上させるため、利用可能であればメモリキャッシュを設定してください。 詳細については、ドキュメントを参照してください。
  • ご使用のシステムには、デフォルトの電話地域が設定されていません。これは、プロフィール設定で国コードなしの電話番号を有効にするために必要です。国コードなしの電話番号を許可するには、"default_phone_region" を地域の ISO 3166-1 コードとともに設定ファイルに追加してください。 詳細については、ドキュメントを参照してください。
  • メールサーバーの設定が未設定または未確認です。「基本設定」で設定を行ってください。その後、フォームの下にある「メールを送信」ボタンで設定を確認してください。 詳細については、ドキュメントを参照してください。

データディレクトリをアクセス不可に設定

OLS の管理画面で、バーチャルホスト >(ドメイン名)> コンテキスト からデータディレクトリのコンテキストを作成し、アクセス不可に設定します。

  • タイプ:Static
  • URI:/nextcloud/data
  • 場所:/usr/share/nextcloud/data
  • アクセス可能:いいえ

設定を保存して OLS を再起動します。

1 行目のエラーに対応

.htaccess を環境に合わせて更新

ウェブサーバーが Apache なら、.htaccess を読み込んでうまくやってくれますが、OpenLiteSpeed の場合は管理画面から .htaccess に合わせた設定を入れて行く必要があります。

まずは Nextcloud の設定ファイル(/usr/share/nextcloud/config/config.php)に、ドメインなどの情報を追加します。

  'overwriteprotocol' => 'https',
  'overwritehost' => 'example.com',
  'overwritewebroot' => '/nextcloud',
  'overwrite.cli.url' => 'https://example.com/nextcloud',

次に occ maintenance:update:htaccess コマンドを使って .htaccess の情報を更新します。

sudo -u nobody /usr/local/lsws/lsphp83/bin/php /usr/share/nextcloud/occ maintenance:update:htaccess
(out) The current PHP memory limit is below the recommended value of 512MB.
(out) .htaccess has been updated

上記の設定が反映された /usr/share/nextcloud/.htaccess に更新されました。

.htaccess に合わせて OpenLiteSpeed の設定を変更

OLS の管理画面から Nextcloud 用のコンテキストを開き、/usr/share/nextcloud/.htaccess の内容を当てはめていきます。

Rewrite Base は、サブディレクトリ名と合わせてください。

  • インデクスファイル:index.php, index.html
  • 自動インデックス:いいえ
  • Rewriteを有効にする:はい
  • Rewrite Inherit:いいえ
  • Rewrite Base:/nextcloud/
  • Rewrite ルール:
    • RewriteCond %{HTTP_USER_AGENT} DavClnt
    • RewriteRule ^$ /remote.php/webdav/ [L,R=302]
    • RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    • RewriteRule ^/remote/(.) remote.php [QSA,L] RewriteRule ^/(?:build|tests|config|lib|3rdparty|templates)/. - [R=404,L]
    • RewriteRule ^/ocm-provider/?$ index.php [QSA,L]
    • RewriteRule ^/(?:.(?!well-known)|autotest|occ|issue|indie|db_|console).* - [R=404,L]
    • RewriteRule ^/core/js/oc.js$ index.php [PT,E=PATH_INFO:$1]
    • RewriteRule ^/core/preview.png$ index.php [PT,E=PATH_INFO:$1]
    • RewriteCond %{REQUEST_FILENAME} !.(css|js|mjs|svg|gif|ico|jpg|jpeg|png|webp|html|otf|ttf|woff2?|map|webm|mp4|mp3|ogg|wav|flac|wasm|tflite)$
    • RewriteCond %{REQUEST_FILENAME} !/core/ajax/update.php
    • RewriteCond %{REQUEST_FILENAME} !/core/img/(favicon.ico|manifest.json)$
    • RewriteCond %{REQUEST_FILENAME} !/(cron|public|remote|status).php
    • RewriteCond %{REQUEST_FILENAME} !/ocs/v(1|2).php
    • RewriteCond %{REQUEST_FILENAME} !/robots.txt
    • RewriteCond %{REQUEST_FILENAME} !/ocs-provider
    • RewriteCond %{REQUEST_FILENAME} !/updater/
    • RewriteCond %{REQUEST_FILENAME} !/richdocumentscode(_arm64)?/proxy.php$
    • RewriteRule . index.php [PT,E=PATH_INFO:$1]
  • デフォルトの文字セットを追加:On
  • デフォルトの文字セットをカスタマイズする:utf-8
  • php.ini Override:
    • php_value memory_limit 512M
    • php_flag output_buffering off
    • php_admin_value opcache.interned_strings_buffer 32
    • php_value mbstring.func_overload 0
    • php_value output_buffering 0

設定を保存して OLS を再起動します。

2, 3, 4, 8 行目のエラーに対応

.well-known への Rewrite ルールを設定

.well-known の転送に関しては、バーチャルホスト直下の Rewrite ルールを追加します。

  • Rewriteを有効にする:はい
  • Rewrite ルール:
    • 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]

設定を保存して OLS を再起動します。

5 行目のエラーに対応

RewriteRule ^/.well-known/(?!acme-challenge|pki-validation) /nextcloud/index.php [QSA,L]

本来なら上記のように記述し、acme-challenge か pki-validation 以外のアクセスは、全て nextcloud/index.php を通すようにしたかったのですが、上手くいかなかったため webfinger と nodeinfo を個別に設定しました。

General troubleshooting — Nextcloud latest Administration Manual latest documentation

メンテナンスウィンドウの開始時間設定

Nextcloud の設定ファイル(/usr/share/nextcloud/config/config.php)に下記を追加します。

  'default_timezone' => 'Asia/Tokyo',
  'maintenance_window_start' => 1,

6 行目のエラーに対応

MIME タイプのマイグレーション

OpenLiteSpeed(nobody)ユーザーで occ maintenance:repair --include-expensive コマンドを実行して、マイグレーションを行います。

sudo -u nobody /usr/local/lsws/lsphp83/bin/php /usr/share/nextcloud/occ maintenance:repair --include-expensive
(out) The current PHP memory limit is below the recommended value of 512MB.

7 行目のエラーに対応

メモリキャッシュの設定

メモリキャッシュとして Redis を使っていきます。まだ導入されていない方は下記を参考にしてください。

Red Hat Enterprise Linix 9 の OpenLiteSpeed に WordPress (LiteSpeed Cache) をインストール
これまで ConoHa の VPS に Red Hat Enterprise Linix 9 をインストールし、ウェブサーバー(OpenLiteSpeed)とデータベースサーバー(MariaDB)を構築してきました。今回は WordPres...

Nextcloud の設定ファイル(/usr/share/nextcloud/config/config.php)に、メモリキャッシュの設定を追加します。

  'memcache.local' => '\OC\Memcache\Redis',
  'memcache.distributed' => '\OC\Memcache\Redis',
  'memcache.locking' => '\OC\Memcache\Redis',
  'redis' =>
  array (
    'host' => '/run/redis/redis.sock',
    'port' => 0,
  ),

9, 10 行目のエラーに対応

デフォルトの電話地域を設定

Nextcloud の設定ファイル(/usr/share/nextcloud/config/config.php)に、デフォルトの電話地域を追加します。

  'default_phone_region' => 'JP',

11 行目のエラーに対応

Nextcloud のメール設定

まず、Nextcloud ユーザーの「個人設定」から、メールを設定します。

プロフィールのメールが受信先になるので、設定されていないと検証時に失敗します。

また、Nextcloud の設定ファイル(/usr/share/nextcloud/config/config.php)に mail_smtptimeout を設定する必要もあるそうです。(未確認)

  'mail_smtptimeout' => 30,
AxiosError: Request failed with status code 400
I add myself to the list. Fresh latest AIO installation (NC31): 2025-03-13T08:26:34.090203582Z NOTICE: PHP message: 404 ...

私の環境はメールサーバーが同居しているため、送信モードを Sendmail にすることでメールが送信できました。

12 行目のエラーに対応

以上ですべてのチェックに合格することができました。

その他の設定

ついでに他の重要な初期設定もしておきましょう。

バックグラウンドジョブの設定

OpenLiteSpeed(nobody)ユーザーの Cron 設定を、編集モードで開きます。

sudo -u nobody crontab -e
(out) no crontab for nobody - using an empty one

5 分ごとに LSPHP83 で cron.php をチェックします。

MAILTO=""
*/5  *  *  *  * /usr/local/lsws/lsphp83/bin/php -f /usr/share/nextcloud/cron.php

Nextcloud の管理者設定から 管理 > 基本設定 を開き、バックグラウンドジョブを Cron(推奨)に変更します。

LSPHP83 の memory_limit の修正

CLI で occ コマンドを叩くたびに、「The current PHP memory limit is below the recommended value of 512MB.」と警告が出るため、LSPHP83 用の php.ini を編集して、memory_limit を 512M に変更しました。

;memory_limit = 128M(変更)
memory_limit = 512M

下記の様に、CLI 実行時に -d memory_limit オプションを付けて実行して対処する方法もあります。

sudo -u nobody /usr/local/lsws/lsphp83/bin/php -d memory_limit=512M /usr/share/nextcloud/occ maintenance:mode --off

まとめ

設定項目がダラダラ長く、変更箇所も入り混じって見づらい記事になってしまいました。

サブディレクトリ運用の場合、Rewrite ルールの適用範囲が .well-known の部分だけルートにするポイントをおさえておけば問題ないでしょう。

参考にしたサイト

NextCloud & collabora onlineをopenLiteSpeedで動かす – FlatterMe
ConoHa VPS

次の記事

Nextcloud Talk の高性能バックエンドを AlmaLinux 9 + OpenLiteSpeed の環境に構築する
Nextcloud Talk の高性能バックエンド(HPB: High Performance Backend)を AlmaLinux 9 + OpenLiteSpeed の環境にセットアップする方法を解説しています。

コメント

タイトルとURLをコピーしました