0
0

AWS 練習 : WordPress 構築 (amazonlinux, nginx, MariaDB)

Posted at

AWS の EC2 上に WordPress を構築する。

環境

  • amazon linux 2023
  • nginx 1.24
  • php 8.2
  • MariaDB 10.6.14 (RDS)

データベースについては、EC2 にインストールしても RDS で作成してもやることは同じだった。
単純に WordPress 構築だけを目指すなら Apache + MySQL の方が簡単らしい。

Webサーバーの構築

WordPress のルートディレクトリを作成し、nginx + php-fpm で web サーバーを構築する。

WordPress のソースファイルを配置

公式からソースファイルをダウンロードして任意の場所に展開。
今回はルートディレクトリを "/var/www/wordpress" とした。

cd /var/www
sudo curl -O https://ja.wordpress.org/latest-ja.tar.gz
sudo tar xzf latest-ja.tar.gz
sudo rm lsatest-ja.tar.gz

パッケージをインストール

  • nginx
  • php
  • php8.2-mysqlnd
  • php8.2-gd
インストールコマンド
sudo dnf install <パッケージ名>

nginx で PHP を動かすには php-fpm が必要だが、パッケージ名 php でインストールすると php8.2-fpm も一緒にインストールされた。
ただし、このパッケージには mysqlnd と gd が含まれないため、この2つは別途インストールが必要。

nginx と php-fpm の連携

nginx の設定

"~.php" でのアクセスを nginx から php-fpm に投げるように設定ファイルを変更する。
nginx の設定ファイルの構文では、設定項目をディレクティブ、その適用範囲をグループ化する構造をブロックと呼び、デフォルトの設定ファイルには、http > server > location というブロックの階層構造が定義されている。
この中の server ブロックに WordPress のルートディレクトリと php へのアクセス処理を追加する。

/etc/nginx/nginx.conf
server {

    listen       80;
    listen       [::]:80;
    server_name  _;  # サーバーの名前
    root         /var/www/wordpress;  # 変更: WordPress のソースファイルを置く場所に変更
    index        index.php index.html index.htm;  # 変更: index.php を追加

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    # この location ブロックを追加
    location ~ \.php$ {
            fastcgi_pass    unix:/run/php-fpm/www.sock;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME /var/www/wordpress$fastcgi_script_name;
            include         fastcgi_params;
    }

    error_page 404 /404.html;
    location = /404.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
}

root や index ディレクティブは location ブロックに書いてる例もあったが、サブサイトみたいな構成にしない限り影響なさそう。
ちなみに、この設定だと https に対応していないため、アドレスバーに URL を貼り付けてアクセスする場合は http://~ に修正すること。
https 対応の手順は別記事を参照。

php-fpm の設定

デフォルトではプロセスの実行ユーザーが "apache" となっているため、これを ”nginx” ユーザーに変更する。

/etc/php-fpm.d/www.conf
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used. 
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx  # 変更
; RPM: Keep a group allowed to write in log dir.
group = nginx  # 変更

動作確認

次のファイルを作成し、web サーバーを起動してブラウザでアクセスする。

/var/www/wordpress/test.php
<?php phpinfo();
nginx の起動
sudo service start nginx

WordPress のインストール

公式のインストール方法に従って、"wp-config.php" に MariaDB への接続情報を記載し、ブラウザで "/wp-admin/install.php" へアクセスするだけ。
ここでインストール画面が表示されない場合は "wp-config.php" の接続情報と、php 関係のパッケージのインストール状態を確認。

php-mysqlnd
これがないと "mysqli_connect()" 関数が見つからず WordPress の php スクリプトが止まる。
しかもブラウザ側は 404 で表示され、エラー内容がわからないため、最初にこれでつまづいた。

php-gd
これがなくても WordPress のインストールは完了できるが、WordPress 上での画像編集ができない。
このエラーについては、WordPress 管理画面のサイトヘルスで"重大なエラー"として表示されるので気づきやすい。

WordPress の FTP 接続

インストール完了後に、テーマを追加しようとしたら「FTP の接続情報を入力してください」というダイアログが表示され、テーマのインストールができなかった。
この原因は、WordPress が web サーバーとのファイルのやり取りに FTP (SFTP) を使って動いているためで、これは web サーバーとサイトの管理者が異なる場合でも、サーバーのファイル操作ができるようにするための仕様とのこと。
しかし、今回の構成ではサーバーもサイトも同じ管理者なので、FTP を使う必要がなく、このために FTP サーバーを稼働させてパスワード管理するのも面倒なので、他の人を参考にして、FTP なしで動作するよう設定を変更した。

FTP 接続の無効化設定

準備として、ルートディレクトリ以下の所有者を変更し、nginx ユーザーでファイルの作成と削除ができるようにする。

sudo chwon -R nginx:ec2-user /var/www/wordpress

WordPress の設定ファイルに FTP を使用しない設定を追加する。

/var/www/wordpress/wp-config.php
/* Add any custom values between this line and the "stop editing" line. */

/* That's all, stop editing! Happy publishing. */

define( 'FS_METHOD', 'direct' );  # この1行を追加

/* Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
        define( 'ABSPATH', __DIR__ . '/' );
}

以上で完了、無事にテーマやプラグインの追加もできるようになった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0