WordPressの環境構築として、ローカル構築、AWS構築、セキュリティー対策までの手順を章立てて紹介しています。
- WordPress環境をローカルにdockerを使って構築する
- AWSにWordPress環境を構築!EC2にApache、RDSにMySQL使う
- お名前.comでドメインを取得してAWSでSSL化(https)の対応をする
- AWS環境のWordPressサイトヘルスステータス「1つ以上の必須モジュールが存在しません。」「バックルラウンドの更新が想定通りに動作していません。」の解消方法【Apache】
- AWSでWordPress構築をしたらやるべきセキュリティ対策【Apache】
ご自身の環境に合わせてよしなに参照してください。
AWS環境構築のポイント
- 構成:ブラウザ -> EC2(Apache) -> RDS(MySQL)
- EC2にWebサーバーとしてApache、DBはRDS(MySQL)を使って構築する。
- AWSの無料枠でできる構成でインフラ構築をする。
- AWSが展開しているAmazon RDS で WordPress をデプロイとチュートリアル: Amazon Linux 2 での WordPress ブログのホストを参考に構築。
- WordPressモジュールはGit管理されている前提とする。
- AWS構築時のタグはNameを定義しておくと分かりやすいので設定する。
構築の流れとしては
- VPCまわりの設定、構築をする
- EC2、RDSで必要となるセキュリティーグループの作成
- RDSのMySQLデータベースの作成
- EC2インスタンスの作成
- EC2にwordpressをインストール
- WordPressがパーマリンクを使用できるようにする
となる。
VPCまわりの設定、構築
- VPCの作成を行う。名前は任意で設定し、IPv4は他VPCのIPと被らないようにVPCを作成する。その他はデフォルトのまま。
- ステータスが「Associated」になればOK。
- ステータスが「Associated」になればOK。
- サブネットの作成を行う。サブネットは、マルチAZ構成になるようにpublic用、private用でそれぞれa,cで構築。
- public用のサブネット:後続の章でALBの構築時に2つのアベイラビリティーゾーンが必要となるので今回は2つ作成する(ALBを使わない場合は一つでもよい)。インターネットアクセスを許可するので、publicアクセスとして、サブネット名は任意の名前を設定し、アベイラビリティーゾーンはaとcを選択、IPv4は第3オクテットを1つずインクリメントして被らないようにして作成する。
- private用のサブネット:RDS構築時に2つのアベイラビリティーゾーンが必要となる。また、RDSはpublicアクセスはせず、ローカルIP(10.20.0.0/16)のみのアクセス、つまりprivateアクセスしか許容しないことによりセキュリティー担保をするので、privateアクセスとしてサブネット名は任意の名前を設定し、アベイラビリティーゾーンはaとcを選択、IPv4は第3オクテットを1つずインクリメントして被らないようにして作成する。
- ステータスが「Associated」になればOK。
- public用のサブネット:後続の章でALBの構築時に2つのアベイラビリティーゾーンが必要となるので今回は2つ作成する(ALBを使わない場合は一つでもよい)。インターネットアクセスを許可するので、publicアクセスとして、サブネット名は任意の名前を設定し、アベイラビリティーゾーンはaとcを選択、IPv4は第3オクテットを1つずインクリメントして被らないようにして作成する。
- インターネットGWの構築を行う。名前は任意の値を設定する。
- 作成するとDetachedの状態なので、インターネットGWをVPCにアタッチする。アクション > VPCにアタッチ を選択して、使用可能なVPCに先程つくったVPCを選択してアタッチ。
- 作成するとDetachedの状態なので、インターネットGWをVPCにアタッチする。アクション > VPCにアタッチ を選択して、使用可能なVPCに先程つくったVPCを選択してアタッチ。
- ルートテーブルのサブネットの関連付けを行う。internet gatewayに接続するpublic用と、ローカルターゲットの自身のIP(10.20.0.0/16)のみ許可するprivate用を作る。
- デフォルトで一つ作成されているので、まずはpublic用としてインターネット接続できるようにする。ルートを編集で送信先に「0.0.0.0/0」でターゲットにigwを選択して変更を保存する。
- publicサブネットを選択し、関連づけをする。
- ルート、サブネットの関連付けが下記のようになっていればOK。
- ルートテーブルを新規作成で、private用を作成する。名前は任意の値で設定し、VPCは先程作ったVPCを選択し、ルートテーブルを作成。
- ルートはデフォルトでローカルターゲットとなっているので、サブネットの関連付けのみを行う。private用のサブネットを選択し、関連付けを保存。
- ルート、サブネットの関連付けが下記のようになっていればOK。
- デフォルトで一つ作成されているので、まずはpublic用としてインターネット接続できるようにする。ルートを編集で送信先に「0.0.0.0/0」でターゲットにigwを選択して変更を保存する。
- DBサブネットグループの作成を行う。名前、説明は任意の値を入れて、先程作成したVPCを選択、アベイラビリティーゾーンはa,cを選択、サブネットはprivate用のサブネットa,cを選択し作成する。
- ステータスが完了になればOK。
- ステータスが完了になればOK。
EC2、RDSで必要となるセキュリティーグループの作成
- パブリックEC2用のセキュリティーグループの作成。セキュリティーグループ名、説明は任意の値を設定し、VPCは先程作成したものを選択、インバウンドルールは、HTTP/HTTPSはパブリックで全てのアクセスを許可し、SSHは開発者以外に接続されると困るので、今回は自宅IPのみ許可する。
- 正常に作成され、インバウンドルールが設定されていることを確認する。
- 正常に作成され、インバウンドルールが設定されていることを確認する。
- プライベートRDS用のセキュリティーグループの作成。セキュリティーグループ名、説明は任意の値を設定し、VPCは先程作成したものを選択、インバウンドルールは、MySQL/Auroraを選択し、プライベートなのでローカルターゲット(10.20.0.0/16)のみを許可する。
- 正常に作成され、インバウンドルールが設定されていることを確認する。
- 正常に作成され、インバウンドルールが設定されていることを確認する。
RDSのMySQLデータベースの作成
- RDSの作成を行う。MySQLで5系のバージョンを選択。この時の5系の最新が5.7なのでこちらを採用。
- テンプレートは無料枠を使い、インスタンス識別、マスターユーザ名は任意で入力。パスワードはセキュリティ面を考慮して強力なパスワードを自動生成とする。
- DBインスタンスクラス、ストレージ、可用性と耐久性はデフォルトのまま
- 作成したVPC、サブネットグループ、セキュリティーグループを反映。アベイラビリティーゾーンはa,cどちらでもOK。
- データベース認証はデフォルトのパスワード認証
- 最初のDB名を任意の名前で設定。
- バックアップ周りはデフォルトのまま。
- 作成した直後は作成中となる。パスワードは認証情報の詳細を表示で表示されるので忘れないようにメモをしておく。
EC2インスタンス作成
- EC2インスタンスの選択。無料枠を使いたいのでAmazon Linux2を選択。
- 無料枠のt2.microを選択。アクセスが増えてきたら性能が良いものに変えるかなどの検討をするので最初は無料枠。
- 作成したVPC、サブネットを選択し、自動割り当てパブリックIPは有効にする。サブネットはInternet Gatewayと接続するパブリックのものを選択する。今回はa側のサブネットを選択。その他はデフォルト値。
- セキュリティーグループはEC2ように作成したものを選択。
- ストレージの追加はデフォルト値のまま。
- タグはNameのみ設定
- 確認して作成する。キーペアは新規作成しダウンロードしてインスタンス作成。
- 「インスタンスは現在作成中です」となればOK。起動まで待ちましょう。
- 「インスタンスは現在作成中です」となればOK。起動まで待ちましょう。
- インスタンスのステータスがrunningになっていることを確認する。ここからEC2に接続して作業を行なっていくので、EC2インスタンスをチェックして接続ボタンを押すと、接続例がでてくるので参考にする。
- 今回はターミナルで接続する。ターミナルで接続できたらyumのupdate
sudo yum update
を行う。
- Mysqlの接続確認をしたいので、MySQLクライアントのインストール
sudo yum install mysql -y
をする。
- コマンド
mysql -h {RDSエンドポイント} -u {ユーザ名} -p
を実行し、passwordを聞かれるのでパスワードを入力する。MySQLに接続できればOK。
- ユーザはRDS作成時に設定したマスターユーザを入力、パスワードは自動生成されたものを入力、RDSのエンドポイントはRDS画面から確認できる。
- ユーザはRDS作成時に設定したマスターユーザを入力、パスワードは自動生成されたものを入力、RDSのエンドポイントはRDS画面から確認できる。
EC2にwordpressをインストール
- 必要なパッケージをインストールする。WebサーバーはApache
sudo yum install httpd -y
、phpはバージョン7.4
sudo amazon-linux-extras install -y php7.4
をインストールする。※amazon-linux-extrasは必要な関連パッケージもまとめてインストールしてくれる
- コマンド
sudo service httpd start
でApacheを起動する。
- EC2インスタンスのパプリックIP(今回だと54.238.154.232)にhttpアクセスするとApacheのTestページが表示されることを確認する。
- Githubで管理しているwordpressモジュールをつかってデプロイする。/var/www/html/に移動してgit
cloneでリポジトリをクローンする。※gitがインストールされてない場合は、sudo yum install git -y
- 実行したコマンドは下記。
[ec2-user@xxx ~]$ cd /var/www/html/ [ec2-user@xxx html]$ pwd /var/www/html [ec2-user@xxx html]$ ls # 何もないこを確認 [ec2-user@xxx html]$ sudo git clone https://{gitユーザ}:{アクセストークン}@github.com/{gitリポジトリ}.git . Cloning into '.'... remote: Enumerating objects: 2946, done. remote: Total 2946 (delta 0), reused 0 (delta 0), pack-reused 2946 Receiving objects: 100% (2946/2946), 15.42 MiB | 14.45 MiB/s, done. Resolving deltas: 100% (438/438), done. [ec2-user@xxx html]$ ls # フォルダの中身が展開されていることを確認 README.md license.txt wp-activate.php wp-blog-header.php wp-config-sample.php wp-cron.php wp-links-opml. php wp-login.php wp-settings.php wp-trackback.php index.php readme.html wp-admin wp-comments-post.php wp-content wp-includes wp-load. php wp-mail.php wp-signup.php xmlrpc.php [ec2-user@xxx html]$
- Apache ウェブサーバーを再起動
sudo service httpd restart
して変更を有効にする。
- 再度パブリックIPにアクセスするとwordpressのインストーラー画面が表示されるのでインストールを開始する。
- データベース名、ユーザー名、パスワード、ホスト名はRDS作成時に設定したものを入力。テーブル頭文字はWordPressを一つしかインストールしてないので、wp_のままでいく。
- 現状だとWordPressに書き込み権限がないので、ターミナルでwp-config-sample.phpをコピーしてwp-config.phpファイルを作成する
sudo cp wp-config-sample.php wp-config.php
。作成したファイルをviなどのエディターで開き、
sudo vi wp-config.php
選択したテキストをペーストしてインストールを実行。
- インストールが完了するとようこそ画面になるので、サイトタイトルを任意の値で設定し、ユーザを作成してWordPressをインストール。
- データベース名、ユーザー名、パスワード、ホスト名はRDS作成時に設定したものを入力。テーブル頭文字はWordPressを一つしかインストールしてないので、wp_のままでいく。
- ログインしてダッシュボード画面が表示されればOK!
- 補足:wp-config.phpにdb名やトークンなどを記述せずに、Apacheの環境変数定義を使う場合は、httpd.confにSetEnvを使って定義
- SetEnv WORDPRESS_DB_NAME english_blog
- SetEnv WORDPRESS_DB_PASSWORD XXXXXXXXXX
- SetEnv WORDPRESS_DB_HOST english-blog-db.XXXXXXXXXXXXX.ap-northeast-1.rds.amazonaws.com
- SetEnv WORDPRESS_DB_USER XXXXXXXXX
- などなど、トークン周りも設定するとよし。
WordPressがパーマリンクを使用できるようにする
WordPressのパーマリンクが正しく機能するには Apache の .htaccess ファイルを使用する必要がありますが、Amazon Linux ではデフォルトで有効になっていない。
Apache ドキュメントルートですべての上書きできるようにするために、httpd.confのAllowOverrideをAllにする。
sudo vi /etc/httpd/conf/httpd.conf # <Directory "/var/www/html"> で始まるセクションの「AllowOverride None」を「AllowOverride All」に変更する。
コメント