CentOS Stream 9でNginxとLet’s Encryptを使用してWordPressをインストールする方法

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

なぜCentOS Stream 9とNginxなのか?

サーバー構築を始めたばかりの頃、私はApacheをよく使っていました。設定が簡単で、ファイルを置くだけで動くからです。しかし、数千件の同時アクセスがあるサイトを管理するようになると、Apacheが非常に多くのRAMを消費することに気づきました。2GBのRAMを搭載したサーバーがApacheによってダウンしてしまう一方で、Nginxは同等のトラフィックをわずか150〜200MBで処理できました。

CentOS 8のサポート終了(EOL)後、AlmaLinuxかRocky Linuxにするか迷いましたが、最終的にRHELベースの安定性を持ちつつ、より新しいパッケージが利用できるCentOS Stream 9を選びました。この記事では、本格的なWordPressサイトの構築方法を解説します。特に、ネット上の多くの記事にあるような「SELinuxをオフにする」といった安易な方法は推奨しません。技術的に正しく、ファイアウォールを有効にし、SELinuxを適切に設定して進めていきます。

LEMPスタックとは?

WordPressをスムーズに動作させるには、LEMPスタックと呼ばれる基盤が必要です:

  • Linux: オペレーティングシステム(CentOS Stream 9)。
  • Engine-X (Nginx): 接続を処理するウェブサーバー。Apacheよりもはるかに軽量で高速です。
  • MariaDB: データベース管理システム(MySQLから派生した非常に安定したオープンソース版)。
  • PHP: WordPressを動かす主要なプログラミング言語。

ステップ1:システムの更新とFirewalldの設定

サーバーにSSHでログインした後、最初に行うべきことはシステムの更新です。重要なセキュリティパッチが含まれていることが多いため、この手順は決して飛ばさないでください。

sudo dnf update -y

次に、Firewalldでポートを開放します。CentOSはデフォルトでサーバー保護のためにポートを厳重に閉じています。ポート80(HTTP)と443(HTTPS)を開放しないと、ブラウザからウェブサイトにアクセスできません。

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

ステップ2:NginxとMariaDBのインストール

Nginxのインストールはdnfコマンドで非常に素早く行えます:

sudo dnf install nginx -y
sudo systemctl enable --now nginx

MariaDBについては、インストール後にセキュリティスクリプトを実行することが必須です。以前、この手順を軽視したために、データベースがボットによるパスワード総当たり攻撃(パスワードスキャン)を受けた経験があります。

sudo dnf install mariadb-server mariadb -y
sudo systemctl enable --now mariadb
sudo mariadb-secure-installation

システムの指示に従い、DBのrootパスワードを設定します。インストール直後はパスワードがないため、そのままEnterを押します。その後、Yを選択して強力な新しいパスワードを設定してください。続く質問もすべてYを選択し、匿名ユーザーや不要なデータベースを削除します。

ステップ3:PHP 8.2のインストール

現在のWordPressは、PHP 8.1または8.2で最高のパフォーマンスを発揮します。CentOS Stream 9では、画像処理やデータ圧縮に必要なモジュールを併せてインストールします:

sudo dnf install php-fpm php-mysqli php-json php-gd php-intl php-pecl-apcu php-opcache php-mbstring php-xml php-zip -y
sudo systemctl enable --now php-fpm

重要な注意点:NginxとPHP-FPMは同じ「ユーザー」で動作する必要があります。デフォルトではPHP-FPMはapacheユーザーで動作しているため、権限エラーを避けるためにnginxに変更する必要があります。

/etc/php-fpm.d/www.confファイルを開き、以下の2行を修正します:

user = nginx
group = nginx

ステップ4:WordPress用のデータベース作成

次に、データの「家」を作成します。MariaDBにログインします:

sudo mariadb -u root -p

以下のコマンドを実行します(your_passwordは推測されにくい強力な文字列に置き換えてください):

CREATE DATABASE wordpress_db;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

ステップ5:Nginx仮想ホスト(Virtual Host)の設定

最新のWordPressをウェブディレクトリにダウンロードします:

cd /var/www
sudo curl -O https://wordpress.org/latest.tar.gz
sudo tar -xf latest.tar.gz
sudo chown -R nginx:nginx /var/www/wordpress
sudo chmod -R 755 /var/www/wordpress

その後、/etc/nginx/conf.d/wordpress.confにNginxの設定ファイルを作成します:

server {
    listen 80;
    server_name yourdomain.com; # 実際のドメインに置き換えてください
    root /var/www/wordpress;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

設定を確認して再起動します:sudo nginx -t && sudo systemctl restart nginx

ステップ6:SELinuxへの対応 – セキュリティの鍵

ウェブサイトにアクセスして「403 Forbidden」エラーが表示される場合、それはSELinuxがNginxをブロックしているためです。SELinuxを無効化する(非常に危険です)代わりに、以下のコマンドを実行して適切に権限を付与してください:

# 管理ツールがインストールされていない場合はインストール
sudo dnf install policycoreutils-python-utils -y

# Nginxによるウェブファイル管理を許可
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/wordpress(/.*)?"
sudo restorecon -Rv /var/www/wordpress

# ネットワーク接続を許可(プラグインのインストールやメール送信用)
sudo setsebool -P httpd_can_network_connect 1

私の経験上、restoreconを実行しないと変更が反映されません。これを忘れると、一日中パーミッションを777に変えてもサイトが動かないという事態に陥ります。

ステップ7:Let’s Encryptによる無料SSLの有効化

HTTPS化されていないサイトは、Googleから「保護されていない通信」と警告され、SEO順位も下がります。Certbotを使えば、わずか30秒で無料のSSL証明書を取得できます。

sudo dnf install certbot python3-certbot-nginx -y
sudo certbot --nginx -d yourdomain.com

Certbotは自動的にNginxを再設定し、証明書の自動更新もセットアップしてくれます。非常に便利です!

結論

手順をしっかりと把握していれば、CentOS Stream 9でのWordPress構築は難しくありません。重要なのは、FirewalldとSELinuxをうまく連携させ、ウェブサイトのための強固な要塞を築くことです。

もしインストール中にエラーが出た場合は、/var/log/nginx/error.logのログを詳しく確認してください。すべてのヒントはそこにあります。構築の成功を祈っています!

Share: