LoginSignup
4
4

More than 3 years have passed since last update.

VPC+EC2+Apache+MariaDBでWordPressを構築し、独自ドメイン+https化

Last updated at Posted at 2020-09-19

本記事を作成することになったきっかけ

自分のポートフォリオを公開するには何がいいだろうか?と考えた時にWordPressがふと思い浮かびました。
なので、AWSにWordPressが動くサーバーを構築しようと思い、その手順を残そうと思いました。
あとWordPressを使えばアフィリエイトでお金稼ぎできるようになるので、やり方を知ってて損は無いなということで記事にしようと思いました。まあ僕がアフィリエイトやっても絶対稼げないんですけどね。アフィリエイトやりたいと思った人の助けにもなればいいなと思いました。

対象の読者

WordPressを使いたい人
オリジナリティのあるブログを始めたい人
アフィリエイトをやりたい人
インフラ構築を勉強したい人
mac利用者
AWSアカウント作成済
クレジットカードをAWSに登録済

バージョン情報

あらかじめどのバージョンを使用しているか記載しておきます。
バージョンによってやり方全然違ったりするので・・・。

ソフト バージョン
Linux Amazon Linux 2 AMI (HVM), SSD Volume Type ami-0053d11f74e9e7f52 (64 ビット x86)
Apache 2.4.46
PHP 7.3.21
MariaDB 15.1
WordPress 5.5.1

最初RDSを組み合わせてやろうと思ったのですが値段が高いのでやめました。
個人利用であればわざわざ追加するほどのものでも無いですし。
技術的にもさほど難しくないのであまり勉強にならなさそうですし。
需要あれば解説します。簡単に変えられるので。

VPCの作成

以下のネットワーク構成にします。

スクリーンショット 2020-09-19 11.52.14.jpg

難しいと思った方はすみません。1つ1つの作り方をきちんと解説します。
簡単な構成だと思った方もすみません。ぶっちゃけWordPress作るくらいならこれくらいの構成で十分だなって。

下準備として、ネットワーク構築のために、VPCの設定を行います。

AWSでVPCを開きます。
スクリーンショット 2020-09-18 23.06.55.jpg

左のメニューからVPCをクリックします。
スクリーンショット 2020-09-18 23.07.57.jpg

VPCの作成をクリックします。
スクリーンショット 2020-09-18 23.08.25.jpg

VPCの設定をします。
名前タグをWordPress、IPv4 CIDRブロックを172.168.0.0/16としました。
スクリーンショット 2020-09-18 23.09.52.jpg

VPCの作成をクリックします。
スクリーンショット 2020-09-18 23.10.55.jpg

ここまでできました。
スクリーンショット 2020-09-19 12.05.42.jpg

EC2を配置するためのサブネットが必要なので、左のメニューからサブネットを選択し、サブネットの作成をクリックします。
スクリーンショット 2020-09-19 12.00.05.jpg

スクリーンショット 2020-09-19 12.00.23.jpg

名前タグをWordPressサブネットにして、VPCを先ほど作成したVPC(WordPress)にします。
アベイラビリティーゾーンをap-northeast-1aにします。
IPv4 CIDRブロックを172.168.0.0/20にします。
入力が終わったら作成をクリックします。
スクリーンショット 2020-09-18 23.28.04.jpg

サブネットが作成されたことを確認して閉じるをクリックします。
スクリーンショット 2020-09-18 23.28.28.jpg

ここまでできました。
スクリーンショット 2020-09-19 12.01.47.jpg

VPCがインターネットに繋がってないので、繋げる必要があります。
左のメニューからインターネットゲートウェイを選択します。
スクリーンショット 2020-09-18 23.54.03.jpg

インターネットゲートウェイの作成をクリックします。

スクリーンショット 2020-09-18 23.54.14.jpg

名前タグをWordPressゲートウェイにしてインターネットゲートウェイの作成をクリックします。

スクリーンショット 2020-09-18 23.54.42.jpg

インターネットゲートウェイをVPCにくっつける必要があるのでVPCへアタッチをクリックします。

スクリーンショット 2020-09-18 23.55.40.jpg

WordPressのVPCを選択してインターネットゲートウェイのアタッチをクリックします。

スクリーンショット 2020-09-18 23.56.00.jpg

アタッチされたらOKです。
スクリーンショット 2020-09-18 23.56.47.jpg

ここまでできました。
スクリーンショット 2020-09-19 12.03.03.jpg

インターネットとインターネットゲートウェイは自動的に繋がりますし、ルートテーブルはインターネットゲートウェイ作成時に自動的に作成されます。

しかし、不親切なことにサブネットからルートテーブルへのルーティングと、インターネットゲートウェイからルートテーブルへのルーティングが無いんですよね・・・

スクリーンショット 2020-09-19 12.09.27.jpg

仕方ないので、作成する必要があります。

まずはサブネットからルートテーブルへのルーティングを作成します。
左のメニューからVPCをクリックします。
スクリーンショット 2020-09-19 0.43.44.jpg

WordPressのVPC IDをクリックします。

スクリーンショット 2020-09-19 0.43.58.jpg

