Rocky Linux 9でのLEMPスタック構築:嵐のようなサーバー移行から学んだ教訓

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

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-fpmapacheユーザーで実行されます。今回は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のログを読むことで、あなたは真のシステム管理者のプロへと近づけるはずです。

Share: