Amazon Lightsail を使って WordPress の環境を構築する

WordPress、やっぱりよく使われていますよね。

今回は Amazon Lightsail を使って WordPress の環境を構築してみたいと思います。

やってみる

基本的には以下の2つの公式ドキュメントの内容に沿ってやっています。

HTTP の状態で作成し、そのあと HTTPS 化する感じです。

今回はロードバランサーやディストリビューションは使わずに、 Lightsail インスタンスに静的 IP を付与して使う一番簡単そうなパターンを試してみたいと思います。

インスタンスを作る

まずは Lightsail のメニューに行ってみます。

lightsail-menu

実は初めて開いたため、雰囲気の違いに少し驚きました。

lightsail-instance-home

インスタンスの作成」ボタンをクリックします。

lightsail-region

東京リージョンを選択しました。

lightsail-blue-print

Linux/UnixWordPressを選択します。

lightsail-option

今回はオプションは特に何も変更せずに進みました。実運用で使う際には自動スナップショットは有効にしたいと思います。

lightsail-size

今回は検証用に作ったインスタンスなので $3.5 を選択しましたが、これを選ぶと

■ より大きなインスタンスプランをご検討ください
選択したプランでは、アプリケーションの速度が遅くなったり、アプリケーションが応答しなくなったりするなど、
パフォーマンスの問題が発生する場合があります。$5 USD (1 GB RAM) インスタンスプラン以上を
選択することをご検討ください

という警告が出ました。確かに小さめではあるので、アクセス数がある程度多そうなサイトではもっと大きなサイズを選択する必要はありそうです。

lightsail-create

リソース名は AWS アカウントの Lightsail の中で一意である必要があります。 タグは特につけずに「インスタンスの作成」をおこないました。

lightsail-instance-list
(名前、アドレスの部分はオレンジに塗っています)

インスタンスの一覧画面に作成したインスタンスが表示されるようになり、すぐに(1 分〜2 分くらいで?)使える状態になりました。

静的 IP アドレスを付ける

インスタンスを作成しただけの状態だと、インスタンスの再起動が起きたときにパブリック IP が変わってしまうため、静的 IP を付けます。

料金のページによると静的 IP の料金は Lightsail の料金に含まれているようなので、追加で料金が発生することは無いようです。(細かいですがFAQ のページによると静的 IP をアタッチせずに持ち続けていると料金がかかるようです)

インスタンス一覧の画面から、インスタンス名をクリックするとインスタンスの詳細画面に遷移します。その中に「ネットワーキング」というタブがありますので、それを開きます。

lightsail-static-ip
(アドレスの部分はオレンジに塗っています)

静的 IP をアタッチする」をクリックします。

lightsail-static-ip-name

名前を付けて「作成およびアタッチ」をクリックします。

lightsail-static-ip-set
(アドレスの部分はオレンジに塗っています)

アタッチができると、さきほどのパブリック IP の部分が、静的 IP を使っている状態に変わっています。

WordPress を見てみる

ここまでやれば、もう IP アドレスを使ってサーバーにアクセスすることができます。(実は静的 IP を付ける前から、パブリック IP を使えばアクセスはできましたが、その IP はすぐ使わなくなってしまう IP だったので、そこでの確認は飛ばしました)

http://アタッチされた静的IPアドレス

でアクセスすれば初期状態の WordPress のサイトが見られると思います。

lightsail-sample-page
Sample Page と書かれていますね

まだ HTTPS 化していないので、以下は Chrome の場合ですが保護されていない通信である旨の警告が表示されています。

lightsail-http-warn

WordPress の管理画面を見てみる

管理画面のパスワードを取得する

管理画面はログイン情報が必要なので、まずは以下の方法でパスワードを取得します。

インスタンス一覧の画面でインスタンスを見ると、SSH 接続っぽいアイコンがありますのでそれをクリックします。

lightsail-instance-item

そうするとインスタンスに SSH 接続する画面が立ち上がります。便利ですね。

lightsail-instance-ssh

そこで以下のように入力すると、 WordPress の管理画面のパスワードを取得できます。

cat $HOME/bitnami_application_password

管理画面にログイン

http://アタッチされた静的IPアドレス/wp-login.php

さきほどの URL の後ろに /wp-login.php を付けたのがログイン画面の URL です。

lightsail-wp-login

ここで、ユーザー名は user 、パスワードは先ほど取得したパスワードを入れるとログインできます。

lightsail-wp

これで、管理画面も使えるようになりました。

ドメインでアクセスできるようにする

ここまでパブリック IP を使ってアクセスしていましたが、ドメインでアクセスできるように DNS の設定をおこないます。

チュートリアルのステップ 6を見ると、 Lightsail(AWS)のネームサーバーを、使いたいドメインの NS レコードに追加することで、 Lightsail 側で DNS レコードを管理する方法が載っています。ドメインは別の場所で管理されていることも多いですし、運営するサイトに関係するリソースや設定をできるだけ Lightsail 内で持っておくという意味でも、その方法は良さそうだなと思いました。

