
とある国内大手企業が提供している国内産のVPSサーバーをいつも利用させてもらっているんですが、
Ubuntuの最新版が24なのに、18から一向にOSアップデートしてくれないんですよ。
自分でOSアップグレードしてもいいんですが、OSのアップグレードって、まあまあリスクが高いので、あまり個人的にはやりたくないんですよね。
ちなみに、そのVPSサービスは、いまだに、オワコンのCentOSなんていうのもリストに載せたままになっているし、
メールサーバーとして、PTRの登録もできないので、ホント公開Webとか、API置き場としてしか使えないんですよね。
(それでも、便利に使わせてもらっていますが)
そして、今回久しぶりにWebサービスを作ったので、それを設置しようと思ったら、PHPの最新版が入らないじゃありませんか(PHP ver 8.5です)
ということで、モジュールコンパイルからの手順を備忘録で残しておきたいと思います。
1. 必要なパッケージのインストール
sudo apt update
sudo apt install -y \
build-essential autoconf libtool bison re2c \
libxml2-dev libsqlite3-dev libcurl4-openssl-dev \
libpng-dev libjpeg-dev libfreetype6-dev libonig-dev \
libzip-dev libssl-dev pkg-config libreadline-dev \
libicu-dev
2. PHP 8.5 のソース取得と展開
cd /usr/local/src
sudo wget https://www.php.net/distributions/php-8.5.9.tar.gz
sudo tar xzf php-8.5.9.tar.gz
cd php-8.5.9
3. configure
Ubuntu 18.04 の libcurl が古い(7.58.0)ため、--without-curl が必要でした。
./configure \
--prefix=/usr/local/php85 \
--with-config-file-path=/usr/local/php85/etc \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--enable-mbstring \
--without-curl \
--with-openssl \
--with-zlib \
--enable-bcmath \
--enable-gd \
--with-jpeg \
--with-freetype \
--with-mysqli \
--with-pdo-mysql \
--enable-intl \
--with-zip \
--with-readline
エラーに遭遇
libcurl >= 7.61.0 が必要とわかり、--without-curlをつける。
readline.h が見つからないため、以下を実行
sudo apt install libreadline-dev
成功すると最後に Thank you for using PHP. と表示されます。
4. ビルド・インストール
make -j$(nproc)
sudo make install
シンボリックリンクの設置
sudo ln -sf /usr/local/php85/bin/php /usr/local/bin/php
php -v
5. PHP-FPM の設定
ソースインストール後は設定ファイルが .default のままなのでコピーします。
sudo cp /usr/local/php85/etc/php-fpm.conf.default /usr/local/php85/etc/php-fpm.conf
sudo cp /usr/local/php85/etc/php-fpm.d/www.conf.default /usr/local/php85/etc/php-fpm.d/www.conf
www.conf の主な設定
sudo nano /usr/local/php85/etc/php-fpm.d/www.conf
# ini
user = www-data
group = www-data
; 今回は TCP で待ち受けることにした
listen = 127.0.0.1:9000
PHP-FPM の起動
# テスト起動(フォアグラウンド)
sudo /usr/local/php85/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php85/etc/php-fpm.conf
# 問題なければ Ctrl+C で止め、デーモン起動
sudo pkill php-fpm
sudo /usr/local/php85/sbin/php-fpm
確認
ps aux | grep php-fpm
ソケットを使いたい場合(上記ができていればこの作業は不要)
(Unixソケットにする場合は listen = /usr/local/php85/var/run/php-fpm.sock にする)
ソケット用ディレクトリ(ソケットを使う場合):
sudo mkdir -p /usr/local/php85/var/run
sudo chown www-data:www-data /usr/local/php85/var/run
6. Nginx の設定
location ~ \.php$ の部分を PHP-FPM の待ち受けに合わせます。
今回は TCP に合わせた例:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000; # ← ここを合わせる
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
設定チェックと再読み込み:
sudo nginx -t
sudo systemctl reload nginx
7. サイトディレクトリの権限
シンプルに www-data 所有にする場合:
sudo chown -R www-data:www-data /var/www/html/petamemo
sudo find /var/www/html/petamemo -type d -exec chmod 755 {} \;
sudo find /var/www/html/petamemo -type f -exec chmod 644 {} \;
専用ユーザー "web" を使う場合の例:
sudo useradd -r -m -d /home/web -s /usr/sbin/nologin -u 1001 web
sudo usermod -aG www-data web
sudo chown -R web:www-data /var/www/html/petamemo
sudo find /var/www/html/petamemo -type d -exec chmod 775 {} \;
sudo find /var/www/html/petamemo -type f -exec chmod 664 {} \;
※ web ユーザーに sudo 権限は付けない(セキュリティ上の理由)。
8. よくあるエラーと対処
connect() to unix:.../php-fpm.sock failed (2: No such file or directory)
原因 : ソケットが無い / PHP-FPM未起動 / listen設定不一致
対応 : PHP-FPMを起動し、Nginx の fastcgi_pass と listen を一致させる
failed to open configuration file '.../php-fpm.conf'
原因 : 設定ファイルが無い
対応 : .default からコピーする
make: *** No targets specified and no makefile found
原因 : configure が失敗している
対応 : configure のエラーを解消してから make する
補足・今後やること
- PHP-FPM の自動起動(systemd ユニットを作る)
- php.ini の調整(date.timezone や upload_max_filesize など)
- 可能なら Ubuntu 22.04 / 24.04 へのアップグレードを検討
あとがき
備忘録って、自分用に書くだけなんですよ。
他の人って、よほど同じ環境じゃないと、なんの意味もないんですよ。
だって、今時Ubuntu18ですよ!
サポート切れてるんですよ!
でも、このVPS、全部で8個ぐらいサーバー立ち上げているので、
全部この処理をやって、PHPを今の所の最新版にしておいたほうがよさそうだな・・・
0 件のコメント:
コメントを投稿