AWS2-1 WordPressの仕組みと動作要件

🧩 WordPressの仕組みと動作要件:講義+デモ

― DB接続と設定ファイル(wp-config.php)の関係 ―

🎯 学習目標

  • WordPress の内部構造(PHP+DB+ファイル)の役割を理解する
  • DB(MariaDB)と WordPress の接続 を自分で設定できる
  • wp-config.php の主要設定・セキュリティ・運用項目を説明できる

1. 仕組み(リクエストの流れと役割)

Browser → Apache(HTTP) → PHP (WordPress) → MariaDB(MySQL)
                                 ↑
                         wp-config.php(接続・挙動)
  • PHP:テーマ・プラグインのコードを実行し、HTMLを生成
  • DB(MariaDB):投稿・固定ページ・設定・ユーザー等を保存
  • ファイルシステム:WordPress本体、プラグイン/テーマ、画像アップロード
  • wp-config.php:DB接続、セキュリティキー、デバッグ、キャッシュ等の“振る舞い”を定義

2. 動作要件(Amazon Linux 2 例)

項目推奨
PHP8.1 以上(8.2 推奨)
PHP拡張mysqlnd, mbstring, json, curl, zip, xml, openssl, gd or imagick
DBMySQL 5.7+ / MariaDB 10.4+ 目安(Amazon Linux 標準の MariaDB で可)
WebApache 2.4+
HTTPSLet’s Encrypt 等で TLS 有効化推奨
権限ディレクトリ 755 / ファイル 644(オーナーとグループは環境に合わせる)

PHP 拡張確認:php -m
不足があれば:sudo yum install -y php-gd php-xml php-zip php-intl ImageMagick php-pecl-imagick など


3. 実習準備:WordPress 配置(未導入なら)

cd /var/www/html
sudo curl -LO https://wordpress.org/latest.tar.gz
sudo tar xzf latest.tar.gz
sudo rsync -a wordpress/ ./
sudo rm -rf wordpress latest.tar.gz
# 所有権(例:Apache が書けるよう ec2-user:apache)
sudo chown -R ec2-user:apache /var/www/html
find /var/www/html -type d -exec sudo chmod 755 {} \;
find /var/www/html -type f -exec sudo chmod 644 {} \;

既に配置済みならスキップ。/var/www/html が DocumentRoot の前提。


4. 実習①:DB(MariaDB)側の作成とユーザー付与

4.1 DB・ユーザーの作成(最小権限で付与)

mysql -u root -p
-- ① データベース作成(UTF8MB4 推奨)
CREATE DATABASE wpdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- ② 専用ユーザー作成(ローカル限定)
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'StrongPassw0rd!';

-- ③ 必要最小権限を付与(wpdb のみに)
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX
ON wpdb.* TO 'wpuser'@'localhost';

FLUSH PRIVILEGES;
EXIT;

4.2 接続テスト(オプション)

mysql -u wpuser -p -e "SHOW TABLES;" wpdb

→ エラーが出ずに実行できればOK(空でも良い)


5. 実習②:wp-config.php を作る

5.1 サンプルをコピー

cd /var/www/html
cp wp-config-sample.php wp-config.php

5.2 主要定数を編集

nano wp-config.php

以下を自分の値へ:

/** WordPress のためのデータベース名 */
define( 'DB_NAME', 'wpdb' );

/** MySQL データベースのユーザー名 */
define( 'DB_USER', 'wpuser' );

/** MySQL データベースのパスワード */
define( 'DB_PASSWORD', 'StrongPassw0rd!' );

/** MySQL のホスト名 */
define( 'DB_HOST', 'localhost' );

/** データベースの文字セット */
define( 'DB_CHARSET', 'utf8mb4' );

/** データベースの照合順序 */
define( 'DB_COLLATE', '' ); // 通常は空でOK