私の場合、今回試したドメインを他にもいろいろな検証に使い回していたり、管理画面的にも近い Route53 で管理していたので、直接 Route53 で A レコードを追加してしまうことにしました。

lightsail-route53
左がドメイン、右がインスタンスの静的IPアドレスです。

これで、DNS 設定の反映を待てば、ドメインでのアクセスができるようになります。

HTTPS でアクセスできるようにする

HTTP のままのサイトはブラウザで警告が出たり、SEO 的にも不利なので HTTPS に対応しておきたいところです。

Lightsail で公開するサイトを HTTPS 化するには、主に以下の 3 つの方法が公式には書かれているようです。

今回やるのは、一番最初の方法です。ドキュメントにも書いてありますが、bncert というツールを使います。ドキュメントには、ツールがインストールされていない場合のインストール手順も記載がありましたが、私が試したときにはインスタンスを作成した時点でツールはインストール済みの状態でした。

このツールは、

  • Let's Encrypt の SSL/TLS 証明書を作成してくれる。
  • Let's Encrypt で必要となる 90 日ごとの証明書更新を行うためのスケジュール設定を自動的にしてくれる。
  • リダイレクトの設定をしてくれる(http↔https, www.example.com↔ example.com)

という感じで、HTTPS 化するときに必要なことをまとめてやってくれる便利ツール的なもののようです。

ドメインがリクエスト元のインスタンスのパブリック IP アドレスにトラフィックをすでに送信していることを
確認することによって、ドメインを所有していることを確認します

と書かれているので、この方法で設定する場合には、先に、静的 IP を付与する作業と、ドメインでインスタンスにアクセスできるようにする作業をやっておく必要がありそうです。

SSH でインスタンスに接続する

WordPress の管理者パスワードを取得したときと同様に、SSH でインスタンスに接続します。

bncert で設定する

以下のコマンドを実行します。

sudo /opt/bitnami/bncert-tool
lightsail-bncert-start

ドメインのリストを指定するように言ってくるので、自分の使うドメインを入力します。

次に、リダイレクトの設定をきいてきます。

lightsail-bncert-redirect

今回は、http → https へのリダイレクトだけを設定して、www の有る無しの間でのリダイレクトは設定せずに進めました。

lightsail-bncert-change

このような変更がされますよ、というリストが表示されます。

  • サーバーを止める
  • Let's Encrypt のサーバーを設定する
  • Let's Encrypt の証明書を自動更新するための cron job を設定する
  • リダイレクトの設定をする
  • サーバーを起動する

内容を確認して Y で進みます。

Let's Encrypt に使われるメールアドレスを入力し、合意書を確認します。

lightsail-bncert-agreement

少し待つと処理が完了します。

lightsail-bncert-done

これで設定は完了です。

ブラウザから HTTPS 化されていることを確認する

lightsail-bncert-goal

ブラウザからアクセスして、以下のように証明書が有効になっていることを確認できれば OK です。

準備中はサイトにアクセスできる IP アドレスを制限する

作成された WordPress はサンプルのサイトの状態なので、準備が整うまでは他の人に見られたくないこともあります。そのような場合に使える方法の1つとして IP アドレスで制限する機能があります。

インスタンスのメニューの中の、ネットワーキングというタブを選択すると、中に以下のようにファイアウォールの設定があります。

lightsail-firewall-1

最初の状態だと任意の IP アドレスからアクセス可能な設定になっています。 HTTP、 HTTPS で編集ボタンをクリックして、

lightsail-firewall-2

IP アドレスに制限する、というのにチェックを入れて、使いたい IP アドレスを入力して保存します。

lightsail-firewall-3

これで、自分の会社の固定 IP など、特定の IP からだけサイトが見られる状態になります。

やってみた感想

WordPress の新しい環境として使い始められるようになるところまで、すぐにできて、手順も難しくなかったです。

サーバーや AWS の知識があまり無くても WordPress を公開するのに妥当なコストで妥当な環境が簡単に作れるので、個人でやる場合だったり、インフラの管理にそれほどリソースを使えないようなケースでは特に便利そうだと感じました。

インフラに詳しいエンジニアがいれば、利用ケースに応じてもっとコストを切り詰めたり負荷に応じたスケーリングをしたりといった構成を Lightsail を使わずに構築することはできるかもしれません。しかしその分、システムの運用の難易度も上がってしまうかもしれないため、必ずしも、突き詰めて構築したほうが良いケースばかりではありません。そこは、構築する WordPress の目的や規模、予算によって判断する必要がありそうです。

おわり。

投稿者: たにかね
カテゴリ: 技術ブログ
公開日: 2024.2.15