AWS LightsailでWordPressを構築しSSL化する方法

AWS LightsailでWordPressを構築しSSL化する方法

AWS LightsailでWordPressを構築しSSL化する方法を紹介します。またSSL化は「Let’s Encrypt SSL Certificate」を利用して行います。ターミナルでの作業に慣れている方であれば20分もあれば構築できるんじゃないかと思います。

目次

AWSのLightsailとは

AWSのLightsailについての詳しい説明は省きますが、端的に言えば、EC2に比べて割と簡単にWordPressを導入できるAWSのインスタンスです。もちろんWordPressのみではありませんが。料金体系もわかりやすく最安は3.5ドルから利用できます。

プラットフォームは「Linux/Unix」と「Windows」が用意されています。また、「Linux/Unix」の場合、「WordPress」の他に「LAMP」や「Node.js」などが含まれたインスタンスが選択できます。サーバーのロケーションは世界各国にある、東京に設置されたインスタンスもあります。

今回、構築するAWS Lightsailの構成について

今回はWordPressでコーポレートサイトを作成することを想定しており、アクセス自体はそんなに多く見込んでいないので3.5ドルの最小の構成で構築することにしました。さらにLet’s Encrypt SSL Certificate」を利用してSSL化も行います。

注意点として、今回紹介する手順だけではWordPressからメールを送信することができませんのでご注意ください。コメント機能などは動作しますが、「コンタクトフォーム」を設置した場合などにメールを送信することができません。

AWS LightsailでWordPressを構築する手順

さて今から構築の手順について説明しますが、今回はAWSのアカウントとドメイン、そしてDNSはすでに用意されているものとして話を進めて行きたいと思います。ドメインについては「www」のサブドメインを付けて構築します。また作業手順の中で「vi」や「nano」のエディターでテキストを編集する箇所がありますが、「vi」や「nano」の操作方法については触れていませんのでご了承ください。

AWSのコンソールからLightsailの設定画面に入る

コンソールからLightsailの設定画面に入るため、AWSにログインし、コンソールより「Lightsail」を選びます。

すると言語設定のダイアログが表示されるので「日本語」を選択し「Save」をクリックしましょう。(別に「日本語」じゃなくてもいいんですけど)

ウエルカム画面が表示されるので「では、始めましょう」をクリックします

AWS Lightsailのインスタンスロケーションの選択

まずはインスタンスの場所を選択します。今回、ユーザーのターゲットは日本国内を想定しているので、「東京」を選択しました。もし他国での運用を想定しているのであれば適当なインスタンスを選択してください。

AWS Lightsailのインスタンスイメージの選択

「インスタンスイメージの選択」では「プラットフォーム」と「設計図」を選択します。WordPressの場合、「プラットフォーム」は「Linux/Unix」を選択し、「設計図」は、「WordPress」を選択してください。

AWS Lightsailのインスタンスプランの選択

次にLightsailのインスタンスプランを選択します。今回は小規模サイトですので$3.5のインスタンスを選択しました。表示されているように現時点で月額3.5ドルのインスタンスは「最初の一ヶ月は無料」となっています。

AWS Lightsailのインスタンスの識別

最後にLightsailのインスタンスの識別を設定します。今回は1つのインスタンスだけ運用することにしているので、とくに変更はしませんでした。これでよければ「インスタンスの作成」をクリックしましょう。

すると下記のように新しい「インスタンス」が作成されます。

AWS Lightsailの静的IPを作成しインスタンスに割り当てる

次に作成したインスタンスに静的IPを割り当てます。静的IPを割り当てておかないと、インスタンスのIPが変わってしまった場合に、ドメインとインスタンスの紐付けが失われてしまいアクセスできなくなってしまいます。

まずLightsailのホーム画面より「ネットワーク」を選択します。すると下記のような画面が表示されるので「静的IPの作成」をクリックしましょう。

静的IPアドレスをインスタンスへアタッチする

「静的IPアドレスの作成」の画面に移ったら「インスタンスへのアタッチ」の項目で先ほど作成したインスタンスを選択します。複数のインスタンスがある場合は間違えないように注意しましょう。

インスタンスを選択し終えたら「作成」をクリックしましょう。

静的IPアドレスは必ずインスタンスにアタッチしましょう。もし静的IPアドレスがインスタンスにアタッチされず放置されていたら課金されてしまいます。

