見出し画像

久々にAWSでWordPress環境を構築する

 今日はプライベートでWebサイトを立ち上げる必要が出てきたので、構築しながらその勘所をnoteにまとめようと思います。

構成

今回は AWS(EC2) + WordPress というお決まりの構成で立ち上げようと思います。

OS:Amazon Linux2・・・Session Managerを使って鍵管理から解放&セキュアにしたいから

Webサーバ:Nginx・・・速さ的に。

DB:MariaDB・・・今回はRDSを用意しないのでEC2内に構築

で行こうかなと思います。

この構成に至った背景はというと

 Q. そもそもマネージドサービスで良いのでは?(WIXなど)
 A. オリジナルドメインを使いたい
 A. ページ数やSNS埋め込みなど今後の拡張性から機能を縛られたくない。
 A. 金額もたかが知れているし、慣れている構成で。
Q.  なぜ、AWS?
 A. 慣れてるから。(AWS Solution Architect持ってるし、業務で毎日使ってる)
 A. 無料枠あるし、いざと慣ればAMI取ってアカウント引っ越せば良いw
Q. WordPressならEC2じゃなくてもAWS Lightsailでも良いのでは?
 A. AWSの他のサービスとも連携したい(route53、WAFなど)
 A. SSL証明書とかセキュリティー考えるとそんなに安くない
 A. 自由度が低い 

というわけで構築を進めていきます。

AWSアカウント作成 + IAM作成

・「AWS」でググってぽちぽち作業。できた!

スクリーンショット 2020-03-14 15.25.38

・セキュリティーリスクをなくすためにルートアカウントに二要素認証をかける

古い記事だけどこれ相当のことをやる

・続いて、IAMを作る(AWSハルートアカウント利用を非推奨にしている)

・IAMも二要素認証(そして、ルートアカウントは封印)

これでアカウント設定はOK!

IAM roleの作成

・今回はEC2にssh接続しなくて良いようにAWS Systems Manager(ssm)を使いたいと思います。(これポイント!)

・そのためにEC2にアタッチするssmようのIAM Roleを作ります。

スクリーンショット 2020-03-14 16.01.34

参考はこちら


EC2構築

・まずはEC2を立てる

・今回は前述の通り、Amazon Linux2なので、AWS MarcketPlaceにあるWordPless用AMIは使わず、自力でインストールします(WordPress用AMIはubuntuばっかり・・・)。

・インスタンスタイプは無料枠の対象のt2.micro。(t3.microにしたい・・・)

・IAM ロールに先ほど作ったIAM roleをつけるのを忘れずに!

・セキュリティグループは"Web from home"として自宅のWi-Fiからの443,22みのアクセスをまずは作成(固定IPじゃないから変わるけど・・・)

・Systems Managerを使うのでssh(22)は開けない!

・勇気を持って「キーペアなしで続行」を選ぶ

EC2ができた!

ミドルウェア群を入れていく

・まず、インスタンスへのサクセスはコンソールからSession Manager(System Managerの機能の一つ)で入ります。

スクリーンショット 2020-03-14 16.14.57

・初めてなので、まずはyum update

$ sudo yum update

・amazon-linux-extrasでNginxとphpをいれる(ちょっと攻めてみる)

$ sudo amazon-linux-extras install nginx1 php7.4

・Maria DBを入れる

$ sudo yum install mariadb-server

・nginxとMariaDBを起動

$ systemctl start nginx
$ systemctl start mariadb

・Maria DBのroot設定

$ sudo /usr/bin/mysql_secure_installation

参考はこちら

・MySQLの設定(下記コードはサンプル)

$ mysql -u root -p
> create database wordpress
> create user wpuser@localhost identified by 'wpuserpass';
> grant all on wordpress.* to wpuser@localhost;

参考はこちら


PHPとNginxの設定

・/etc/php-fpm.d/www.confを編集し、PHPがNginxを参照するように変更

- user = apache
- group = apache
+ user = nginx
+ group = nginx

・phpを再起動

$ sudo systemctl restart php-fpm

・テストファイルを/etc/nginx/nginx.confに置いたDocument rootに置く。

$ sudo vi /etc/nginx/html/index.php

・[EC2のグローバルIP]/index.phpにアクセス

アクセスできた!

WordPressのインストール

・WordPressをhttp://ja.wordpress.org/releases/からwgetでダウンロード

$ cd /tmp
$ wget https://ja.wordpress.org/wordpress-5.3.2-ja.tar.gz

ダウンロードしたファイルを解凍し、Nginxが読み込めるようにする。

$ tar zxvf wordpress-5.3.2-ja.tar.gz
$ sudo cp -r wordpress/* /usr/share/nginx/html

・データベースをWordPressで使用できるようにする

$ cd ~/usr/share/nginx/html/
$ cp wordpress/wp-config-sample.php wordpress/wp-config.php

・コピーしたwp-config.phpを開き、以下を変更

define('DB_NAME', 'database_name_here');
define('DB_USER', 'username_here');
define('DB_PASSWORD', 'password_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',       'ランダムな文字列');

・[EC2のグローバルIP]/にアクセス

・設定ページにリダイレクトされた!

参考はこちら

・ひとまずここでAMIを取得。

Route53でドメインを取得

・お名前.comには苦い思い出(更新しようと思ったら、お名前,comが落ちていてイライラ・・・)があるので今回はroute53で完結させます。

・ポチポチやったら取得できます。

参考はこちら

ドメインの適用

・まず、今回はALBを経由せずにroute53から直接EC2を参照するために固定のIPが必要です。なので、Elastic IPを取得して、EC2にアタッチし、route53経由でそこを参照します。

参考はこちら

ドメインでアクセスできた!

 SSL証明書を取得し、https通信に変更する

・今回はAmazon Certificate Manager(ACM) + Application Load Balancer(ALB)という定番の組み合わせでいきます。(発行にちょっと時間かかるけど無料)

参考はこちら

AWS Certificate Managerを使ってみた!こんにちは、開発部の森です。最近、AWS Certificate Manager(以下、ACMとする)を使用する機会があっwww.ecomottblog.com


・Route53の向き先をALBに変更(Alias)

とりあえずこれで完成!

今後やりたいこと

・Sorryページ(静的)を用意し、S3にホスト。Route53で切り替える

 → デザインが必要なので後回し

・AWS WAFを入れる

 → 必要に応じて

・WordPressの設定諸々(テーマとかコンテンツ)

・Google Analyticsの導入

主にPjM、PO、セールスエンジニア、AWS ソリューションアーキテクトなどを務める。「映像業界の働き方を変える」をモットーにエンジニア組織を超えたスクラムの導入、実践に奔走。DevLOVEなど各種コミュニティーにおいてチームビルディングやワークショップのファシリテーションを行う