ルートテーブルのところにリンクがあるのでクリックします。

スクリーンショット 2020-09-19 0.44.37.jpg

サブネットの関連付けをクリックしてサブネットの関連付けの編集をクリックします。

スクリーンショット 2020-09-19 0.45.21.jpg

WordPressサブネットを選択して保存をクリックします。
スクリーンショット 2020-09-19 0.45.51.jpg

続けて、インターネットゲートウェイからルートテーブルへのルーティングを作成します。

ルートタブでルートの編集をクリックします。

スクリーンショット 2020-09-19 0.57.09.jpg

送信先を0.0.0.0/0にして、ターゲットをInternet GatewayのWordpressゲートウェイにします。(画像では表示されていませんが選択時にWordPressゲートウェイと表示されます)
終わったらルートの保存をクリックします。
スクリーンショット 2020-09-19 0.58.56.jpg

ルートが正常に編集されたことを確認します。

スクリーンショット 2020-09-19 0.59.34.jpg

これで、無事インターネットゲートウェイとサブネットが繋がるようになりました。

スクリーンショット 2020-09-19 12.10.18.jpg

ネットワーク構築はこれで完成!

ただ、ネットワークを構築してもサーバーをどこかに配置してあげないと意味がないのでサーバーを作成します。

EC2の作成

サーバー本体を作成するために、EC2インスタンスを作成します。

スクリーンショット 2020-09-19 12.15.12.jpg

EC2を開きます。

スクリーンショット 2020-09-18 23.16.01.jpg

リージョンが東京となっていることを確認します。

スクリーンショット 2020-09-18 23.16.28.jpg

左のメニューからインスタンスをクリックします。
スクリーンショット 2020-09-18 23.17.00.jpg

インスタンスを起動をクリックします。
スクリーンショット 2020-09-18 23.17.33.jpg

Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-0053d11f74e9e7f52 (64 ビット x86)を選択します。

スクリーンショット 2020-09-18 23.21.28.jpg

インスタンスタイプはt2.microにして次のステップ:インスタンスの詳細の設定をクリックします。
スクリーンショット 2020-09-18 23.23.12.jpg

ネットワークをWordPressに設定し、サブネットをWordPressサブネットに変更します。
自動割り当てパブリックIPを有効にします。
入力が終わったら次のステップ:ストレージの追加をクリックします。
スクリーンショット 2020-09-18 23.33.00.jpg

ストレージはデフォルトで問題ありません。
次のステップ:タグの追加をクリックします。
スクリーンショット 2020-09-18 23.34.08.jpg

タグの追加をクリックして、
キーをName、値をWordPressインスタンスにします。
終わったら次のステップ:セキュリティグループの設定をクリックします。
スクリーンショット 2020-09-18 23.35.25.jpg

新しいセキュリティグループを作成します。
セキュリティグループ名をWordPress-sgにします。
SSH接続するための設定はデフォルトで設定されているのでそのままにします。
SSH接続はあとで嫌というほどやります。
HTTP(セキュリティ対策してないやつ)とHTTPS(セキュリティ対策してるやつ)のルールを追加します。HTTPS化するのはひと手間加える必要があるので現時点では使えないですが、HTTPS化する方法もあとで解説します。
警告は出てても問題ありません。
終わったら確認と作成をクリックします。

スクリーンショット 2020-09-18 23.38.50.jpg

今まで行った設定が一覧で表示されます。
問題なければ起動をクリックします。
スクリーンショット 2020-09-18 23.39.38.jpg

ローカルPCからAWS上のEC2(Linux)にssh接続するために必要な鍵を貰うために、新しいキーペアを作成します。
キーペア名はwordpressにします。
キーペアのダウンロードをクリックします。
スクリーンショット 2020-09-18 23.41.51.jpg

キーペアのダウンロードが終わったらインスタンスの作成をクリックします。

スクリーンショット 2020-09-18 23.42.49.jpg

AWSのEC2上でLinuxのインスタンスが作成されるまで数分かかるのでライバルズでもやりながら待ちます。

スクリーンショット 2020-09-18 23.44.20.jpg

ライバルズをやりつつ、IPアドレスの固定化を行います。
これをしないと、IPアドレスがコロコロ変わってssh接続する時などに煩わしくなります。
インスタンスの表示をクリックしたあと、左のメニューからElasticIPをクリックします。

スクリーンショット 2020-09-18 23.46.34.jpg

Elastic IPアドレスの割り当てをクリックします。
スクリーンショット 2020-09-18 23.47.07.jpg

割り当てをクリックします。
スクリーンショット 2020-09-18 23.47.23.jpg

ElasticIPアドレスが正常に割り当てられたのでこのElasticIPアドレスを関連付けるをクリックします。

スクリーンショット 2020-09-18 23.48.25.jpg

インスタンスはWordPressインスタンスを選択(画像だとインスタンス名消えてるけど選択する時は表示される)します。
プライベートIPアドレスは仕組み上1つしかないのでそれを選択します。
終わったら関連付けるをクリックします。
スクリーンショット 2020-09-18 23.50.15.jpg

これでWordPressインスタンスにElasticIPアドレスが割当たりました。