5.3 認証用ユニークキーとソルト(必須

ターミナルで自動生成して貼り付ける

curl -s https://api.wordpress.org/secret-key/1.1/salt/

出力(define('AUTH_KEY', ... など8行)を wp-config.php の該当箇所に丸ごと置換

これにより Cookie 改ざん耐性やログインセッションの強度が向上。

5.4 テーブル接頭辞(攻撃面の表層防御)

$table_prefix = 'wp_';   // 例:'wpx4_' 等に変更推奨

6. wp-config.php の重要オプション(運用・セキュリティ)

以下は 必要に応じて 追加。実運用時に有効。

/** 環境種別(WP5.5+): 'production' 'staging' 'development' */
define( 'WP_ENVIRONMENT_TYPE', 'production' );

/** 管理画面からのテーマ/プラグイン編集を禁止(改ざん対策) */
define( 'DISALLOW_FILE_EDIT', true );

/** デバッグ(本番は false、検証中のみ true) */
define( 'WP_DEBUG', false );
define( 'WP_DEBUG_LOG', true );   // /wp-content/debug.log
define( 'WP_DEBUG_DISPLAY', false );

/** メモリ上限(プラグイン多用時) */
define( 'WP_MEMORY_LIMIT', '128M' );
define( 'WP_MAX_MEMORY_LIMIT', '256M' );

/** HTTPS 強制(ALB/CloudFront 経由時など) */
// if ( isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
//   $_SERVER['HTTPS'] = 'on';
// }

/** 自動アップデートの制御(必要に応じて) */
// define( 'AUTOMATIC_UPDATER_DISABLED', true );

/** ファイル書き込み方法(権限要件により使用) */
// define( 'FS_METHOD', 'direct' ); // パーミッションが正しければ不要

7. 実習③:所有権・権限の最終調整

Apache がアップロード等を書き込めるよう最小限を整えます。

# 所有者例:開発は ec2-user、Web実行は apache グループ
sudo chown -R ec2-user:apache /var/www/html

# ディレクトリ 755 / ファイル 644
find /var/www/html -type d -exec sudo chmod 755 {} \;
find /var/www/html -type f -exec sudo chmod 644 {} \;

# アップロード先(wp-content/uploads)は実行権不要だが書込可で
mkdir -p /var/www/html/wp-content/uploads
sudo chown -R ec2-user:apache /var/www/html/wp-content/uploads
sudo chmod -R 775 /var/www/html/wp-content/uploads

775 を嫌う運用方針なら、所有者を apache:apache に寄せ 755/644 を維持する構成でも可。
いずれも 最小権限 を意識(安易な 777 禁止)。


8. 実習④:インストールウィザードで DB 接続を検証

  1. ブラウザで:
http://<EC2のパブリックIP>/wp-admin/install.php
  1. 画面に従い、サイト名・管理者ユーザー等を登録
  2. ログインしてダッシュボード表示で成功

もしウィザード前に「wp-config.php が無い」表示が出たら、作成済みかパスを確認。
DB 接続エラーなら DB 名・ユーザー・パスワード・ホスト(localhost)を再点検。


9. よくあるエラーと対処

症状原因対処
「データベース接続確立エラー」DB_NAME/USER/PASSWORD/DB_HOST の誤り / MariaDB 未起動systemctl status mariadbmysql -u wpuser -p テスト、wp-config.php 再確認
403/404DocumentRoot 直下に WP 配置できていない / パーミッション不正/var/www/html の構成と権限見直し
画像アップ不可wp-content/uploads 書き込み不可所有権と 775 or 755/グループ確認
管理画面から更新できないFS_METHOD 未設定+権限不足まず権限を正す。必要に応じ FS_METHOD 'direct'
HTTPS 混在警告サイトURL/ホームURL が http のまま一時的に「設定 > 一般」で https に修正(ALB 経由時は HTTP_X_FORWARDED_PROTO も)

10. 補足:WP-CLI(任意)

コマンドラインで WordPress を操作できる便利ツール。

cd /usr/local/bin
sudo curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
sudo php wp-cli.phar --info
sudo chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

# 例:URL 確認・変更
wp option get siteurl --path=/var/www/html
# wp option update siteurl 'https://example.com' --path=/var/www/html

11. まとめ(チェックリスト)

  • DB:wpdb 作成、wpuser@localhost 作成+権限付与
  • wp-config.php:DB 定数、ソルト、接頭辞、必要オプション
  • 権限:/var/www/html の所有権・755/644、uploads 書込可
  • ウィザード完了:ダッシュボードにログインできる
  • 最低限のセキュリティ:DISALLOW_FILE_EDIT、ソルト導入、管理者強固PW