Wordpressの環境を移行してみた

このブログは、AWS上で動かしているWordpressを使って運営しています。

画像ファイルをAWS S3から配信できないかと試していたところ、いろいろと問題が出てきたので、Wordpressの中身はそのままに環境を新しくしてみることにしました。
その作業の内容を簡単にまとめておきます。

環境確認

構成図を簡単に書いてみると、こんな感じでしょうか。
冗長構成はとっておらず、すべてシングル構成のシンプルな環境になっています。
お金があれば、ロードバランサを使って冗長構成にしたいのですが。。。

現環境

現在の環境は以下のようになっています。

項目環境
CMSWordpress 5.1.1
インフラAWS EC2
OSCentOS
Webhttpd 2.2
DatabaseMySQL on AWS RDS
Domainhosted a Zone on Route53

新環境

新環境は以下のようなイメージです。
変更するのは OS と Webサーバ の2つで、それ以外は現状の環境をそのまま引き継ぐことにします。

項目環境
CMSWordpress 5.1.1
インフラAWS EC2
OSAmazon Linux 2
Webhttpd 2.4
DatabaseMySQL on AWS RDS
Domainhosted a Zone on Route53

環境構築

EC2インスタンスの作成

AWSマネジメントコンソールから、EC2インスタンスを作成します。
使用したAMIは「Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-061392db613a6357b (64 ビット x86)」です。

こちらは特別な設定は行わずに、素直に作成しました。

OSの初期設定

作成したEC2インスタンスで動作している Amazon Linux 2 へログインして、諸々の環境を整えていきます。

まずは、OSのバージョンなどを確認してみました。

$ uname -a
Linux ip-10-0-20-108.us-west-2.compute.internal 4.14.104-95.84.amzn2.x86_64 #1 SMP Sat Mar 2 00:40:20 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/system-release
Amazon Linux release 2 (Karoo)

続いて、タイムゾーンを設定します。

$ sudo su -
# timedatectl set-timezone Asia/Tokyo

必要なパッケージもインストールしておきましょう。

# yum -y update
# yum -y install gcc
# yum -y install gcc-c++

PHPのインストール

ここを見ると、WordpressPHP 7.3以上を推奨しているようです。

Amazon Linux 2 で PHP 7系 をインストールするには、amazon-linux-extrasコマンドを使います。
インストールできるPHPのバージョンを見てみると、以下のような感じでした。
PHP 7.2系までしかないみたいですね。。。

# amazon-linux-extras list

  0  ansible2                 available    [ =2.4.2  =2.4.6 ]
  2  httpd_modules            available    [ =1.0 ]
  3  memcached1.5             available    [ =1.5.1 ]
  4  nginx1.12                available    [ =1.12.2 ]
  5  postgresql9.6            available    [ =9.6.6  =9.6.8 ]
  6  postgresql10             available    [ =10 ]
  8  redis4.0                 available    [ =4.0.5  =4.0.10 ]
  9  R3.4                     available    [ =3.4.3 ]
 10  rust1                    available    \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0 ]
 11  vim                      available    [ =8.0 ]
 13  ruby2.4                  available    [ =2.4.2  =2.4.4 ]
 15  php7.2                   available    \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11  =7.2.13  =7.2.14 ]
 16  php7.1                   available    [ =7.1.22  =7.1.25 ]
 17  lamp-mariadb10.2-php7.2  available    \
        [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5
          =10.2.10_7.2.8  =10.2.10_7.2.11  =10.2.10_7.2.13
          =10.2.10_7.2.14 ]
 18  libreoffice              available    [ =5.0.6.2_15  =5.3.6.1 ]
 19  gimp                     available    [ =2.8.22 ]
 20  docker=latest            enabled      \
        [ =17.12.1  =18.03.1  =18.06.1 ]
 21  mate-desktop1.x          available    [ =1.19.0  =1.20.0 ]
 22  GraphicsMagick1.3        available    [ =1.3.29 ]
 23  tomcat8.5                available    \
        [ =8.5.31  =8.5.32  =8.5.38 ]
 24  epel                     available    [ =7.11 ]
 25  testing                  available    [ =1.0 ]
 26  ecs                      available    [ =stable ]
 27  corretto8                available    [ =1.8.0_192  =1.8.0_202 ]
 28  firecracker              available    [ =0.11 ]
 29  golang1.11               available    [ =1.11.3 ]
 30  squid4                   available    [ =4 ]
 31  php7.3                   available    [ =7.3.2 ]
 32  lustre2.10               available    [ =2.10.5 ]

ということなので、7.3には届きませんが、7.2.14 をインストールしました。

# amazon-linux-extras info php7.2

php7.2 recommends php-cli                    # yum install php-cli
php7.2 recommends php-pdo                    # yum install php-pdo
php7.2 recommends php-fpm                    # yum install php-fpm
php7.2 recommends php-json                   # yum install php-json
php7.2 recommends php-mysqlnd                # yum install php-mysqlnd

# amazon-linux-extras install php7.2

必要になりそうなモジュールも入れておきます。

# yum -y install php-mbstring
# yum -y install php-gd
# yum -y install php-xml

通常のyumコマンドで PHP をインストールすると、httpdなども一緒にインストールされるので、一気に入れておきます。

# yum -y install httpd

Wordpressの移行

現環境で動作しているWordpressを新環境へ移行します。

現環境のWordpressは、/data/wordpress というディレクトリに配置しているので、ディレクトリをアーカイブして新環境へ転送します。

# cd /data
# tar zxvf wordpress.tar.gz

アーカイブしたwordpress.tar.gzは、scpコマンドなどで新環境へコピーし、新環境の/dataディレクトリに展開しておきます。

# tar zcvf wordpress.tar.gz ./wordpress

httpdの設定

新環境のhttpd.confを、現環境と同じ内容で設定します。
今回は、httpd2.2系からhttpd2.4系とバージョンを上げているので、httpd.confの書き方も少し変わっていました。
この辺りを参考に、httpd.confを修正しました。

設定が終わったら、httpdを起動させます。

# systemctl start httpd
# systemctl enable httpd

切り替え

最後に、現環境のEC2に関連づけているElastic IPを、新環境のEC2に付け替えます。
これで、Wordpressにアクセスした際に、新環境へリクエストが流れるようになります。

ただ、DNSのキャッシュが残っている場合がありますので、切り替わるまでには少し時間がかかる場合もあります。
ディフォルトだと、Aレコードのキャッシュ時間は300秒です。

まとめ

かなりざっくりとしたメモレベルの内容になりますが、データベースを別ホストで動かしている場合は、Wordpressを新しいEC2インスタンスに切り替えるのは思いのほか簡単にできました。

httpdなども、パッケージでインストールしたので非常に簡単でした。
これほど移行が簡単にできるのであれば、特に理由がなければソースからインストールする必要性はあまりなさそうですね。