EC2 Amazon Linux 2へWordPressサーバを引っ越し

システムAWS, EC2, Let's Encript, Linux, Nginx, php-fpm, RDS

どうも、UT(@ut_1029)です。WordPressをAWSへサーバ引っ越しました。その時のサーバ引っ越し作業手順を備忘録としてまとめました。

EC2 Amazon Linux 2へWordPressサーバを引っ越し
EC2 Amazon Linux 2へWordPressサーバを引っ越し
サーバ引っ越しについて

基本的に引っ越し前のWebサーバでWordPressが動いていた前提の内容となっています。動作環境としては"Nginx" “PHP-fpm" “MySQL"の構成です。

あと、AWSのアカウント作成とかEC2作成、RDS作成などは時間を見てスクリーンショット張って解説しようと思います。

サーバ引っ越しの流れ

  • AWS
    • AWSでアカウントを作成
    • EC2(Amazon Linux 2)を作成
    • RDS(MySQL)を作成
  • 旧サーバ
    • Nginx,PHP-fpmの設定ファイルをバックアップ
    • WordPressのファイルをバックアップ
    • MySQLに保存しているデータをバックアップ
  • 新サーバ
    • サーバ設定
    • Nginx,PHP-fpmをインストール
    • 旧サーバのNginx,PHP-fpmの設定を反映
    • WordPressを設置
    • MySQLへデータをリストア
    • SSLなど

AWSで作業

AWSにアカウントを作成する。
※ToDo:スクショ貼って開設予定。。。。

EC2を作成

Amazon Linux 2でEC2を作成する。
※ToDo:スクショ貼って開設予定。。。。

RDSを作成

MySQLでRDSを作成する。
※ToDo:スクショ貼って開設予定。。。。

新サーバで作業

サーバ初期設定

yumパッケージ更新

$ sudo yum update

タイムゾーン設定・確認

$ timedatectl status
      Local time: Fri 2018-11-23 05:56:04 UTC
  Universal time: Fri 2018-11-23 05:56:04 UTC
        RTC time: Fri 2018-11-23 05:56:04
       Time zone: n/a (UTC, +0000)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
$ sudo timedatectl set-timezone Asia/Tokyo
$ timedatectl status
      Local time: Fri 2018-11-23 14:56:43 JST
  Universal time: Fri 2018-11-23 05:56:43 UTC
        RTC time: Fri 2018-11-23 05:56:43
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

ロケール、キーボードレイアウト設定・確認

$ localectl status
   System Locale: LANG=en_US.UTF-8
       VC Keymap: n/a
      X11 Layout: n/a
$ sudo localectl set-locale LANG=ja_JP.UTF-8
$ sudo localectl set-keymap jp106
$ localectl status
   System Locale: LANG=ja_JP.UTF-8
       VC Keymap: jp106
      X11 Layout: jp
       X11 Model: jp106
     X11 Options: terminate:ctrl_alt_bksp

viを設定

$ vi ~/.vimrc
set encoding=utf-8
set fenc=utf-8
set title
set tabstop=4
set shiftwidth=4
set ignorecase
set smartcase
補足

.vimrcは、viの設定ファイル。自分好みのvi設定を追記することができる。

Gitをインストール

$ sudo yum install git

Nginxをインストール

Nginxのパッケージを確認

$ amazon-linux-extras list | grep nginx

Nginxをインストール

$ sudo amazon-linux-extras install nginx1
補足

Amazon Linux 2のパッケージ管理である「amazon-linux-extras」を使うことで、より新しいNginxをインストールすることが出来る。

Nginxのバージョンを確認

$ nginx -v
nginx version: nginx/1.12.2

PHP-fpmをインストール

PHPをインストール

$ sudo amazon-linux-extras install php7.2
補足

Amazon Linux 2のパッケージ管理である「amazon-linux-extras」を使うことで、より新しいPHPをインストールすることが出来る。

PHPのバージョンを確認

$ php -v
PHP 7.2.11 (cli) (built: Oct 24 2018 17:51:11) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.11, Copyright (c) 1999-2018, by Zend Technologies

PHP-fpmのバージョンを確認

$ php-fpm -v
PHP 7.2.11 (fpm-fcgi) (built: Oct 24 2018 17:55:29)
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.11, Copyright (c) 1999-2018, by Zend Technologies

mbstringをインストール

$ sudo yum install php php-mbstring
補足

mbstringをインストールしないとWordPressでエラーが発生する。

MySQL(MariaDB)をインストール

MariaDBをインストール

$ sudo yum install mariadb
補足

Amazon Linux 2 は、MysqlではなくMariaDBをインストールする。

旧サーバで作業

各種設定ファイルを圧縮ファイル

NginxとPHPの各種設定ファイルを圧縮ファイルへ

$ sudo tar zcf /tmp/etc.files.tar.gz /etc/nginx /etc/php-fpm.d /etc/php.ini /etc/php-fpm.conf
補足

「/etc/nginx」「/etc/php-fpm.d」「/etc/php.ini」「/etc/php-fpm.conf」
を圧縮ファイルへ詰め込んでいる。

WordPressを圧縮ファイルへ

$ sudo tar zcf /tmp/wordpress.files.tar.gz /var/www/blog

DBをダンプ

WordPressのデータベースのデータと定義をダンプ

$ mysqldump -h RDSのエンドポイント -u ユーザ名 -p データベース名 > /tmp/wordpress.dump.sql

ローカルPCで作業

旧サーバの各種設定ファイルとDBダンプファイルをSCPでダウンロード

ローカルPCへ旧サーバのファイルをSCPでダウンロード