スクリーンショット 2020-09-18 23.57.40.jpg

ElasticIPは人によって異なるので読み替えてください。

ここでElasticIPアドレスの関連付けに失敗するようなら、VPCがインターネットと通信できるようにするためのインターネットゲートウェイがくっついていない可能性があります。つまりVPCの作成でミスってます。

あと、ElasticIPがどのインスタンスに割り当てられているのかあとで辿れるようにElasticIPに名前をつけておきます。

EC2の左のメニューからElasticIPを開きます。
スクリーンショット 2020-09-19 14.08.13.jpg

Nameのところにカーソルを合わせると編集ボタンが表示されるので、WordPressIPに変更しておきます。これをやっておかないと独自ドメイン作成する時にどのElasticIPを使うべきか判別がつかず困る可能性があります。僕は困りました。入力が終わったら保存をクリックします。

スクリーンショット 2020-09-19 14.10.02.jpg

これで、EC2にWordPressインスタンスを作成することができました。

スクリーンショット 2020-09-19 12.26.39.jpg
※ElasticIPは人によって異なります。

WordPressインスタンスにssh接続

WordPressインスタンスにソフトウェアをインストールするには、ssh接続が必要不可欠です。

ssh接続は相手の家にお邪魔する行為みたいなものです。
鍵なしでお邪魔することができるものもありますが、もし鍵がついてたら鍵を使って入ります。ちなみにWordPressインスタンスは鍵をつけた(というか絶対つけられちゃう)ので鍵が必要です。

WordPressインスタンスにssh接続します。
command+spaceでspotlight検索を呼び出し、terminal.appと入力してターミナルを起動します。

スクリーンショット 2020-09-19 0.02.05.jpg
スクリーンショット 2020-09-19 0.02.14.jpg

余談だけどspotlight検索作った人本当に天才
windows使いたくないまである

さっきssh鍵をダウンロードしたのでDownloadsディレクトリに移動し、.sshディレクトリに移動させましょう。良かれと思ってssh鍵を別のところに移動してしまった方はパスを読み替えましょう。

cd
cd Downloads
mv wordpress.pem ../.ssh

このコマンドで.sshディレクトリにwordpress.pemが見当たらないようであれば、Finderを使ってwordpress.pemを.sshディレクトリ(隠しディレクトリなので注意)に移動させます。

ssh鍵のある.sshディレクトリに移動します

cd
cd .ssh

ssh鍵のパーミッションを変更しておきます。
元は644(rw- r-- r--)になっています。
ぶっちゃけ変更しなくても繋がっちゃいますが、セキュリティの観点から管理者の読み取りのみ許可する形(400=r-- --- ---)にします。
AWSも400にすることを推奨しています。
EC2インスタンス→インスタンス→接続→SSHクライアントの画面でそのことが確認できます。

証拠↓

スクリーンショット 2020-09-19 1.03.39.jpg

下記コマンドでssh鍵のパーミッションを変更しちゃいましょう。

chmod 400 wordpress.pem

続いて、ssh接続します。
接続するのにElasticIPアドレスが必要なので、EC2のインスタンス画面でElasticIPを確認します。
IPアドレスは人によって異なるので読み替えます。

ssh -i wordpress.pem ec2-user@18.181.12.140

これで繋がらない場合、VPCでインターネットゲートウェイとルートテーブルが繋がってない、もしくはサブネットとルートテーブルが繋がってない、もしくはその両方だと思います。

接続できたら初回は下記表示になります。

The authenticity of host '18.181.12.140 (18.181.12.140)' can't be established.
ECDSA key fingerprint is SHA256:hogehogehogehogehogehogehogehoge.
Are you sure you want to continue connecting (yes/no)? 

yesを入力します。

yes

そしたら下記表示になり、無事ssh接続できたことが確認できます。


       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/

ssh接続するとき、わざわざコピペで入力したりとか手打ちで入力したりとか馬鹿馬鹿しくて時間の無駄なので、clipyというソフトウェアをすぐさまダウンロードして下記スニペットを登録しておいて、どのディレクトリにいてもすぐさまssh接続できるようにしておきます。

cd
cd .ssh
ssh -i wordpress.pem ec2-user@18.181.12.140

WordPressインスタンスにApacheをインストール

WebサーバーにはNginxとかありますが、WordPressにはApacheが相性良さそうっぽいのでApacheをインストールします。

ソフトウェアのインストールする時にいちいちコマンドの先頭にsudoつけたくないので、あらかじめ管理者のrootに変更しておきます。

sudo su

そうするとデフォルトのユーザー名を表すec2-userからrootに表示が変わったことが確認できます。

続いて、Apacheをインストールするためにyumという便利ソフトウェアインストールツールのコマンドを使ってApacheをインストールします。

下記コマンド、httpdとなっていますが、これがApacheです。
実行します。

yum install -y httpd

インストールが終わったら、Apacheのバージョンを確認しておきます。

httpd -v

Server version: Apache/2.4.46 ()
Server built: Aug 24 2020 18:54:20

と表示されました。
この記事では、Apacheのバージョンは2.4.46のようです。

