【GCP】OpenLiteSpeed で単一サーバーで複数の WordPress を運用する環境を構築する

この記事では、Google Cloud (旧称:GCP) で OpenLiteSpeed で (通称:LiteSpeed) を使って単一サーバーで複数ドメインでの WordPress を構築します。
OpenLiteSpeed with WordPress で環境を構築後、ワンクリックスクリプトで追加の仮想ホスト WordPress を追加します。

Google Cloud での OpenLiteSpeed with WordPress サーバー構築

Google Cloud では、「OpenLiteSpeed」のソフトウェア パッケージが複数あります。
ここでは、WordPress がパッケージになっている「OpenLiteSpeed with WordPress」を使って 1 クリックで WordPress 環境を構築します。

Google Cloud の Marketplace ページを開き「OpenLiteSpeed with WordPress」で検索し、詳細ページを開きます。
パッケージに含まれるソフトウェアとバージョンを確認し、「運用開始」クリックします。
このパッケージでは、Google Compute Engine:VMインスタンスで構築されます。

[Google Cloud] Marketplace で「LiteSpeed」を検索する
[Google Cloud] OpenLiteSpeed with WordPress の詳細情報

初めて行う場合は、「利用規約への同意」「各 API の有効化」を行います。

構築する VM インスタンスの設定を行い、「デプロイ」ボタンをクリックします。
また、初めて行う場合は、OpenLiteSpeed with WordPress 用のサービスアカウントを作成することになります。
ここでは「リージョン:東京」「マシンタイプ:e2-medium」「ディスク容量:30 GB」に変更しており、それ以外はデフォルト設定のままにしています。

デフォルト設定のため、IP アドレスはエフェメラルになります。VM を再起動する度に IP アドレスが変更されるため、後ほど静的 IP アドレスに変更します。

[Google Cloud] 作成する VM インスタンスを設定する

※ 静的 IP アドレスを使用していないため、エフェメラル IP アドレスになっています。
VM インスタンスが再起動する度に IP アドレスが変わるため、IP アドレスを静的にすることをおすすめします。

すべてのプロダクトのステータスが「作成済み」になっていることを確認します。
先ほど設定した「VM インスタンス名」をクリックし、インスタンスの詳細情報ページに移動します。

[Google Cloud] 作成されたデプロイメントの詳細情報

以上で VM インスタンスとファイヤーウォールの設定が完了しています。

DNS の設定

契約しているドメインコントローラーで静的 IP アドレスを登録します。
今回は単一サーバーで複数ドメインでの WordPress 運用を行うため、A コードを使用します。

ターミナルでの操作

作成した VM インスタンスのページから「SSH」ボタンをクリックし、ターミナルを表示させます。

[Google Cloud] VM インスタンスの詳細情報

初めてターミナルを表示させると LiteSpeed で使用するドメインが求められます。

ドメインの登録が終わると Let’s encrypt での SSL 証明書の手続きに移行します。
登録したドメインで SSL 証明書を収録するため「Y」を入力します。、
問題なければ、「Requesting a certificate for {登録したドメイン}」が表示され、先程のドメインでSSL 証明書が取得できます。
続けて、HTTPS へのリダイレクト設定について質問されます。
「y」を入力すると自動的に .htaccess への書き換えが適用されます。
その後、Web サーバーのアップデート実行について質問されます。
「y」を入力すると最新の LiteSpeed へアップデートされますが PHP や MariaDB 等はアップデートされます。

WordPress のインストール

この時点で Web サーバの構築は完了しています。
ドメインまたは IP アドレスでアクセスすると WordPress のインストール画面が表示されます。
使用する言語の選択 ~ 管理者アカウントの登録を行い、インストールを完了します。

[WordPress] インストールする言語を選択する

仮想ホストを自動追加する

続けて sato2.watcher365.dev の WordPress を作成します。

