概要
- Ubuntu 26.04
- Apache
をインストールした状況で、「PHP-FPM」を稼働させた上でNextcloudをインストールしていくためのメモです。
この手順はゴールではなくスタートです
- 本手順は「構築した」という始まりに過ぎません。
- 「動く」手順ではありますが「初期設定」は以下が絡むため、これ以上に厄介です。
- 初期設定
- メール設定
- redis設定
- 各種セキュリティ
- ログ設定
- アプリのチューニング…
- インターネット環境だろうとローカルだろうと、「データを取り扱う器」を構築した以上、データ保全という義務と責任がこれから重くのしかかります。
- 本手順で「めんどくさい」と思った方は素直にOneDrive/GoogleDrive/Dropboxをお使いください。その方があなたもデータも幸せです。(実際、筆者が使ってるGoogle AI proなら月額2900円で5TBも利用可能です!)
再掲:Nextcloudというかサービス運営者に必要なのは「資格」ではなく「責任」です。
Ubuntu24.04のインストール時にも言いましたが、この理論は未だに私の中では真理です。
巷では「○○の資格があればこの運用は」的な話があるようですが:そもそも運用の方針を取り違えていると思います。
「救急戦隊ゴーゴーファイブ」に曰く
「資格? 馬鹿野郎、誰もそんなもの持ってねぇんだ! いいか、あるのは責任だけだ。戦う責任! あの子を傷つけちまった責任! そいつを果たすには、この地球を守るしかねぇんだ!」
私が言いたいことはこれに尽きます。
なぜ mod_php ではなく PHP-FPM を使うのか?
パフォーマンスとリソース効率を向上させるためです。
従来のmod_phpでは、PHPがApacheの全プロセスに組み込まれるため、画像ファイルのリクエストのようなPHPが不要な処理でもメモリを消費し、無駄が多くなりがちでした。
一方、PHP-FPMはPHPの処理をApacheから完全に独立させた専門のプロセスとして管理します。ApacheはPHPが必要なリクエストだけをPHP-FPMに中継するため、サーバー全体の動作が軽量かつ高速になります。
前提
- OS: Ubuntu 26.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バーチャルホストの設定を行います。
- バーチャルホストの設定を有効化します。
- 設定の有効化とサービスの再起動を実施します。
- Webブラウザで初期インストールを行います。
必要なパッケージのインストール
PHP本体、PHP-FPM、Nextcloudが必要とする各種PHPモジュールをインストールします。
sudo aptitude install php php-fpm php-opcache php-pdo php-bcmath php-calendar php-ctype php-fileinfo php-ftp php-gd php-intl php-json php-mbstring php-mysql php-posix php-readline php-sockets php-bz2 php-tokenizer php-zip php-curl php-iconv php-xml php-imagick php-gmp php-apcu memcached
バージョンを確認します。
php -v
表示例
PHP 8.5.4 (cli) (built: Apr 1 2026 09:36:11) (NTS)
Copyright (c) The PHP Group
Built by Ubuntu
Zend Engine v4.5.4, Copyright (c) Zend Technologies
with Zend OPcache v8.5.4, Copyright (c), by Zend Technologies
※Ubuntu 26.04はリポジトリを追加するまでもなくPHP8.5がインストールされます。※
PHP-FPMとApacheの連携設定
従来の mod_php を無効化し、PHP-FPMとの通信に必要な proxy_fcgi モジュールなどを有効化します。
- mod_phpを無効化(もしインストールされていれば)
sudo a2dismod php
- 必要なモジュールを有効化
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//fpm/php.ini
- OPcacheとAPCuの有効化
Nextcloud推奨の設定値を /etc/php//mods-available/ に作成・適用します。
- OPcache設定
cat <<- __EOF__ | sudo tee /etc/php//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//mods-available/apcu.ini
[apcu]
apc.enabled=1 apc.shm_size=32M apc.ttl=7200 apc.enable_cli=1 apc.serializer=php __EOF__
- 設定の有効化
sudo phpenmod opcache apcu
このphpenmodがハマりポイントでした。従来の ln -sではなく、専用コマンドを用いることでfpm / cli / apache-mod でも安定した運用が可能になります。
データベースの作成
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 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.5-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__
※ こちらもMod_Securityによる連携は可能です。
設定の有効化とサービスの再起動
- 作成したサイト設定を有効化
sudo a2ensite nextcloud.conf
- 構文チェック
sudo apache2ctl configtest
Syntax OK と表示されることを確認
- fpm/apacheサービスを再起動
sudo systemctl restart php8.5-fpm.service
sudo systemctl restart apache2.service
- fpm/apache再起動確認
systemctl status php8.5-fpm.service
systemctl status apache2.service
active (running)と表示されていれば正常です。
Webブラウザでのセットアップ
最後に、Webブラウザで https://【設定したドメイン】 にアクセスし、画面の指示に従ってNextcloudの初期設定を完了させます。
- 管理者ユーザーのユーザー名とパスワードを入力
- データベース情報を入力
- データベースのユーザー名:
nextcloud - データベースのパスワード: データベースのパスワード
- データベース名:
nextcloud - データベースのホスト名:
localhost(またはlocalhost:3306)
これで、PHP-FPM上で動作するNextcloud環境の構築が完了します。
コメントを残す