$ scp -i SSHの鍵 ユーザ名@IPアドレスorドメイン:/tmp/etc.files.tar.gz /tmp/
$ scp -i SSHの鍵 ユーザ名@IPアドレスorドメイン:/tmp/wordpress.files.tar.gz /tmp/
$ scp -i SSHの鍵 ユーザ名@IPアドレスorドメイン:/tmp/wordpress.dump.sql /tmp/
補足

面倒だったら旧サーバから新サーバへ直接ファイル転送してもOK。ただその場合は、旧サーバへ新サーバのSSH鍵を配置しておく必要がある。

新サーバへ転送

ローカルPCから新サーバへファイルをSCPで転送

$ scp /tmp/etc.files.tar.gz -i SSHの鍵 ユーザ名@IPアドレスorドメイン:/tmp/
$ scp /tmp/wordpress.files.tar.gz -i SSHの鍵 ユーザ名@IPアドレスorドメイン:/tmp/
$ scp /tmp/wordpress.dump.sql -i SSHの鍵 ユーザ名@IPアドレスorドメイン:/tmp/

新サーバで作業

旧サーバの各種設定ファイルを配置する

Nginx設定ファイルを配置

ファイルを解凍

$ tar zxvf /tmp/etc.files.tar.gz

元ファイルを退避

$ sudo mv /etc/nginx/ /etc/nginx~

ファイルを配置

$ sudo mv /tmp/nginx /etc/nginx

PHP設定ファイルを設定

元ファイルを退避

$ sudo mv /etc/php-fpm.d /etc/php-fpm.d~
$ sudo mv /etc/php.ini /etc/php.ini~
$ sudo mv /etc/php-fpm.conf /etc/php-fpm.conf~

ファイルを配置

$ sudo mv /tmp/php-fpm.d /etc/php-fpm.d
$ sudo mv /tmp/php.ini /etc/php.ini
$ sudo mv /tmp/php-fpm.conf /etc/php-fpm.conf

WordPressをドキュメントルートへ配置

ファイルを解凍

$ tar zxvf /tmp/wordpress.files.tar.gz

ドキュメントルートを準備

$ sudo mkdir /var/www

ファイルを配置

$ sudo mv /tmp/blog /var/www

ファイルのパーミッションを設定

$ sudo chown -R nginx:ec2-user /var/www
$ sudo chmod -R 775 /var/www

WordPressの設定ファイルを編集

$ vi /var/www/blog/wp-config.php
補足

WordPressの設定ファイルにRDSのエンドポイントを追記する。ほか変更あれば適宜編集する。

DBをリストア

データベースを作成(作っていない場合)

CREATE DATABASE wordpress;

DBへダンプしたファイルを流し込んでリストア

$ mysql -h RDSのエンドポイント -u ユーザ名 -p データベース名 < /tmp/wordpress.dump.sql

ドメイン切り替え

ドメインを新サーバへ切り替えを行う。

補足

事前にローカルPCのhostsファイルを編集して動作確認をしておくと安全。

# MACの場合
$ sudo vi /private/etc/hosts

Let’s Encrypt でSSL設定

certbot-autoをcURLでインストール

$ sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto

Amazon Linux 2 に対する考慮を行う

$ sudo vi /usr/bin/certbot-auto
elif [ -f /etc/issue ] && grep -iq "Amazon Linux" /etc/issue ; then
  Bootstrap() {
    ExperimentalBootstrap "Amazon Linux" BootstrapRpmCommon
  }
  BOOTSTRAP_VERSION="BootstrapRpmCommon $BOOTSTRAP_RPM_COMMON_VERSION"
↓ へ編集
elif grep -i "Amazon Linux" /etc/issue > /dev/null 2>&1 || \
   grep 'cpe:.*:amazon_linux:2' /etc/os-release > /dev/null 2>&1; then
  Bootstrap() {
    ExperimentalBootstrap "Amazon Linux" BootstrapRpmCommon
  }
  BOOTSTRAP_VERSION="BootstrapRpmCommon $BOOTSTRAP_RPM_COMMON_VERSION"
補足

Amazon Linux 2の対応が施されていないっぽいので、certbot-autoファイルを編集する必要がある。

# --webroot Webサーバを利用して証明書を取得する
# -w ドキュメントルートの値
# -d ドメインの値
# --debug Amazon Linux 2は試験的な運用のためこのオプションを指定
# -v 証明書発行の過程を詳細に表示する
$ sudo certbot-auto certonly --webroot -w <YOUR_DOCUMENT_ROOT> -d <PUBLIC_DNS> --debug -v

作成された証明書を確認

$ sudo ls /etc/letsencrypt/live/<PUBLIC_DNS>/

さいごに

これでサーバの引っ越しはできるかと思います。ただNginxやPHPのバージョンだったりOSの違いなどでうまくいかないこともあると思います。

実は、今回作業している様子を動画にしようと思ったのですが、なかなか面倒だったりして先にブログだけ書きあげちゃいました。なので、動画作るか画面キャプチャを貼るかしようと思います。

UTについて
UTの日常

当ブログの管理者UT(プロフィール)です。
無理せず投稿をモットーに頑張っています。なので、更新頻度は低いです。


ブログを読んで頂きありがとうございます。
もし少しでも気に入って下さった方の中で、「応援してあげてもいいよ」という方がいらっしゃいましたら、下記よりご支援をお願いいたします。
Amazonギフト券(Eメールタイプ Amazonベーシック)

メールのあて先はut.1029.amazon@gmail.comです。
金額は空白欄に適当に(15円から)書きこんで下さい。(あらかじめ入っている金額はAmazonの設定なので気になさらないでください)

応援いただけるとすごく嬉しいですm(_ _)m

Amazonギフトでのご支援をお願いします。

フォローしてね!