LiteSpeed にはListener 、仮想ホスト (VirtualHost) の自動作成、SSL 証明書の取得、WordPress のインストールを行う vhsetup.sh スクリプトがあります。
この vhsetup.sh スクリプトをダウンロードし、権限を与えてスクリプトを実行するコマンドを行います。

wget https://raw.githubusercontent.com/litespeedtech/ls-cloud-image/master/Setup/vhsetup.sh
chmod +x vhsetup.sh
sudo bash vhsetup.sh

vhsetup.sh スクリプトが実行されると、最初に追加する 仮想ホスト のドメインについて質問されるため、追加する仮想ホストで使用するドメインを入力します。
仮想ホストの登録が完了するとそのドメインでの SSL 証明書の取得手続きに移行します。
問題なければ、「Successfully received certificate.」が表示され、SSL 証明書の取得に完了になります。
最後に、HTTPS へのリダイレクト設定について質問されます。

追加した仮想ホストの WordPress をインストールする

LiteSpeed 管理コンソールに自動的に追加されているため、ドメインでアクセスすると WordPress のインストール画面を表示することができます。
使用する言語の選択 ~ 管理者アカウントの登録を行い、インストールを完了します。

[WordPress] インストールする言語を選択する

以上で 2つめの WordPress もインストールすることができました。

MariaDB を確認する

単一の MariaDB にデータベースが入っているのか確認します。

MariaDB の root パスワードを表示させます。

sudo sed -n 1p /home/ubuntu/.db_password

MariaDB にログインします。

sudo mysql -u root -p

MariaDB のプロンプトが表示されたら、以下のコマンドを実行します。
コマンドを実行すると、MariaDB サーバー内に存在するすべてのデータベースの一覧が表示されます。

SHOW DATABASES;

確認が終わったら、以下のコマンドで MariaDB からログアウトします。

EXIT;

LiteSpeed 管理コンソールにアクセスする

LiteSpeed 管理コンソールは、「http://{外部 IP アドレス}:7080/」でアクセスすることができますがポート 7080 は閉じているため、7080 へのアクセスを許可する必要があります。
すべての IP から7080 へのアクセスを許可するコマンドを行います。

sudo ufw allow 7080

設定が完了後は、7080 へのアクセスを不許可にして LiteSpeed 管理コンソールにアクセスできないようにしてください。
すべての IP から7080 へのアクセスを禁止するコマンドを行います。

ufw delete allow 7080

LiteSpeed 管理コンソールのユーザー名とパスワードを取得するために、次のコマンドを実行します。

cat /home/ubuntu/.litespeed_password

PHP をアップデートして lsphp を切り替える

このときには PHP 8.3.20 を使用していたため、lsphp83 でした。
最新版の PHP 84 にして lsphp84 に切り替えます。

必要な PHP 8.4 と基本的な拡張機能をまとめてインストールするコマンドを行います。
環境によって必要なパッケージが異なります。

sudo apt install lsphp84 lsphp84-common lsphp84-mysql lsphp84-opcache lsphp84-curl lsphp84-gd lsphp84-imagick php8.4-mbstring php8.4-xml php8.4-zip php8.4-imap php8.4-json php8.4-fpm -y

使用している PHP のバージョンを確認します。

php -v

LiteSpeed 管理コンソールにアクセスします。

左サイドバーから「Server Configuration」をタップし、「External App」をタップします。

WebAdmin コンソール > サーバー構成 > 外部アプリ を表示し、 lsphp の「編集」ボタンをタップします。

Command 項目の値を次に変更します。
lsphp83/bin/lsphp → lsphp84/bin/lsphp

sudo vim /usr/local/lsws/lsphp84/etc/php/8.4/litespeed/php.ini

WordPress のアップロード上限を変更する

WordPress のアップロード上限を動画や データインポートなどの大容量ファイルを扱えるようにアップロード上限を変更します。

SSH でターミナルを表示します。
vim で php.ini ファイルを編集するコマンドを実行します。