これで、WordPressインスタンスにApacheをインストールできました。

WordPressインスタンスでApache起動

おっと、Apacheを起動する前にGoogleChromeでIPアドレスをURL欄に直打ちしてみましょう。

18.181.12.140(ElasticIPは人によって異なるので読み替えてね)

スクリーンショット 2020-09-19 1.36.53.jpg

アクセスできませんね。そのことを確認したら、下記コマンドでWebサーバーApacheを起動します。

systemctl start httpd

これでWordPressインスタンス上でWebサーバーであるApacheが起動しました。
GoogleChromeで更新ボタンを押します。

スクリーンショット 2020-09-19 1.37.52.jpg

Apacheのデフォルトページが表示されるようになりました。

また、EC2インスタンスが再起動すると停止してしまうので、自動起動設定にします。

systemctl enable httpd

WordPressインスタンスにPHPをインストール

WordPressはPHPで作られています。
プラグインもPHPで作成することができます。

なので、PHPのインストールと、あとライブラリが必要です。
下記コマンドを実行します。

amazon-linux-extras install -y php7.3
yum install -y php-mbstring php-gd

amazon-linux-extrasはyumコマンドのAWS版と思って貰えればいいかと思います。WordPressのバージョンが上がって、普通のphpのインストールコマンドだと駄目なようです。

ライブラリは、1行目のコマンドでphp-mysql(DB用)、2行目のコマンドでphp-mbstring(文字化け防止用)とphp-gd(画像取り扱い用)が入りました。

php -v

PHP 7.3.21 (cli) (built: Aug 21 2020 21:12:16) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.21, Copyright (c) 1998-2018 Zend Technologies

と表示されました。
この記事では、PHPのバージョンは7.3.21のようです。

このままだとphpがインストールされたことがApacheに伝わっていないので、伝えるためにApacheを再起動します。

systemctl restart httpd

これで、WordPressインスタンスにPHPをインストールできました。

WordPressインスタンスにMariaDBをインストール

WordPressを使う場合、データを保存するための場所が必要です。それがDBですね。
DBにもMySQLとかPostgreSQLとかありますが、MySQLの派生型であるMariaDBを使用します。

MariaDBのインストールコマンドを実行します。

yum install -y mariadb mariadb-server

MariaDBを起動します。

systemctl start mariadb

EC2インスタンスが再起動すると停止してしまうので、自動起動設定にします。

systemctl enable mariadb

起動したらMariaDBのバージョンを確認してみます。

mysql -u root -e 'status ' | grep Ver

mysql Ver 15.1 Distrib 5.5.64-MariaDB, for Linux (x86_64) using readline 5.1

と表示されました。
この記事では、MariaDBのバージョンは15.1のようです。

これで、WordPressインスタンスにMariaDBをインストールできました。

WordPressインスタンスのMariaDBのパスワードを変更

MariaDBにパスワードを設定しておかないと危ないので設定しておきます。

まずはMariaDBのプロンプトを開きます。

mysql -u root -p
(passwordの入力を求められたら空でEnter)

続いて、下記コマンドでパスワードを設定します。
'新しいパスワード'となっている部分は自分で設定します。

update mysql.user set password=password('新しいパスワード') where user = 'root'; flush privileges;

WordPressインスタンスに必要なデータベースの作成

以下の設定でデータベースを作成します。

設定値
ユーザー名 wordpress
パスワード (好きなパスワード)
データベース名 wordpressdb

※MariaDBのプロンプト上で操作。

確認のためにデータベースを表示します。

show databases;

下記の表示になっていたらOKです。

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

まずはユーザーとパスワードを作成します。

create user 'wordpress'@'localhost' IDENTIFIED BY '(好きなパスワード)';

続いて、WordPress用のデータベースを作成します。

create database wordpressdb;

続いて、作成したユーザーに対して作成したデータベースの全権限を与えます。

grant all privileges on wordpressdb.* to 'wordpress'@'localhost';
FLUSH PRIVILEGES;

再度確認のためにデータベースを表示します。

show databases;

下記の表示になっていたらOKです。

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wordpressdb        |←NEW!!
+--------------------+

これで、WordPressインスタンスに必要なデータベースが作成できました。

下記コマンドでMariaDBのプロンプトを終了しておきます。

exit

WordPressインスタンスにWordPressをインストール

WordPress用の作業ディレクトリを作成します。
作業が終わると不要なディレクトリになることを念頭に置いておくといいと思います。
※ssh接続時の入力になっていることを確認

mkdir /home/wordpress
cd /home/wordpress

WordPressはyumではインストールできないので、wgetを用いてWordPressの圧縮ファイルを取得します。
※latest(最新)を取得しているので、このあとの手順は時代によって異なるかも。すまん。

wget https://wordpress.org/latest.tar.gz

.tar.gzのままになっているので解凍します。

tar xzvf latest.tar.gz

Apacheから見える場所にWordPressのデータを切り取って/var/www/html配下に全てペーストします。

