なぜ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のログを詳しく確認してください。すべてのヒントはそこにあります。構築の成功を祈っています!