※ ここでは lsphp84 ですが、バージョンによって異なります。事前に lsws ディレクトリ内を確認してください。

sudo vim /usr/local/lsws/lsphp84/etc/php/8.4/litespeed/php.ini

それぞれの値を、必要なアップロード上限に合わせて変更します。

upload_max_filesize = 1G
post_max_size = 1G

php.ini ファイルを保存して閉じます。
(:wp を入力して Enter )

PHP を再起動して先程の変更を適用します

sudo pkill lsphp

これで WordPress でのアップロード上限が更新されています。

phpMyAdmin をアップデートする

最新版 phpMyAdmin をダウンロードし、展開されたディレクトリ名を phpmyadmin に変更して、phpmyadmin ディレクトリの所有者をウェブサーバーのユーザー (www-data) に変更するコマンドを実行します。

sudo rm -rf /var/www/phpmyadmin && \
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O /tmp/phpMyAdmin-latest.zip && \
sudo unzip -o /tmp/phpMyAdmin-latest.zip -d /var/www/ && \
sudo mv /var/www/phpMyAdmin-* /var/www/phpmyadmin && \
sudo chown -R www-data:www-data /var/www/phpmyadmin && \
rm -f /tmp/phpMyAdmin-latest.zip

MariaDB をアップデートする

MariaDB サーバーとクライアントをアップグレードします。

sudo apt update && sudo apt upgrade mariadb-server mariadb-client -y

MariaDB サーバーを再起動します。

sudo systemctl restart mariadb

使用している MariaDB サーバーのバージョンを確認します。

mysql -V

Certbot で Cloudflare DNS-01 認証を使用する手順

Certbot Cloudflare プラグインをインストールします。

sudo apt update
sudo apt install python3-certbot-dns-cloudflare -y

Cloudflare API 認証情報ファイルを作成します。

sudo vim /etc/letsencrypt/cloudflare.ini

ファイルに以下の内容を記述します。

# Cloudflare API credentials used by Certbot
dns_cloudflare_api_token = {YOUR_CLOUDFLARE_API_TOKEN}

ファイルの権限を制限して、セキュリティを強化します。

sudo chmod 600 /etc/letsencrypt/cloudflare.ini

Certbot を実行して DNS-01 認証で証明書を取得します。

sudo certbot certonly --dns-cloudflare -d {YOUR_DOMAIN} -m {YOUR_EMAILADDRESS} --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini --agree-tos

DNS-01 認証で SSL 証明書を取得した場合。LiteSpeed の Virtual Hosts には自動で設定されません。
そのため、LiteSpeed 管理画面にアクセスして「Virtual Hosts > SSL タブ}」で証明書と秘密鍵のパスを設定します。
設定後、LiteSpeed を再起動します。

SSL 証明書の自動更新の設定

Let’s Encrypt の SSL 証明書の有効期間は通常 3ヶ月 (90日間) です。
有効期限が切れると、ウェブサイトの HTTPS アクセスに問題が発生するため、定期的な再更新が必要です
ワンクリックインストールスクリプトや、Certbot を使用して手動で取得した場合、多くの場合、自動更新の設定も同時に行われています。

自動更新の設定の確認: 以下のコマンドを実行して、自動更新の設定がされているか確認します。

sudo systemctl list-timers | grep certbot
sudo crontab -l | grep certbot

これらのコマンドの出力に certbot.timer や certbot renew のような記述があれば、自動更新の設定がされている可能性があります。

自動更新のテスト:
以下のコマンドを実行して、自動更新をシミュレートしてみます。
実際には証明書は更新されませんが、設定が正しく動作するかどうかを確認できます。
エラーなく完了すれば、自動更新の設定は機能しています。

sudo certbot renew --dry-run

ドキュメント:

このサイトの運営者です。 Google テクノロジーが好きで布教活動を勝手にしています。