11
14

More than 3 years have passed since last update.

Amazon Linux 2 で LAMP をインストールして WordPress 環境を構築する。

Posted at

はじめに

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 パッケージの最新バージョンを取得します。

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
phpインストール
$ 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
mysqlインストール
$ sudo yum install --enablerepo=mysql80-community mysql-community-server mysql-community-devel
mysql起動
$ sudo systemctl start mysqld.service
mysql自動起動の有効化
$ sudo systemctl enable mysqld.service 

初回のrootパスワードはmysql.logに出力されます。

rootパスワード確認
$ 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を起動させ、自動起動設定を有効にします。

apache起動
$ sudo systemctl start httpd
apache自動起動の有効化
$ sudo systemctl enable httpd

確認

apacheバージョン確認
$ 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という名前でコピーします。

wp-config.php作成
$ cp wordpress/wp-config-sample.php wordpress/wp-config.php

コピーしたwp-config.phpにmysqlのところで作成したデータベースとユーザーを設定します。
また、Authentication Unique Keys and Saltsというセクションの部分でKEYSALTを設定します。
以下のURLからランダムに生成されるキーセット値を取得して設定します。
https://api.wordpress.org/secret-key/1.1/salt/

wp-config.php修正
$ 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"> で始まるセクションにあるAllowOverrideAllに修正します。

$ 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

インストール

ブラウザアクセスを行いインストールを行います。
言語選択画面では 日本語 を選択します。
スクリーンショット 2021-01-06 12.45.34.png

項目を入力して WordPressをインストール します。
9.png

成功しました! が表示されれば完了です。

スクリーンショット 2021-01-06 12.48.37.png

おわりに

今回のやり方は汎用的な方法なので、今後phpやmysqlの新しいバージョンがリリースされた場合は、それに応じてバージョンを上げていけば対応できると思います。

参考

11
14
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
11
14