PHP-FPMを利用したNextcloudのセットアップ方法です。
なぜ mod_php ではなく PHP-FPM を使うのか?
パフォーマンスとリソース効率を向上させるためです。
従来のmod_php
では、PHPがApacheの全プロセスに組み込まれるため、画像ファイルのリクエストのようなPHPが不要な処理でもメモリを消費し、無駄が多くなりがちでした。
一方、PHP-FPM
はPHPの処理をApacheから完全に独立させた専門のプロセスとして管理します。ApacheはPHPが必要なリクエストだけをPHP-FPMに中継するため、サーバー全体の動作が軽量かつ高速になります。
前提
- OS: Ubuntu 24.04 LTS
- → SSH接続できること。
- ※root権限を持っていること。
- この権限を持っていない場合、ここから先の設定はできません。
- データベース: MySQL 8.0
- Webサーバー: Apache 2.4
- 実行ユーザーは
www-data
- ホームディレクトリを
/home/www-data
にしています。自分の環境に合わせてください。
- 実行ユーザーは
- ドメインとSSL/TLS証明書: 準備済みであること
筆者の好みでaptitude
を用いています。必要に応じてapt
をご利用ください。
さっくりとはならない手順
- リポジトリの追加とアップデートを行います。
- パッケージをインストールしていきます。
- PHP-FPMの設定を行います。
- PHPのパフォーマンス設定を行います。
- MySQLでDB設定を行います。
- NextcloudのDBを設定します。
- Apacheバーチャルホストの設定を行います。
- バーチャルホストの設定を有効化します。
- 設定の有効化とサービスの再起動を
リポジトリの追加とアップデート
最新のPHPバージョンを利用するためにppa:ondrej/php
リポジトリを追加していきます。
- レポジトリ追加
sudo add-apt-repository ppa:ondrej/php
- パッケージ全体のアップデート
sudo apt update
必要なパッケージのインストール
PHP本体、PHP-FPM、Nextcloudが必要とする各種PHPモジュールをインストールします。
sudo aptitude install php8.3 php8.3-fpm php8.3-opcache php8.3-pdo php8.3-bcmath php8.3-calendar php8.3-ctype php8.3-fileinfo php8.3-ftp php8.3-gd php8.3-intl php8.3-json php8.3-mbstring php8.3-mysql php8.3-posix php8.3-readline php8.3-sockets php8.3-bz2 php8.3-tokenizer php8.3-zip php8.3-curl php8.3-iconv php8.3-xml php8.3-imagick php8.3-gmp php8.3-apcu memcached
バージョンを確認します。
php -v
表示例
PHP 8.3.25 (cli) (built: Aug 29 2025 12:01:53) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.25, Copyright (c) Zend Technologies
with Zend OPcache v8.3.25, Copyright (c), by Zend Technologies
PHP-FPMとApacheの連携設定
従来の mod_php
を無効化し、PHP-FPMとの通信に必要な proxy_fcgi
モジュールなどを有効化します。
- mod_phpを無効化(もしインストールされていれば)
sudo a2dismod php8.3
- 必要なモジュールを有効化
sudo a2enmod proxy_fcgi setenvif header rewrite
PHPのパフォーマンス設定
Nextcloudのパフォーマンス向上のため、PHPのメモリ制限、OPcache、APCuを設定します。
- php.ini の設定 (memory_limit)
sudo sed -i 's/memory_limit = .*/memory_limit = 512M/g' /etc/php/8.3/fpm/php.ini
- OPcacheとAPCuの有効化
Nextcloud推奨の設定値を /etc/php/8.3/mods-available/
に作成・適用します。
- OPcache設定
cat <<- __EOF__ | sudo tee /etc/php/8.3/mods-available/opcache.ini
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
__EOF__
- APCu設定
cat <<- __EOF__ | sudo tee /etc/php/8.3/mods-available/apcu.ini
[acpu]
apc.enabled=1
apc.shm_size=32M
apc.ttl=7200 apc.enable_cli=1
apc.serializer=php
__EOF__
データベースの作成
Nextcloudが使用するMySQLデータベースと専用ユーザーを作成します。
- MySQLにrootでログイン
mysql -u root -p
以下のSQLコマンドを実行します。YOUR_STRONG_PASSWORD
は必ず強固なパスワードに変更してください。
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOUR_STRONG_PASSWORD';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Nextcloudプログラムの配置
Nextcloud本体をダウンロードし、Webサーバーからアクセスできる場所に配置します。
- 作業ディレクトリへ移動
cd /tmp && pwd
任意のディレクトリを指定します。
- 最新版をダウンロードして展開
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
- 展開したファイル一式をWeb公開用ディレクトリに移動
sudo mv nextcloud /home/www-data/
- 所有者をWebサーバーの実行ユーザーに変更
sudo chown -R www-data:www-data /home/www-data/nextcloud
Apacheバーチャルホストの設定
Nextcloud用のApache設定ファイルを作成します。ここでPHP-FPMとの連携設定を組み込みます。
- ログディレクトリの作成
sudo mkdir /var/log/nextcloud
- ログディレクトリを
www-data
に修正。
これは、後のメンテナンス性を高めるためです。
sudo chown www-data:www-data /var/log/nextcloud
- 設定ファイルの作成
/etc/apache2/sites-available/nextcloud.conf
を、teeで一気通貫で作ります。
# 【】内はご自身の環境に合わせてください
cat <<- __EOF__ | sudo tee /etc/apache2/sites-available/nextcloud.conf
<VirtualHost *:80>
ServerName 【hoge.example.com】
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
<VirtualHost *:443>
ServerName 【hoge.example.com】
DocumentRoot 【/home/www-data/nextcloud】
CustomLog /var/log/nextcloud/nextcloud_access.log combined
ErrorLog /var/log/nextcloud/nextcloud_error.log
<Directory 【/home/www-data/nextcloud】>
Options -MultiViews
AllowOverride All
Require all granted
</Directory>
# PHP-FPM連携設定
<FilesMatch \.php$>
# SetHandlerで、phpファイルのリクエストをPHP-FPMのソケットに渡す
SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost/"
</FilesMatch>
# --- SSL設定 ---
SSLEngine on
Protocols h2 http/1.1
SSLCertificateFile 【/etc/certs/hoge.example.com.crt】
SSLCertificateKeyFile 【/etc/private/hoge.example.com.key】
# 中間証明書が別に提供されている場合はこちらを有効化
# SSLCACertificateFile 【/etc/certs/hoge.example.com.CA.crt】
# --- 推奨SSL/TLS設定 ---
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
# --- セキュリティヘッダー ---
# Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
Header always set Referrer-Policy "no-referrer"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Permitted-Cross-Domain-Policies "none"
</VirtualHost>
__EOF__
設定の有効化とサービスの再起動
- 作成したサイト設定を有効化
sudo a2ensite nextcloud.conf
- 構文チェック
sudo apache2ctl configtest
Syntax OK
と表示されることを確認
- fpm/apacheサービスを再起動
sudo systemctl restart php8.3-fpm.service
sudo systemctl restart apache2.service
- fpm/apache再起動確認
systemctl status php8.3-fpm.service
systemctl status apache2.service
active (running)
と表示されていれば正常です。
Webブラウザでのセットアップ
最後に、Webブラウザで https://【設定したドメイン】
にアクセスし、画面の指示に従ってNextcloudの初期設定を完了させます。
- 管理者ユーザーのユーザー名とパスワードを入力
- データベース情報を入力
- データベースのユーザー名:
nextcloud
- データベースのパスワード: 手順5で設定したパスワード
- データベース名:
nextcloud
- データベースのホスト名:
localhost
(またはlocalhost:3306
)
- データベースのユーザー名:
これで、PHP-FPM上で動作するNextcloud環境の構築が完了します。