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

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

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

環境

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

手順

NextCloud のダウンロード

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

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

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

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

データベースの準備

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

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

LSPHP83 をインストール

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

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

指定したバーチャルホスト全体に LSPHP83 が適用されますので、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 の「管理者設定」の概要ページに沢山のエラーが表示されています。

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

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

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

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

1 行目のエラーに対応

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

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

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

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

上記の設定が反映された /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

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

/usr/share/nextcloud/config/config.php に下記を追加します

6 行目のエラーに対応

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

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

7 行目のエラーに対応

メモリキャッシュの設定

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

NextCloud の設定ファイルに、メモリキャッシュの設定を追加します。

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

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

NextCloud の設定ファイルに、デフォルトの電話地域を追加します。

11 行目のエラーに対応

NextCloud のメール設定

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

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

また、NextCloud の設定ファイルに mail_smtptimeout を設定する必要もあるそうです。(未確認)

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 設定を、編集モードで開きます。

5 分ごとに LSPHP83 で 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 に変更しました。

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

まとめ

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

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

参考にしたサイト

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

コメント

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