🧩 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 例)
| 項目 | 推奨 |
|---|---|
| PHP | 8.1 以上(8.2 推奨) |
| PHP拡張 | mysqlnd, mbstring, json, curl, zip, xml, openssl, gd or imagick |
| DB | MySQL 5.7+ / MariaDB 10.4+ 目安(Amazon Linux 標準の MariaDB で可) |
| Web | Apache 2.4+ |
| HTTPS | Let’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 接続を検証
- ブラウザで:
http://<EC2のパブリックIP>/wp-admin/install.php
- 画面に従い、サイト名・管理者ユーザー等を登録
- ログインしてダッシュボード表示で成功
もしウィザード前に「
wp-config.phpが無い」表示が出たら、作成済みかパスを確認。
DB 接続エラーなら DB 名・ユーザー・パスワード・ホスト(localhost)を再点検。
9. よくあるエラーと対処
| 症状 | 原因 | 対処 |
|---|---|---|
| 「データベース接続確立エラー」 | DB_NAME/USER/PASSWORD/DB_HOST の誤り / MariaDB 未起動 | systemctl status mariadb、mysql -u wpuser -p テスト、wp-config.php 再確認 |
| 403/404 | DocumentRoot 直下に 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