CentOS 8からの「大移動」を振り返る
2021年末、CentOS 8のサポートが突然終了(EOL)した際、私を含む多くのシステム管理者は「不意を突かれた」状態になりました。当時、私はクライアントの商用サーバーを5台抱えていました。システムの安全性を確保するため、わずか1週間でRocky Linuxへ完全に移行しなければなりませんでした。
何晩も徹夜を重ねた末、Rocky Linux 9こそが非常に信頼できる移行先であると確信しました。Red Hatの安定性を維持しつつ、完全に無料だからです。今日は、この「新天地」にLEMP(Linux, Nginx, MariaDB, PHP)スタックを構築する方法を皆さんに共有します。
なぜLAMPではなくLEMPなのか?
定番の質問ですが、改めて触れておく必要があります。1 vCPU、1GB RAMといった低スペックなVPSにおいて、Nginxは救世主となります。実際、アイドル時のNginxのメモリ消費量はわずか20MB程度です。一方、Apacheは通常その3〜4倍を消費します。
Nginxはイベント駆動型のメカニズムにより、数千の同時接続を非常にスムーズに処理します。Nginxを「超一流のウェイター」に例えてみてください。彼は50ものテーブルの注文を同時に受けても、混乱したりミスをしたりすることなく完璧にこなします。
ステップ1:Nginxのインストール – 高速な中継地点
さあ、始めましょう!まずは古いパッケージとの競合を避けるためにシステムを更新します。
sudo dnf update -y
sudo dnf install nginx -y
インストールが終わったら、再起動時にNginxが自動起動するように設定するのを忘れないでください。初心者によくあるミスで、サーバーを再起動した途端にWebサイトが見られなくなる原因になります。
sudo systemctl start nginx
sudo systemctl enable nginx
次に、ファイアウォールでポート80(HTTP)と443(HTTPS)を開放します。Rocky Linuxはデフォルトで厳しく制限されています。これを開放しないと、Webにアクセスした際に「Connection timed out」エラーが表示されてしまいます。
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
ステップ2:MariaDBのインストール – 堅牢なストレージ
互換性が非常に高く、完全に無料であるため、MySQLよりもMariaDBを好んで使用しています。複雑なクエリのテストでは、MariaDBの方が5〜10%レスポンスが速いことが多いです。
sudo dnf install mariadb-server mariadb -y
sudo systemctl start mariadb
sudo systemctl enable mariadb
デフォルト設定のまま使い始めるのは絶対に避けましょう。セキュリティスクリプトを実行して不要なユーザーを削除し、強力なrootパスワードを設定します。
sudo mysql_secure_installation
私からのアドバイス:スクリプトの質問にはすべてY(Yes)と答え、データベースのセキュリティを最大限に高めてください。
ステップ3:PHP 8.1のインストール – ロジック処理の高速化
Rocky Linux 9にはPHP 8.1が同梱されており、JIT機能によって従来の7.4よりも実行パフォーマンスが大幅に向上しています。WordPressやLaravelのプロジェクトをPHP 8.1に移行すると、通常20〜30%のレスポンスタイム削減が期待できます。
sudo dnf install php php-fpm php-mysqlnd php-gd php-curl php-xml php-mbstring -y
ここで重要なポイントがあります。デフォルトではphp-fpmはapacheユーザーで実行されます。今回はNginxを使用するため、権限エラー(403 ForbiddenやPermission Denied)を避けるためにnginxユーザーに変更する必要があります。
/etc/php-fpm.d/www.confファイルを開き、以下の2行を修正します。
user = nginx
group = nginx
その後、サービスを起動します:
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
ステップ4:NginxとPHP의連携設定
Nginxは自力でPHPファイルを読み込むことができないため、ソケットを介してPHP-FPMに処理を渡す必要があります。新しくサーバーブロックの構成ファイルを作成します。
/etc/nginx/conf.d/itfromzero.confファイルを作成します:
server {
listen 80;
server_name your_domain_or_IP;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
再起動する前に、sudo nginx -tコマンドを実行してください。「syntax is ok」と表示されれば、設定は正しいです。
sudo systemctl restart nginx
ゴール:動作確認とモニタリング
システムが正常に動作しているか確認するために、簡単なinfo.phpファイルを作成します:
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/html/info.php
サーバーのIP/info.phpにアクセスしてください。情報が表示されれば、LEMPスタックの構築は成功です!
私の苦い経験からの教訓:もし502 Bad Gatewayエラーが発生した場合は、90%の確率でSELinuxがNginxのソケット接続をブロックしていることが原因です。setsebool -P httpd_can_network_connect 1コマンドを実行して解決を試みてください。諦めずに毎日/var/log/nginx/error.logのログを読むことで、あなたは真のシステム管理者のプロへと近づけるはずです。