mv wordpress/* /var/www/html/

Apacheユーザーに、先ほどWordPressのデータを置いた/var/www/htmlの書き込み権限を与えます。

chown apache.apache -R /var/www/html
chmod +w -R /var/www/html

終わったら、GoogleChromeでWordPressの設定ができるようになります。

GoogleChromeで18.181.12.140(ElasticIPは人それぞれ異なるので読み替えてね)とURL欄に入力するとWordPressの初期設定画面が開きます。

パスは勝手にhttp://18.181.12.140/wp-admin/setup-config.php になります。

Let's go!をクリックします。
スクリーンショット 2020-09-19 3.30.26.jpg

下記の設定にしてSubmitをクリックします。
パスワードはMariaDBで設定したパスワードにします。
下記画像だと好きなパスワードとなっていますが、MariaDBで設定したパスワードの間違いです

スクリーンショット 2020-09-19 3.33.06.jpg

wp-config.phpファイルが/var/www/htmlの中に無いから作成して下記を貼り付けてねと怒られます。

スクリーンショット 2020-09-19 3.35.12.jpg

下記コマンドでwp-config.phpを作成し、権限をapache.apacheに変更し、viエディタで開きます。
※sudo suで管理者であるrootユーザーになっていることを確認。

cd /var/www/html/
touch wp-config.php
chown apache.apache wp-config.php  
vi wp-config.php

viエディタが開いたら、先ほどのWordPressのテキストをCommand+Vで貼り付け、「:wq」を入力して保存し閉じます。

Run the installationをクリックします。

スクリーンショット 2020-09-19 3.41.51.jpg

下記の画面になるので、必要事項を入力します。

Site Title:ブログ名を入力

Username:英文字と記号で

Password:パスワード

Your Email: メールアドレス

終わったらInstall WordPressをクリックします。
スクリーンショット 2020-09-19 3.46.16.jpg

これでインストール完了です。
ログインをクリックします。

スクリーンショット 2020-09-19 3.52.42.jpg

先ほど設定したユーザー名とパスワードを入力してログインできることを確認します。

スクリーンショット 2020-09-19 3.53.20.jpg

管理画面を開くことができました。

スクリーンショット 2020-09-19 3.54.20.jpg

以上で、WordPressインスタンスにWordPressをインストールできました。

英語だと分かりづらいので日本語化します。
左のSettingsから、SiteLanguageを日本語にしてSaveChangesをクリックします。

スクリーンショット 2020-09-19 4.17.41.jpg

無事日本語化できました。

スクリーンショット 2020-09-19 4.18.25.jpg

これは管理画面なので、一般ユーザーから見た時にどう見えるかをチェックしてみます。
18.181.12.140(人によって異なるので読み替えてね)にアクセスしてみます。

スクリーンショット 2020-09-19 4.19.23.jpg

ログイン中なのでいくつか管理者用のリンク表示されていますが、一般ユーザーからどう見えるかを確認することができました。

バージョンを確認します。
http://ElasticIPアドレス/wp-admin/index.php を開き、概要をチェックします。
Qiitaの仕様でリンクになってしまったけど開かないので注意

スクリーンショット 2020-09-19 13.04.02.jpg

この記事では、WordPressのバージョンは5.5.1のようです。

独自ドメイン化

お金かかります。また、手続き上の問題で最大3日かかります。

IPアドレスでアクセスするのも不格好なので、独自ドメインを作成しちゃいましょう。
独自ドメイン化をするにはAWSのRoute53を利用します。

Route53を開きます。

スクリーンショット 2020-09-19 13.46.50.jpg

独自ドメインを持っているかどうかで多分表示が変わるのですが、僕は既に持っているので初めて独自ドメインを作成する方とは表示が異なるかと思います。多分。

パンくずりすと(Route53 > ダッシュボード)のところにあるRoute53をクリックします。

スクリーンショット 2020-09-19 13.49.51.jpg

ここから多分一緒かな?

Route53の使用開始のところにある開始するをクリックします。
スクリーンショット 2020-09-19 13.50.39.jpg

ドメインを登録を選択して開始するをクリックします。

スクリーンショット 2020-09-19 13.51.33.jpg

好きなドメイン名を入力してチェックします。
世界で同じものは2つ作成できないのでチェックをクリックして、重複がなければカートに入れます。
12ドルかかりますが、下手なもの作ると100ドルとかかかっちゃうので超注意!こだわらずに.comにしておけばいいです。

スクリーンショット 2020-09-19 13.54.42.jpg

一番下までスクロールして続行をクリックします。

スクリーンショット 2020-09-19 13.55.06.jpg

個人情報を入力していきます。少し長め。
スクリーンショット 2020-09-19 13.56.03.jpg
※バキバキ個人情報丸出しになっちゃうのでここまでしか見せられないよ!

完了したら一番下までスクロールして続行をクリックします。
スクリーンショット 2020-09-19 13.59.12.jpg

ドメインは自動更新有効化にしておくと自動で課金は継続しますが便利です。
規約のところにチェックを打って注文を完了をクリックします。

スクリーンショット 2020-09-19 13.59.47.jpg

チャリーン(12$飛ぶ音)
スクリーンショット 2020-09-19 14.01.25.jpg

もしかしたら人によってはここでメールを送ったので確認してくださいみたいな画面に飛ぶかも。
僕は2つ目の独自ドメイン購入なので出ませんでした。

閉じるをクリックしたあと以下の画面が表示されると思いますが、記載の通り最大で3日かかります。また、登録完了するとEメールが届きます。できなくてもEメールが届きます。
スクリーンショット 2020-09-19 14.03.30.jpg

ちなみに僕は数分ほどでドメインの登録完了のメールが届きました。
人によって登録完了までの時間はまちまちです。本当に。

Route53のホストゾーンから先ほど作成したドメインが確認できるので、クリックして開きます。

スクリーンショット 2020-09-19 14.17.02.jpg

レコードを作成をクリックします。

スクリーンショット 2020-09-19 14.18.19.jpg

シンプルルーティングを選択して次へをクリックします。

スクリーンショット 2020-09-19 14.18.57.jpg

シンプルなレコードを定義をクリックします。
スクリーンショット 2020-09-19 14.20.57.jpg

レコード名をblogs、
ルーティング先の種類をIPアドレス、
ルーティング先の値をElastic IPアドレス、
レコードタイプをAのIPv4アドレス、
TTLはそのままにしておきます。

入力が終わったらシンプルなレコードを定義をクリックします。

スクリーンショット 2020-09-19 14.24.55.jpg

忘れがちですが右下のレコードを作成をクリックします。
スクリーンショット 2020-09-19 14.27.06.jpg

一番下にレコードが作成できました。

スクリーンショット 2020-09-19 14.28.08.jpg

これで、独自ドメイン化は完了です。

以下のリンクから僕のWordPressが開けます。
https化したのでもう開けません。

http://blogs.jinsei-kouten.com/

Route53の画面は日々変わるのでノウハウが蓄積しづらいのが難点です。
僕が結構昔にやった独自ドメインの作成方法のノウハウはあまり役に立ちませんでした。はぁ・・・。

https化

「http://〜」になってるものにアクセスすると保護されてない通信とかアピールされてめっちゃ鬱陶しいです。
その鬱陶しい表示を消すために(それ目的でやる訳ではないですがw)https化します。

やることは以下の通りです。

①AWS Certificate managerで証明書の作成
②ロードバランサーの構成

やりたいことはめちゃくちゃ単純なのにやることは結構難しいです。
気合が必要です。
1回やれば十分なのでレッドブル飲んで臨みます。

Certificate Managerを開きます
スクリーンショット 2020-09-19 14.55.43.jpg

これまた今まで証明書を作成したことがあるかどうかで表示異なるかと思いますが、証明書のリクエストをクリックします。

スクリーンショット 2020-09-19 14.58.01.jpg

パブリック証明書のリクエストをクリックして証明書のリクエストをクリックします。

スクリーンショット 2020-09-19 14.58.37.jpg

先ほど作成したドメイン名を入力して次へをクリックします。
僕の場合はblogs.jinsei-kouten.comです。
自動入力機能がないので不便。

スクリーンショット 2020-09-19 14.59.26.jpg

DNSの検証にして次へをクリックします。

スクリーンショット 2020-09-19 15.01.04.jpg

管理しやすいように証明書に名前をつけておきます。
タグ名をName、値をWordPressCertificateにします。
確認をクリックします。

スクリーンショット 2020-09-19 15.01.54.jpg

作成をクリックします。

スクリーンショット 2020-09-19 15.05.32.jpg

確認画面が表示されます。
確定とリクエストをクリックします。

スクリーンショット 2020-09-19 15.02.46.jpg

下記の画面が表示されますが続行はまだクリックしません。

スクリーンショット 2020-09-19 15.03.29.jpg

blogs.jinsei-kouten.comをクリックして詳細を開き、Route53でのレコードの作成をクリックします。

スクリーンショット 2020-09-19 15.04.57.jpg

Route53でCNAMEレコードを追加してくれるので作成をクリックします。
最大で30分かかりますが、30分以内にこの証明書が使えるようになります。

スクリーンショット 2020-09-19 15.06.23.jpg

続いて、ALBを追加します。
Application Load Balancerの略です。

今こんな感じになっていると思います。

スクリーンショット 2020-09-19 15.10.23.jpg

証明書はALBにしかくっつけれません。
そのため、ALBの追加が必要不可欠です。
しかも、ALBを作成する場合は2つ以上のサブネットを指定する必要があります。
サブネットは1つしか作ってなかったからもう一つ作るのめんどくさいなって
なので、以下の形に変化します。

スクリーンショット 2020-09-19 15.36.27.jpg

まずは、サブネットを作成しに行きます。

VPCを開き、サブネットの作成をクリックし、以下のように入力して作成をクリックします。
名前タグはWordPressサブネット2にしました。
VPCはWordPressにします
アベイラビリティーゾーンはWordPressサブネットとは異なるものにします。
IPv4 CIDRブロックは172.168.32.0/20にします。

スクリーンショット 2020-09-19 15.37.58.jpg

サブネットを作成したので、ルートテーブルに関連付けなければなりません。でないと、二分の1の確率でアクセスに失敗します。

VPCのルートテーブルのサブネットの関連付けからWordPressルートテーブルを選択してサブネットの関連付けの編集をクリックします。

スクリーンショット 2020-09-19 19.36.09.jpg

WordPressサブネット2が未選択状態かと思いますので選択して保存をクリックします。

スクリーンショット 2020-09-19 19.37.15.jpg

これでルートテーブルにWordPressサブネット2が関連付けられました。

続いて、ALBを作成しに行きましょう。
ALBはEC2から作成できます。

左のメニューからロードバランサーをクリックします。
スクリーンショット 2020-09-19 15.19.41.jpg

ロードバランサーの作成をクリックします。

スクリーンショット 2020-09-19 15.20.22.jpg

一番左のApplication Load Balancerの作成をクリックします。

スクリーンショット 2020-09-19 15.20.45.jpg

名前は分かりやすいようにWordPressALB
スキームはインターネット向け
IPアドレスタイプはipv4
リスナーはHTTPS接続するのでHTTPS
ポートはHTTPSの標準が443なのでそのまま
VPCはWordPress
アベイラビリティーゾーンは2つとも選択し、WordPressサブネットとWordPressサブネット2を選択します。

入力が終わったら次の手順:セキュリティ設定の構成をクリックします。

スクリーンショット 2020-09-19 15.22.25.jpg

ACMから証明書を選択する(推奨)を選択し、証明書の名前を先ほど作成した証明書を選択し、セキュリティポリシーはデフォルトのままにします。
次の手順:セキュリティグループの設定をクリックします。

スクリーンショット 2020-09-19 15.44.58.jpg

既存のセキュリティグループは選ばずに、新しいセキュリティグループを作成します。

セキュリティグループ名は分かりやすい名前にするためにWordPressALB-sgにします。説明はWordPress HTTPSにしておきます。

あとは自動でHTTPS用のセキュリティグループが作成できるため、下の設定は弄らずに次の手順:ルーティングの設定をクリックします。

スクリーンショット 2020-09-19 15.48.06.jpg

続いてルーティングの設定をします。
ターゲットグループを新しいターゲットグループにします。
名前はWordPressTargetにします。
ターゲットの種類はインスタンスにします。

プロトコルはHTTP、ポートは80のままにします。
なぜならインターネットからALBへはHTTPS接続するのですが、ここで設定しているのはALBからEC2への接続だからです。それはHTTP接続で問題ありません。

ヘルスチェックはそのままにします。
入力が終わったら次の手順:ターゲットの登録をクリックします。

スクリーンショット 2020-09-19 15.50.27.jpg

下記画面、あまり操作性が好きでないのですが、WordPressインスタンスを選択したあと、登録済みに追加という青いボタンをクリックしてから次の手順:確認をクリックします。

スクリーンショット 2020-09-19 15.55.03.jpg

確認画面が出るので作成をクリックします。

スクリーンショット 2020-09-19 15.56.04.jpg

ロードバランサーの作成が完了しました。

スクリーンショット 2020-09-19 15.57.13.jpg

まだやることあるんですねぇ〜・・・。
次はRoute53での設定が必要です。
なぜなら、Route53はEC2インスタンスを指しているのですが、これをALBを指すように変更しなければなりません。

Route53を開いてホストゾーンを開いてblogs.jinsei-kouten.com開いてblogs.jinse-kouten.comのAレコードとなっているもの(つまりさっき独自ドメイン化の時に作ったレコード)を選択して編集をクリックします。

スクリーンショット 2020-09-19 15.59.21.jpg

元々IPアドレスを設定していたと思いますが、ALBに変更します。
値/トラフィックのルーティング先をApplication Load BalancerとClassic Load Balancerへのエイリアスに変更します。
リージョンは東京
ALBは〜.WordPressALB-〜となっているものを選択します。

スクリーンショット 2020-09-19 16.02.11.jpg

完了したら変更を保存をクリックします。

これで一度アクセスします。

この時点では、下記画像の表示のように崩れます。(このQiitaが公開されている頃には治っていると思いますが)

スクリーンショット 2020-09-19 16.07.30.jpg

そういうものです。
崩れる理由は、WordPress上の設定URLと実際にアクセスできるURLに相違があるためです。

これを直すためには以下の2通りのやり方があります。
①GUIでの操作。現時点でまだできるhttp接続でWordPressの設定画面(まだ表示が崩れてない)に行き、設定からWordPressアドレス(URL)とサイトアドレス(URL)を書き換える 駄目でした
②CUIでの操作。ssh接続でEC2にアクセスし、cdとかviとか駆使して/var/www/html配下にあるwp-config.phpを書き換える

②でやるほうがエンジニアっぽいですが僕はそこにこだわりが無いので簡単な①で変更します。

http接続で下記にアクセスします。ElasticIPアドレスは人によって異なるので読み替えます。
http://ElasticIPアドレス/wp-admin
僕の場合は
http://18.181.12.140/wp-admin
です。
読んでる方は違います。
ログインできなかったらログインして、左のメニューから設定をクリックします。

スクリーンショット 2020-09-19 16.18.51.jpg

WordPress アドレス (URL)とサイトアドレス (URL)を書き換えます。
僕の場合は https://blogs.jinsei-kouten.com/ です。

スクリーンショット 2020-09-19 16.21.26.jpg

一番下までスクロールして変更を保存をクリックします。

スクリーンショット 2020-09-19 16.22.04.jpg

GAME OVER

①の方法だと失敗したので仕方なく②の方法に切り替えます。

ターミナルでssh接続

cd
cd .ssh
ssh -i wordpress.pem ec2-user@18.181.12.140

管理者権限でwp-config.phpを開きます。

sudo su
cd /var/www/html
vi wp-config.php

iを押して入力モードにし、下記3行を追記します。


<?php
define('WP_HOME','https://blogs.jinsei-kouten.com/');
define('WP_SITEURL','https://blogs.jinsei-kouten.com/');
$_SERVER['HTTPS'] = 'on';

/**
 * The base configuration for WordPress


escで入力モード解除して:wqで保存して閉じます。

これやってしまうとWordPressのGUIの設定画面からはもう設定できなくなるのでやりたくなかったんだよなぁ・・・。
$_SERVER['HTTPS'] = 'on';に当たる部分の設定が見当たらなかったので致し方なし。

それでは下記にアクセスしてみます。

スクリーンショット 2020-09-19 16.55.27.jpg

表示崩れが解消されました。

現時点だとまだhttp接続できてしまうので、セキュリティグループからhttp接続をなくしちゃいましょう!

EC2のセキュリティグループからWordPress-sgを選択してアクションをクリックし、インバウンドルールを編集をクリックします。WordPressALB-sgはALBとEC2間の接続の設定なので関係がありません。インターネットとEC2の接続を管理しているWordPress-sgのみ修正の必要があります。

スクリーンショット 2020-09-19 16.58.07.jpg

HTTPのインバウンドルールを2つとも削除します。

スクリーンショット 2020-09-19 17.01.13.jpg

でも、ALBからはHTTP接続されるのでHTTPのインバウンドルールは必須です。でもソースを0.0.0.0/0にしてしまうといたちごっこになってしまいますね・・・。

では、こちらの図を思い出しましょう。

スクリーンショット 2020-09-19 17.10.23.jpg

ALBはどこにいますか?172.168.0.0/16の中にいますよね?

なので、172.168.0.0/16からのHTTP接続を許可しましょう。
最終的には以下の形になります。ルールを保存をクリックします。

スクリーンショット 2020-09-19 18.13.42.jpg

最終確認です。下記3パターンで①②が繋がらず、③④が接続できれば成功です。
[繋がらないパターン]
①18.181.12.140に接続する
http://blogs.jinsei-kouten.com/ に接続する
[繋がるパターン]
https://blogs.jinsei-kouten.com/ に接続する
https://blogs.jinsei-kouten.com/wp-login.php に接続する

①②が繋がらず、③④が繋がりました。

つまり、成功です!

以上が、VPC+EC2+Apache+MariaDBでWordPressを構築し、独自ドメイン+https化するやり方でした。

あとは好きなようにWordPressを弄り倒してしまいましょう!

お疲れ様でした!

なんか繋がりにくい?

GoogleChromeだと問題なく繋がるけど他のブラウザだと結構な頻度で繋がらない現象が発生。

嬉しすぎてレバテックフリーランスのエージェントさんにLINEでWordPressのURL送ったら繋がりにくくてそこで発覚。
70%くらいの確率で接続に失敗。

Safariでも同様の現象発生するっぽいので試してみたらこれも接続失敗の嵐。たまに繋がる。

訳わからなさすぎたので調べたら参考になりそうな記事がありました。
https://qiita.com/t-kigi/items/0723cd7c26472746d389
https://dev.classmethod.jp/articles/resolve-safari-and-alb-https-connection-errors/

インターネットからALBへはhttp/2.0を使うけどALBからEC2インスタンスへはhttp1.1が使われるのでたまに接続に失敗するとのこと。

とりあえず僕は以下の手順を踏みました。

WordPressインスタンスにSSH接続

cd
cd .ssh
ssh -i wordpress.pem ec2-user@18.181.12.140

下記コマンドを実施

yumdownloader --source mod_http2
sed -i -e "s/^LoadModule/#LoadModule/g" /etc/httpd/conf.modules.d/10-h2.conf
cat /etc/httpd/conf.modules.d/10-h2.conf
sudo systemctl restart httpd

3行目のcatで# LoadModule http2_module modules/mod_http2.soと出ます。

これでやってみたところ、今の所100回中100回接続に成功するようになりました。

終わりに

用語の解説とかほぼ省いているので、詳しく知りたい方はコメントくだされば解説します。(例:ElasticIPってなに? sudoってどんな意味?なんの略? パーミッションって?などなど)
必要な部分であれば全て解説できます。(AレコードとかCNAMEはうまく説明できるか怪しいかも・・・すみません・・・)
また、つまずいた部分は質問いただければ答えます。ただし、そちらは条件があります。最初から手順書を残して、その手順書も合わせて送っていただいた方限定でお答えします。最初から手順書を作っているだけで9割は解決しますので。

最後まで読んでくださり、ありがとうございました。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4