- ① SSH、ユーザー追加
- ② IPv4/IPv6追加、netplan、ufw
- ③ Apache2
- ④ Let's Encrypt
- ⑤ PHP
- ⑥ MariaDB
- ⑦ WordPress
- ⑧ Dovecot、Postfix
- ⑨ Vsftpd
- ⑩ Python
- ⑪ llama.cpp、ChromaDB
- ⑫ Anaconda、Keras、TensorFlow
- ⑬ Node.js
- ⑭ MongoDB
- ⑮ Mosquitto
- ⑯ RabbitMQ
- ⑰ Supervisor
01PPAが不要になった
旧サーバーではUbuntu標準のPHPが古く、ondrej/phpのPPAを追加して8.5を入れていた。 新サーバー(Ubuntu 26.04 LTS)は標準リポジトリに最初からPHP 8.5が入っているため、PPAの追加が丸ごと不要になった。 2021年以前の設定を見直せる点の一つ。
02mod_phpではなくPHP-FPMを選んだ理由
③で決めた権限設計(Apache=www-data=読み取り専用、PHP=login-user=書き込み可)を実現するには、Apacheに埋め込まれるmod_phpではなく、 独立プロセスとして動くPHP-FPMが必要になる。今回はFPMで統一する。
03インストール
当初opcacheも個別パッケージとして入れる想定だったが、PHP 8.5からopcacheはコア機能に統合され、
php8.5-opcacheというパッケージ自体が存在しなくなっていた。bcmathは旧サーバーで実際に使っているページがあったため追加。
/etc/php/8.5/fpm/php.iniのopcache.enable=1を目視で確認する必要がある。
04Apache連携で③に不足があった
③で有効化したモジュールはhttp2 proxy proxy_wstunnel rewrite setenvif sslで、PHP-FPM連携に必要なproxy_fcgiが抜けていた。
05poolをlogin-user用に
5サイトとも所有者が同じlogin-userなので、まずは1プール共有で開始する。ソケットの所有者はwww-data系のままにして、Apache側から接続できるようにしている。
4GB RAMという制約を踏まえ、pm.max_childrenは控えめな値からスタート。
06.html内PHP実行、対象は3サイトではなく4サイトだった
旧サーバーでは.html拡張子のファイル内でもPHPを実行する設定が入っていた。当初「iseeit.jp、gwaw.jp、appw.jpの3サイト」という認識で進めていたが、
実際には先日導入した5サイト共通のPHPログシステムが影響しており、純粋なWordPressサイトのibe.tokyo以外の4サイト(iseeit.jp、gwaw.jp、appw.jp、sasagawa.tokyo)が対象だった。
共通設定(php8.5-fpm.conf)に.htmlを含めることも検討したが、見送った。
ソケットパスにはPHPのバージョン番号が入っている(php8.5-fpm.sock)ため、将来のバージョンアップ時にパス修正が必要になる点は共通化してもしなくても変わらない。
それよりも、ibe.tokyoのような「.htmlをPHPとして実行してほしくないサイト」を設定上はっきり除外できるという点を優先し、対象4サイトのVirtualHostに個別でFilesMatchブロックを追加する方式にした。
| サイト | .html内PHP実行 |
|---|---|
| iseeit.jp | 有効(80/443の2ファイルに追加) |
| gwaw.jp | 有効(同上) |
| appw.jp | 有効(同上) |
| sasagawa.tokyo | 有効(同上) |
| ibe.tokyo | 無効(素のまま、.phpのみ) |
共通設定側(php8.5-fpm.conf)はパッケージ標準の.phpのみに戻し、8ファイルへの個別追加で対応した。
07動作確認
DNSがまだ新サーバーを向いていないため、curl --resolveでSNI・Host名を保ったまま新サーバーへ直接接続する形でテストした。
sites-available配下のファイルは編集していたが、a2ensiteでsites-enabledへ反映していなかった。
有効なVirtualHostが1つもない状態でもmod_sslはポート443を待ち受け続けるためTCP接続自体は成立するが、
TLSハンドシェイクを引き取るVirtualHostがなく、ClientHelloを素のHTTPとして扱おうとして破綻し「wrong version number」というエラーになっていた。
.htmlが実行されず生テキストのまま返ることをすべて確認。確認後、テストファイルは削除した。
08ここまでの状態
- PHP 8.5をUbuntu標準リポジトリからPHP-FPMとしてインストール(PPA不要)
- poolはuser/group=login-userに設定、Apache(www-data)とは実行ユーザーを分離
- .html内PHP実行は4サイトのVirtualHostに個別設定、ibe.tokyoのみ除外
- サイト未有効化(a2ensite漏れ)によるTLSエラーを解決し、5サイトすべてで動作確認済み