
久々に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」でググってぽちぽち作業。できた!
・セキュリティーリスクをなくすためにルートアカウントに二要素認証をかける
古い記事だけどこれ相当のことをやる
・続いて、IAMを作る(AWSハルートアカウント利用を非推奨にしている)
・IAMも二要素認証(そして、ルートアカウントは封印)
これでアカウント設定はOK!
IAM roleの作成
・今回はEC2にssh接続しなくて良いようにAWS Systems Manager(ssm)を使いたいと思います。(これポイント!)
・そのためにEC2にアタッチするssmようのIAM Roleを作ります。
参考はこちら
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の機能の一つ)で入ります。
・初めてなので、まずは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)という定番の組み合わせでいきます。(発行にちょっと時間かかるけど無料)
参考はこちら
・Route53の向き先をALBに変更(Alias)
とりあえずこれで完成!
今後やりたいこと
・Sorryページ(静的)を用意し、S3にホスト。Route53で切り替える
→ デザインが必要なので後回し
・AWS WAFを入れる
→ 必要に応じて
・WordPressの設定諸々(テーマとかコンテンツ)
・Google Analyticsの導入
いいなと思ったら応援しよう!