作成した静的IPアドレスを控えておく

静的IPアドレスが作成されると下記のように「静的パブリックIPアドレス」が表示されます。このIPアドレスをDNSに設定してドメインとインスタンスの紐付けをおこなってください。今回はDNSの設定については省略します。

SSHで接続するために鍵をダウンロードする

次にターミナルからコマンドを実行していく必要があるのでSHで接続するために鍵をダウンロードします。AWSのLifgtsailのページから「アカウント」に入り、「SSHキー」のタブを選ぶと「SSHキーペア」が表示されるので下部にある「ダウンロード」をクリックすると鍵がダウンロードされます。

このダウンロードした鍵を適切な場所に移してターミナルから下記のコマンドを実行すればターミナルからアクセスできるようになります。ダウンロードした鍵をそのまま使用するとパーミッションのエラーが表示されるはずですので、先にパーミッションを変更しておきましょう。(鍵のファイル名は設定内容によって異なるので注意)

// ダウンロードした鍵の権限を変更する
chmod 600 LightsailDefaultKey-ap-northeast-1.pem

// 鍵の権限を変更する(ユーザー名は「bitnami」、「xxx.xxx.xxx.xxx」部分には作成した静的IPアドレスに置き換える)
ssh -i LightsailDefaultKey-ap-northeast-1.pem [email protected]

ログインに成功すると下記のように表示されます。

インスタンスを再作成した場合、上記の手順で再度アクセスしようとしても「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」というエラーでアクセスできなくなります。その場合は、「.ssh」の階層にある「known_hosts」をエディタで開き、行頭が該当するIPアドレスの行を削除し、再度アクセスしてください。

WordPressのBitnamiのバナーを削除する

AWSのLightsailで用意されているWordPressはBitnami社が提供するパッケージを利用しており、このWordPressは初期の状態だと下記のようにBitnamiのバナーが表示されてしまうので、ターミナルから下記のコマンドを実行してバナーを削除しましょう。

バナーを非表示になるよう設定します。

sudo /opt/bitnami/apps/wordpress/bnconfig --disable_banner 1

設定を反映させるためにApacheを再起動します。

sudo /opt/bitnami/ctlscript.sh restart apache

WordPressのログインパスワードを確認する

WordPressの初期のログインパスワードはSSHでログインした階層に「bitnami_application_password」というファイル名で保存されているので下記のコマンドで確認しましょう。

cat bitnami_application_password

するとこのように表示されるので控えておきましょう。

AWS Lightsailで作成したWordPressにログインしてみる

では、作成したWordPressにログインしてみましょう。まだドメインの設定しては行なっていませんので、IPアドレスでアクセスしてみます。
URLは核の通りになります。(「xxx.xxx.xxx.xxx」には作成した静的IPアドレに置き換えてください。)

http://xxx.xxxx.xxx.xxx/wp-login.php

上記のアドレスにアクセスすると下記のようにWordPressのログイン画面が表示されます。初期状態のユーザ名は「user」です。パスワードはさきほど確認したログインパスワードを入力しログインします。

AWS Lightsailで作成したWordPressを日本語化し最適化する

AWS Lightsailで作成したWordPressは初期状態では言語設定が英語になっているので日本語に変えておきましょう。ログイン後、左メニュの「Settings」の画面に入り「Site Language」を「日本語」に変更し、Timezoneを「Tokyo」に変更します。

また、日本語で運用する際に必要なプラグインがありますので、インストールしておきます。左メニューの「プラグイン」の「新規追加」を選び「WP Multibyte Patch」で検索してみましょう。すると「WP Multibyte Patch」という名前のプラグインが表示されますので「今すぐインストール」をクリックし、インストールが終了したら「有効化」をクリックしましょう。

AWS Lightsailで作成したWordPressの新規管理者を設定する

初期のログインユーザのまま使用し続けるのはセキュリティ的によくないので、管理者権限を持った新しいユーザーを作成します。

左メニューの「ユーザー」の「新規追加」を選び、「ユーザー名 (必須)」と「メールアドレス (必須)」、「パスワード」を入力します。「パスワード」はなるべく複雑なものにしておきましょう。そして 「権限グループ」を必ず「管理者」を選択しておきます。 入力と選択が終わったら「新規ユーザー」をクリックします。新しく作ったユーザーの「ログイン名」「パスワード」は必ず控えておきましょう。今回構築したWordPressにはメールを送信する機能が付いていないのでログイン情報を忘れた場合にメールを経由したパスワードリセットができません。不安な方は初期ユーザーを残しておいても良いかもしれません。

管理者の権限を持った新規ユーザーを追加したら、一度ログアウトし追加した新規ユーザーでログインし直し、初期の「user」のユーザーは削除しておきましょう。

独自ドメインの設定

独自ドメインの設定をします。今回はすでにDNSが用意されているものとして話を進めます。

DNSにAWS Lightsailで作成した静的IPアドレスを設定する

下記のようにDNSにAレコードで作成した静的IPアドレスを使用して設定します。(「xxx.xxx.xxx.xxx」には作成したIPアドレスに置き換えてください。)

@ IN A xxx.xxx.xxx.xxx
wwww IN A xxx.xxx.xxx.xxx

DNSの設定方法につきましては、各々のDNSによって異なります。

AWS Lightsailで作成したWordPressにドメインを設定する

DNSの設定が終わったら次に、作成したWordPressにドメインを設定します。通常であればWordPressの「一般設定」にある「アドレス (URL)」、「サイトアドレス (URL)」でドメインの設定をしますが、Bitnamiのパッケージでは変更できないようになっているので、「wp-config.php」のファイルを変更してドメインを設定します。下記のコマンドを実行してWordPressの設定ファイルを開きます。「vi」の操作方法については省略します。

vi /opt/bitnami/apps/wordpress/htdocs/wp-config.php

設定ファイルの中に下記の設定項目があるので下記の「’ . $_SERVER[‘HTTP_HOST’] . ‘」の部分を置き換えます。

define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] . '/');
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST'] . '/');

置き換えると下記のようになります。(「www」のサブドメイン無しで構築したい場合、「www.」を省いて置き換えてください。)

define('WP_SITEURL', 'http://www.ドメイン/');
define('WP_HOME', 'http://www.ドメイン/');

これで、ドメインからWordPressへアクセスできるようになりました。

AWS Lightsailで作成したWordPressを「Let’s Encrypt SSL Certificate」でSSL化する

現在では個人のサイトでもSSL化するのが当然の時代となっています。AWSのロードバランサーを使用してもSSL化できますが、ロードバランサーは月額で18ドルの費用がかかるので、今回は無料で利用できる「Let’s Encrypt SSL Certificate」でSSL化してみたいと思います。

AWS LightsailのインスタンスにLet’sEncryptのクライアント「lego」をインストールし実行する

ネット上で検索すると異なる方法が紹介されていますが、今回紹介する手順はBitnamiの公式マニュアルに沿ったものとなってます。Go言語で書かれたLet’sEncryptのクライアント「lego」を使用します。

「lego」でSSL化していくには下記のコマンド群を実行しますが、変更箇所が多々あるので注意して進めていきましょう。適切に変更しないとエラーになります。

ルート階層にある「tmp」フォルダーへ移動します。

cd /tmp

最新版の「lego」をダウンロードします。

curl -s https://api.github.com/repos/xenolf/lego/releases/latest | grep browser_download_url | grep linux_amd64 | cut -d '"' -f 4 | wget -i -

ダウンロードした圧縮ファイルを解凍します。

tar xf lego_v*

解凍したフォルダー「lego」を階層「/usr/local/bin/」へ移動します。

sudo mv lego /usr/local/bin/lego

bitnamiのサービスを停止します。

sudo /opt/bitnami/ctlscript.sh stop

以下のコマンドの「メールアドレス」、「ドメイン」を各自のものに置き換えて実行します。

sudo lego --email="メールアドレス" --domains="ドメイン" --domains="www.ドメイン" --path="/etc/lego" --http run

実行後に「Do you accept the TOS? Y/n」に聞かれるので「Y」を入力しエンターします。
その後、下記のように表示されたら成功です。

Your account credentials have been saved in your Let's Encrypt
configuration directory at "/etc/lego/accounts".

次に証明書などの場所を下記のコマンドで置き換え、権限を変更します。4、5行目の「ドメイン」(2か所)の部分は各自のものに置き換えて実行してください。念のために1行ずつ実行していったほうがいいでしょう。

sudo mv /opt/bitnami/apache2/conf/server.crt /opt/bitnami/apache2/conf/server.crt.old
sudo mv /opt/bitnami/apache2/conf/server.key /opt/bitnami/apache2/conf/server.key.old
sudo mv /opt/bitnami/apache2/conf/server.csr /opt/bitnami/apache2/conf/server.csr.old
sudo ln -s /etc/lego/certificates/ドメイン.key /opt/bitnami/apache2/conf/server.key
sudo ln -s /etc/lego/certificates/ドメイン.crt /opt/bitnami/apache2/conf/server.crt
sudo chown root:root /opt/bitnami/apache2/conf/server*
sudo chmod 600 /opt/bitnami/apache2/conf/server*

エラーなどもなくファイルを置き換え、権限を変えたら下記のコマンドでbitnamiのサービスを起動します。

sudo /opt/bitnami/ctlscript.sh start

これで基本的なSSL化の設定ができたのでSSL化されているか「https://ドメイン」でアクセスして確認してみましょう。問題なくSSL化されていれば下記のように表示されます。

「Let’s Encrypt SSL Certificate」の更新を自動化する

「Let’s Encrypt SSL Certificate」で取得した証明書の有効期限は3か月ですので、下記のコマンドで自動化スクリプトを作成して登録します。

はじめにスクリプトを作成します。下記のコマンドで「/etc/lego/」の階層に「renew-certificate.sh」を新規ファイルとして作成します。

sudo vi /etc/lego/renew-certificate.sh

エディター画面に入ったら下記のスクリプトをペースとして保存します。「メールアドレス」、「独自ドメイン」を各自のものに置き換えてペーストして保存してください。

#!/bin/bash

sudo /opt/bitnami/ctlscript.sh stop apache
sudo /usr/local/bin/lego --email="メールアドレス" --domains="ドメイン" --path="/etc/lego" --http renew
sudo /opt/bitnami/ctlscript.sh start apache

下記のコマンドでスクリプトの権限を変更し実行できるようにします。

sudo chmod +x /etc/lego/renew-certificate.sh

次に下記のコマンドでcrontabを開きます。

sudo crontab -e

上記のコマンドを実行して下記のように表示されたら「2」をエンターして進めてください。

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

Choose 1-4 [2]: 

エディターで開いたら下記の行をcrontabのファイルの最終行にペーストして追加して保存します。「nano」の操作方法に関しては省略します。

0 0 1 * * /etc/lego/renew-certificate.sh 2> /dev/null

これで毎月1日の0時00分に「Let’s Encrypt SSL Certificate」の証明書が更新されます。

HTTPSへ強制的にリダイレクトする

現状のままだと「http://」と「https://」の両方にアクセスできる状態になっているので「http://」でアクセスした場合、強制的に「https://」へリダイレクトされるように設定してする必要があります。

下記のコマンドでApacheのコンフィグファイルを開きます。

vi /opt/bitnami/apache2/conf/bitnami/bitnami.conf

数行目に下記の設定があるのを探してください。

<VirtualHost _default_:80>
  DocumentRoot "/opt/bitnami/apache2/htdocs"
  <Directory "/opt/bitnami/apache2/htdocs">
    Options Indexes FollowSymLinks
    (下に続く)

この「DocumentRoot “/opt/bitnami/apache2/htdocs”」の後に次の設定を追加してください。「ドメイン」の部分は各自のものに置き換えてください。

  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteRule ^/(.*) https://ドメイン/$1 [R,L]

下記のようになります。

<VirtualHost _default_:80>
  DocumentRoot "/opt/bitnami/apache2/htdocs"
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteRule ^/(.*) https://ドメイン/$1 [R,L]
  <Directory "/opt/bitnami/apache2/htdocs">
    Options Indexes FollowSymLinks
    (下に続く)

設定を反映させるためにApacheを再起動します。

sudo /opt/bitnami/ctlscript.sh restart apache

これで強制的にリダイレクトされるようになります。以上の手順でSSL化されたWordPressをAWS Lightsailに構築することができました。

まとめ

ターミナルでの作業に慣れている方なら結構簡単に構築できたんじゃないでしょうか。また初心者の方でも「vi」「nano」の操作方法さえ分かれは上記の手順通りに進めるだけでWordPressが構築できるはずですので、ぜひお試しください。今回は最小スペックでしたが、大規模なサイトを構築する場合はもう少し上のグレードのインスタンスを選んだほうが良いと思います。では、みなさん素敵なWordPressライフをお送りください。

コメントする