はじめに
AWS公式ドキュメントに Amazon Linux による WordPress ブログのホスティング というのがあります。
ですが、前提条件となるLAMP環境がphp7.2を使った手順となっているため、最新バージョンをベースにしたものとは言い難いです。
また、現在(2021/01/08)のWordPressの要件を見ると 「PHP バージョン 7.4 以上」「MySQL バージョン 5.6 以上、または MariaDB バージョン 10.1 以上」などとなっているため要件を満たしていない状況です。
というわけで、今回はphp7.4とmysql8.0を使ったWordPress環境の構築を行いたいと思います。
構築環境
今回のバージョンは以下となります。
OS:Amazon Linux 2
PHP:7.4
MySQL:8.0.22
WordPress:5.6
また、EC2の立ち上げやSecurityGroupの設定等については触れませんので適宜対応してください。
ソフトウェアパッケージのアップデート
まずは全てのソフトウェアパッケージを最新の状態にするため、ソフトウェアの更新を実行します。
$ sudo yum update -y
PHP
まず、phpのインストールを行います。AWSが用意しているリポジトリを利用してインストールを行い、必要になりそうなパッケージも追加でインストールしておきます。
インストール
Amazon Linux Extras リポジトリをインストールして、Amazon Linux 2 PHP パッケージの最新バージョンを取得します。
$ amazon-linux-extras list |grep php
15 php7.2 available \
17 lamp-mariadb10.2-php7.2 available \
31 php7.3 available \
42 php7.4 available [ =stable ]
現時点での最新バージョンはphp7.4のためphp7.4のリポジトリをインストールします。
$ sudo amazon-linux-extras enable php7.4
~~ 省略 ~~
Now you can install:
# yum clean metadata
# yum install php-cli php-pdo php-fpm php-json php-mysqlnd
リポジトリをインストールするとNow you can install:
と表示されるので実行します。
$ sudo yum clean metadata
$ sudo yum install php-cli php-pdo php-fpm php-json php-mysqlnd
追加パッケージのインストール
その他、必要になりそうなパッケージをインストールしておきます。
$ sudo yum install php php-gd php-mbstring php-opcache php-xml php-common
バージョン確認
$ php -v
PHP 7.4.11 (cli) (built: Oct 21 2020 19:12:26) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies
MySQL
次はmysqlのインストールです。
インストール
デフォルトだとリポジトリがないためMySQLのサイトからリポジトリを追加してインストールを行います。
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
$ sudo yum install --enablerepo=mysql80-community mysql-community-server mysql-community-devel
$ sudo systemctl start mysqld.service
$ sudo systemctl enable mysqld.service
初回のrootパスワードはmysql.log
に出力されます。
$ sudo grep password /var/log/mysqld.log
2021-01-06T02:45:38.728477Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: g1myqg3lgr#M
rootパスワード変更
rootパスワードの初回変更を行わないと操作ができないため、パスワードの再設定を行います。
$ mysql -uroot -p
パスワードは同じものを設定しても大丈夫です。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'g1myqg3lgr#M';
設定が完了したら一度ログアウトして再度ログインし直します。
データベース作成
ログインし直したら、まずデータベースの作成を行います。
mysql> CREATE DATABASE wp_database;
ユーザー作成
次にデータベースにアクセスできるWordPress用のユーザーを作成します。
mysql> CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'g1myqg3lgr#M';
mysql> GRANT ALL PRIVILEGES ON `wp_database `.* TO "wp_user"@"localhost";
mysql> FLUSH PRIVILEGES;
ログイン確認
$ mysql -uwp_user -p
バージョン確認
$ mysql --version
mysql Ver 8.0.22 for Linux on x86_64 (MySQL Community Server - GPL)
Apache
phpをインストールした時点でapacheは依存関連でインストールされています。
そのため起動させるだけでOKです。
起動
apacheを起動させ、自動起動設定を有効にします。
$ sudo systemctl start httpd
$ sudo systemctl enable httpd
確認
$ httpd -v
Server version: Apache/2.4.46 ()
Server built: Aug 24 2020 18:54:20
WordPress
必要となるソフトウェア周りの準備ができたので、最後にWordPressのインストールを行います。
パッケージダウンロード
最新のパッケージをダウンロードします。
$ wget https://wordpress.org/latest.tar.gz
ファイル名でlatest.tar.gz
を指定すると最新のものがダウンロードされます。
$ tar -xzf latest.tar.gz
conf設定
wp-config-sample.php
ファイルをwp-config.php
という名前でコピーします。
$ cp wordpress/wp-config-sample.php wordpress/wp-config.php
コピーしたwp-config.php
にmysqlのところで作成したデータベースとユーザーを設定します。
また、Authentication Unique Keys and Salts
というセクションの部分でKEY
とSALT
を設定します。
以下のURLからランダムに生成されるキーセット値を取得して設定します。
https://api.wordpress.org/secret-key/1.1/salt/
$ vim wordpress/wp-config.php
$ diff wordpress/wp-config-sample.php wordpress/wp-config.php
23c23
< define( 'DB_NAME', 'database_name_here' );
---
> define( 'DB_NAME', 'wp_database' );
26c26
< define( 'DB_USER', 'username_here' );
---
> define( 'DB_USER', 'wp_user' );
29c29
< define( 'DB_PASSWORD', 'password_here' );
---
> define( 'DB_PASSWORD', 'g1myqg3lgr#M' );
49,56c49,56
< define( 'AUTH_KEY', 'put your unique phrase here' );
< define( 'SECURE_AUTH_KEY', 'put your unique phrase here' );
< define( 'LOGGED_IN_KEY', 'put your unique phrase here' );
< define( 'NONCE_KEY', 'put your unique phrase here' );
< define( 'AUTH_SALT', 'put your unique phrase here' );
< define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
< define( 'LOGGED_IN_SALT', 'put your unique phrase here' );
< define( 'NONCE_SALT', 'put your unique phrase here' );
---
> define('AUTH_KEY', '****************************************************************');
> define('SECURE_AUTH_KEY', '****************************************************************');
> define('LOGGED_IN_KEY', '****************************************************************');
> define('NONCE_KEY', '****************************************************************');
> define('AUTH_SALT', '****************************************************************');
> define('SECURE_AUTH_SALT', '****************************************************************');
> define('LOGGED_IN_SALT', '****************************************************************');
> define('NONCE_SALT', '****************************************************************');
コンテンツコピー
WordPress をドキュメントルートで実行するために、コンテンツを次のようにコピーします。
ここで気をつけるポイントはディレクトリ自体はコピーしないということです。
$ sudo cp -r wordpress/* /var/www/html/
WordPress のパーマリンク設定
WordPress のパーマリンクが正しく機能するには Apache の .htaccess
ファイルを使用する必要がありますが、Amazon Linux はデフォルトで有効になっていません。Apache の ドキュメントルートですべての上書きができるように、<Directory "/var/www/html">
で始まるセクションにあるAllowOverride
をAll
に修正します。
$ sudo cp -pi /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf_org
$ sudo vim /etc/httpd/conf/httpd.conf
$ diff /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf_org
151c151
< AllowOverride All
---
> AllowOverride None
権限修正
WordPressで利用できる機能の中にはドキュメントルートへの書き込み権限が必要なものがあります(管理画面を使った、メディアのアップロードなど)。
まず、/var/www
とそのコンテンツのファイル所有権を apacheユーザー/グループ に付与します。
$ sudo chown -R apache /var/www
$ sudo chgrp -R apache /var/www
次に /var/www
と、そのサブディレクトリのグループ書き込み権限設定を行います。
setgidを設定することで、作成されたファイルはディレクトリが属するグループに属するようにしています。
$ sudo chmod 2775 /var/www
$ find /var/www -type d -exec sudo chmod 2775 {} \;
/var/www
およびそのサブディレクトリのファイル許可を繰り返し変更してグループの書き込み許可を追加します。
$ find /var/www -type f -exec sudo chmod 0664 {} \;
apache再起動
一通り設定したらapacheの再起動を行います(httpd.confも修正したので)。
$ sudo systemctl restart httpd
インストール
ブラウザアクセスを行いインストールを行います。
言語選択画面では 日本語 を選択します。
成功しました! が表示されれば完了です。
おわりに
今回のやり方は汎用的な方法なので、今後phpやmysqlの新しいバージョンがリリースされた場合は、それに応じてバージョンを上げていけば対応できると思います。
参考
- ja.wordpress.org - WordPress を実行するには、以下のホスティング環境を推奨します。
- docs.aws.amazon.com - チュートリアル: Amazon Linux 2 に LAMP ウェブサーバーをインストールする (ステップ 1: LAMP サーバーを準備する)
- docs.aws.amazon.com - チュートリアル: Amazon Linux による WordPress ブログのホスティング
- MySQL 8.0 Reference Manual - 2.5.1 Installing MySQL on Linux Using the MySQL Yum Repository
- MySQL Community Downloads