このブログは、AWS上で動かしているWordpressを使って運営しています。
画像ファイルをAWS S3から配信できないかと試していたところ、いろいろと問題が出てきたので、Wordpressの中身はそのままに環境を新しくしてみることにしました。
その作業の内容を簡単にまとめておきます。
環境確認
構成図を簡単に書いてみると、こんな感じでしょうか。
冗長構成はとっておらず、すべてシングル構成のシンプルな環境になっています。
お金があれば、ロードバランサを使って冗長構成にしたいのですが。。。
現環境
現在の環境は以下のようになっています。
項目 | 環境 |
---|---|
CMS | Wordpress 5.1.1 |
インフラ | AWS EC2 |
OS | CentOS |
Web | httpd 2.2 |
Database | MySQL on AWS RDS |
Domain | hosted a Zone on Route53 |
新環境
新環境は以下のようなイメージです。
変更するのは OS と Webサーバ の2つで、それ以外は現状の環境をそのまま引き継ぐことにします。
項目 | 環境 |
---|---|
CMS | Wordpress 5.1.1 |
インフラ | AWS EC2 |
OS | Amazon Linux 2 |
Web | httpd 2.4 |
Database | MySQL on AWS RDS |
Domain | hosted 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のインストール
ここを見ると、Wordpressは PHP 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なども、パッケージでインストールしたので非常に簡単でした。
これほど移行が簡単にできるのであれば、特に理由がなければソースからインストールする必要性はあまりなさそうですね。