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 に配置します。
1 2 3 4 5 | # 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 は導入済みなので、説明は省略します。まだ設定されていない方は下記を参考にしてください。
phpMyAdmin から nextcloud ユーザーを作成し、同名のデータベースにすべての権限を付与します。

LSPHP83 をインストール
Nextcloud Hub 10(ver. 31)では PHP 8.3 の利用が推奨されていますので、LSPHP83 のインストールを行っていきます。
1 | # 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

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 の「管理者設定」の概要ページに沢山のエラーが表示されています。

1 2 3 4 5 6 7 8 9 10 11 12 | データディレクトリやファイルがインターネットからアクセスされている可能性があります。.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:/usr/share/nextcloud/data
- アクセス可能:いいえ
設定を保存して OLS を再起動します。
.htaccess を環境に合わせて更新
Web サーバーが Apache なら、.htaccess を読み込んでうまくやってくれますが、OpenLiteSpeed の場合は管理画面から .htaccess に合わせた設定を入れて行く必要があります。
まずは NextCloud の設定ファイル(/usr/share/nextcloud/config/config.php)に、ドメインなどの情報を追加します。
1 2 3 4 | 'overwriteprotocol' => 'https', 'overwritehost' => 'example.com', 'overwritewebroot' => '/nextcloud', 'overwrite.cli.url' => 'https://example.com/nextcloud', |
次に occ maintenance:update:htaccess コマンドを使って .htaccess の情報を更新します。
1 2 3 | # sudo -u nobody /usr/local/lsws/lsphp83/bin/php /usr/share/nextcloud/occ maintenance:update:htaccess The current PHP memory limit is below the recommended value of 512MB. .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:

設定を保存して OLS を再起動します。
.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 を再起動します。
メンテナンスウィンドウの開始時間設定
/usr/share/nextcloud/config/config.php に下記を追加します
1 2 | 'default_timezone' => 'Asia/Tokyo', 'maintenance_window_start' => 1, |
MIME タイプのマイグレーション
OpenLiteSpeed(nobody)ユーザーで occ maintenance:repair --include-expensive コマンドを実行して、マイグレーションを行います。
1 2 | # sudo -u nobody /usr/local/lsws/lsphp83/bin/php /usr/share/nextcloud/occ maintenance:repair --include-expensive The current PHP memory limit is below the recommended value of 512MB. |
メモリキャッシュの設定
メモリキャッシュとして Redis を使っていきます。まだ導入されていない方は下記を参考にしてください。
NextCloud の設定ファイルに、メモリキャッシュの設定を追加します。
1 2 3 4 5 6 7 8 | 'memcache.local' => '\OC\Memcache\Redis', 'memcache.distributed' => '\OC\Memcache\Redis', 'memcache.locking' => '\OC\Memcache\Redis', 'redis' => array ( 'host' => '/run/redis/redis.sock', 'port' => 0, ), |
デフォルトの電話地域を設定
NextCloud の設定ファイルに、デフォルトの電話地域を追加します。
1 | 'default_phone_region' => 'JP', |
NextCloud のメール設定
まず、NextCloud ユーザーの「個人設定」から、メールを設定します。
また、NextCloud の設定ファイルに mail_smtptimeout を設定する必要もあるそうです。(未確認)
1 | 'mail_smtptimeout' => 30, |

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


以上ですべてのチェックに合格することができました。
その他の設定
ついでに他の重要な初期設定もしておきましょう。
バックグラウンドジョブの設定
OpenLiteSpeed(nobody)ユーザーの Cron 設定を、編集モードで開きます。
1 2 | # sudo -u nobody crontab -e no crontab for nobody - using an empty one |
5 分ごとに LSPHP83 で cron.php をチェックします。
1 2 | 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 に変更しました。
1 2 3 | ;memory_limit = 128M ↓(変更) memory_limit = 512M |
下記の様に、CLI 実行時に -d memory_limit オプションを付けて実行して対処する方法もあります。
1 | # sudo -u nobody /usr/local/lsws/lsphp83/bin/php -d memory_limit=512M /usr/share/nextcloud/occ maintenance:mode --off |
まとめ
設定項目がダラダラ長く、変更箇所も入り混じって見づらい記事になってしまいました。
サブディレクトリ運用の場合、Rewrite ルールの適用範囲が .well-known の部分だけルートにするポイントをおさえておけば問題ないでしょう。
コメント