本稿では、GCP(Google Cloud Platform)上でWordPress(Bitnami NGINX)を立ち上げる手順を、できるだけスクショを多めにして記載します。また立ち上げたローカルPCからWordPressへSFTPで接続する方法、WordPressをドメインと紐付けてSSL化する方法も記載します。
※あくまで2022年3月現在での方法です。ご覧いただくタイミングによっては、GCPのUIが異なっていたり、手順が変更になっていたり、サービス内容自体が変更されていたりすることも考えられます。
0)無料で使える!?GCPのWordPress
AWSのLightsailでは$3.5/月でWordPress(Bitnami)を、とても簡単に立ち上げることができます(Amazon Lightsail 料金表|※ドメイン費は除く)1
同様にGCPでも、割と簡単にWordPressサイトを立ち上げることができます。なんとコチラは、条件があえば激安で持てたりします(※ドメイン費は除く)
無料トライアルの登録時に、クレジットカードまたは他のお支払い方法を入力いただく必要があります。
Google Cloud の無料プログラム お支払い情報の確認
登録したからといって、勝手に課金されるわけではありません。
あと、そもそもですがGCPの利用にはGoogleアカウントが必要です。
無料プログラムには90日間 $300 分無料トライアル
と無料枠
があります。
前者は90日後に終わりますが、後者は無料枠の制限の範囲内であれば(所定の月間使用量上限内であれば)ずっと無料(もしくは激安)で利用できます。
なお、WordPressに関係するリソースはCompute Engineのところです(こちらに無料利用の条件が記載してあります)。
では、本題へ
1)GCPへクレジットカードの登録
1-0)Googleアカウントは事前に用意しておいてください。
1-1)Googleなどの検索エンジンで「GCP」を検索し、アクセスしてください。
1-2)無料で開始
か無料で使ってみる
をクリック
1-3)アナウンスに従って、情報入力(クレジットカードを登録)
1-4)登録した支払い方法を確認したり、変更したりしたい場合は、ナビゲーションメニューのお支払い
へアクセスしてください。
2)プロジェクトの新規作成
GCPを立ち上げ直後はMy First Project
という名のプロジェクトが立ち上がっており、選択されています。そのまま、このプロジェクトを使ってもいいのですが、今後に別のプロジェクトとしてWordPressを立ち上げたいこともあると思うので、本稿では別のプロジェクトを立ち上げます。
2-1)ヘッダーのロゴの右側のプルダウン(プロジェクトの管理)をクリック
2-2)アナウンスにしたがって、プロジェクト名などを入力し進める。最後に新規作成したプロジェクトを選択し、「開く」をクリック
3)マーケットプレイスからWordPressの選択
3-1)ナビゲーションメニュー内のマーケットプレイス(Marketplace)
をクリック
3-2)検索枠にWordPress SSL
で検索実行
3-3)WordPress with NGINX and SSL Certified by Bitnami and Automattic
を探してください(見つからない場合は、この名前で検索してください)
4)無料で使えるように設定する
4-1)WordPress with NGINX and SSL Certified by Bitnami and Automattic
をクリック。詳細ページにある運用開始
ボタンをクリック
4-2)必要なAPIで有効にする
をクリック(すでに他のプロダクトでAPIを有効にしている場合は、この表示はされません)
4-3)任意のDeployment name
をつける(※英小文字、数字、ダッシュのみ可。またデプロイ中のインスタンスと同名は不可)
4-4)重要!Zone
から米国リージョンus-west1
us-central1
us-east1
のいずれかを選択(参考:無料枠の使用量上限)。ちなみにゾーン-a
-b
-c
は、どれでもOKです(参考:リージョンとゾーン)
4-5)重要!シリーズをE2
にして、マシンタイプではe2-micro
を選択
4-6)Boot Diskはそのまま(Standard Persistent Disk
10GB
)
4-7)Networkingにあるチェックボックス2つをON
4-8)最下部の規約に同意してデプロイ
ボタンをクリック
リージョンやマシンタイプを変更すると、右側の料金も変わることを確認できるかと思います。なおマシンタイプはインスタンスを停止後なら構成を変更することが可能です。
5)WordPressへアクセスしてみる
ナビゲーションメニュー内のDeployment Manager > デプロイ
の詳細からWordPressへのログイン情報を確認することができます。
-
Site address
には何故かwordpresspro
という邪魔な文字列がついています...この邪魔文字を除けば、サイトのTOPへアクセスできます。 -
Admin URL
へアクセスし、記載されているAdmin user
とAdmin password
でWPの管理システムへログインしてみましょう -
Admin password
は適宜に変更しましょう
「推奨される次のステップ」と「ドキュメント」の確認
Deployment Manager > デプロイ
の詳細ページの右サイド下側(WordPressへのログイン情報が記載された下側)に、推奨される次のステップとドキュメントが掲載されています。一度、内容を確認しておきましょう
推奨される次のステップ
Change the temporary password
For additional security, it is recommended that you change the password.
仮パスワードの変更
セキュリティ強化のため、パスワードを変更することをお勧めします。
Assign a static external IP address to your VM instance
An ephemeral external IP address has been assigned to the VM instance. If you require a static external IP address, you may promote the address to static.
VMインスタンスに固定外部IPアドレスを割り当てる
VMインスタンスには、エフェメラルな外部IPアドレスが割り当てられています。静的な外部IPアドレスが必要な場合は、アドレスを静的に昇格させることができます。
ドキュメント
Getting Started
SSL化をする方法やGCPのBitnamiにおける仕様などを確認できるので、割と重要かと。英語ですが、困った時に参照しましょう。
6)固定外部IPアドレスを割り当てる
An ephemeral external IP address has been assigned to the VM instance.
VMインスタンスには、エフェメラルな外部IPアドレスが割り当てられています。
と、あります。エフェメラルは「短命な」という意味らしいです。
エフェメラル外部 IP アドレス
エフェメラル外部 IP アドレスは、リソースの寿命を超えて持続しない IP アドレスです。IP アドレスを指定せずにインスタンスまたは転送ルールを作成すると、リソースにはエフェメラル外部 IP アドレスが自動的に割り当てられます。
エフェメラル外部 IP アドレスは、リソースを削除するとリソースから解放されます。VM インスタンスの場合、インスタンスを停止すると、エフェメラル外部 IP アドレスも解放されます。インスタンスを再起動すると、新しいエフェメラル外部 IP アドレスが割り当てられます。外部 IP アドレスが割り当てられていない VM がある場合は、その VM に外部 IP アドレスを割り当てることができます。転送ルールには、外部または内部のいずれかの IP アドレスが常に割り当てられているため、転送ルールの作成後に IP アドレスを割り当てる必要はありません。
「エフェメラル外部 IP アドレス」より
ようは『固定外部IPアドレスの割り当て』をしないと「インスタンスを停止したら外部IPアドレスが変わっちゃうかもよ」ということです。
6-1)ナビゲーションメニュー内のVPCネットワーク
をクリック
6-2)左サイドメニュー内の外部IPアドレス
をクリック
6-3)リストの右端にある予約
をクリック
6-4)任意の名前を入力し予約
をクリック
6-5)リストの種類列の表示がエフェメラルから静的へ変わっている事を確認
関連リンク:GCP / Compute Engine:静的外部 IP アドレスの予約
重要!IPアドレスは有料です
まずは、コチラを確認しましょう → GCP / Compute Engine : 外部 IP アドレス料金
- たぶんですが、本稿の設定であれば
転送ルールにアタッチされた静的 IP アドレス
に該当し、課金は無料
と思われます(しらんけど) - もし
標準 VM インスタンス
だった場合は、1ヶ月間で約360円でしょうか(24時間 × 31日間 × $0.004 = 744時間 × $0.004 = $2.976 |$1が120円として... ) -
超重要!:特に注意しないといけないのが、インスタンスを削除した場合です(停止も!?)。インスタンスを削除してもIPの設定は残っています。
未使用
の場合は、$0.01かかります。上記の式で計算すると、約900円。使ってないのに月額900円。不要なIPは、必ず解放しましょう!
インスタンスを停止したら、外部IPアドレスが変わるかを試してみた
『エフェメラル外部 IP』のままで(固定外部IPアドレスの割り当てをしていない状態で)、インスタンスを停止したら外部IPアドレスが、どんな風になるかを試してみました。
インスタンスを停止したところ、外部IPアドレス部が「null」になりました。インスタンスを再開したところ、今回は元と同じ外部IPアドレスが割り当てられました(外部IPが変わらなかった)
もし、外部IPアドレスを強制的に変えたい場合はVPCネットワーク > 外部IPアドレス
で「IPの固定→エフェメラルへ変更」をしてみてはいかがでしょうか(不要なIPを解放することを忘れずに!)
7)独自ドメインの設定(DNSで固定外部IPアドレスと紐付ける)
この工程は、各DNSのサービスで多少異なるかと。
本稿ではGoogle Domainsを使った場合を記します(下記のスクショは、サブドメと固定外部IPを紐付けているものです。なお、独自ドメインの取得方法については本稿へは記載しません)
- 各DNSサービスにおいて、独自ドメインのAレコードに、GCPで取得した固定外部IPアドレスとを紐付けてください
8)サイトをSSL化する(NGINXでの対応)
独自ドメインが設定できれば、次はSSLへの対応です。
※本項ではWordPress内の設定は触れません。
公式ドキュメントの「Auto-Configure A Let's Encrypt Certificate」を参照すると...
IMPORTANT: The Bitnami HTTPS Configuration Tool does not support IPv6 addresses, load balancers/CDNs or NGINX web servers yet. If you use IPv6 addresses, please disable them before proceeding. If you use NGINX or a load balancer or CDN, please refer to the alternative approach.
重要:Bitnami HTTPS 設定ツールは、IPv6 アドレス、ロードバランサー/CDN、NGINX Web サーバーにまだ対応していません。IPv6 アドレスを使用している場合、先に進む前にそれらを無効にしてください。NGINX、ロードバランサーやCDNを使用している場合は、代替方法を参照してください。
本稿ではNGINXを使っていますので、alternative approach(代替方法)
で対応する必要があります。
alternative approach(代替方法)
は、コチラに記載があります → 「Alternative Approach」
8-1)ブラウザのSSH接続でターミナルを開く
ナビゲーションメニュー内のDeployment Manager > デプロイ
の詳細からSSH接続でターミナルを開くことができます。
※以下の手順は、上記のAlternative Approachに記載のある方法です。一度はご覧いただいた方がいいかもしれません。
8-2)Step 1: Install The Lego Client
下記のコマンドをターミナル上で実行してください。
※途中の「lego_vX.Y.Z」はダウンロードしたアーカイブのバージョン番号に置き換えることを忘れないでください
cd /tmp
curl -Ls https://api.github.com/repos/xenolf/lego/releases/latest | grep browser_download_url | grep linux_amd64 | cut -d '"' -f 4 | wget -i -
# ↓ [lego_vX.Y.Z] を置き換えること!
tar xf lego_vX.Y.Z_linux_amd64.tar.gz
sudo mkdir -p /opt/bitnami/letsencrypt
sudo mv lego /opt/bitnami/letsencrypt/lego
8-3)Step 2: Generate A Let’s Encrypt Certificate For Your Domain
下記のコマンドをターミナル上で実行してください。
※途中の「EMAIL-ADDRESS」と「DOMAIN(2箇所)」は各自の内容に置き換えてください
例) --domains="DOMAIN" → --domains="abcde.com"
sudo /opt/bitnami/ctlscript.sh stop
# ↓ [EMAIL-ADDRESS][DOMAIN]部を置き換えること!
sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --domains="www.DOMAIN" --path="/opt/bitnami/letsencrypt" run
8-4)Step 3: Configure The Web Server To Use The Let’s Encrypt Certificate
下記のコマンドをターミナル上で実行してください。
※途中の「DOMAIN」は各自の内容に置き換えてください
sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.crt /opt/bitnami/nginx/conf/bitnami/certs/server.crt.old
sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.key /opt/bitnami/nginx/conf/bitnami/certs/server.key.old
sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.csr /opt/bitnami/nginx/conf/bitnami/certs/server.csr.old
# ↓ [DOMAIN]部を置き換えること!
sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.key /opt/bitnami/nginx/conf/bitnami/certs/server.key
# ↓ [DOMAIN]部を置き換えること!
sudo ln -sf /opt/bitnami/letsencrypt/certificates/DOMAIN.crt /opt/bitnami/nginx/conf/bitnami/certs/server.crt
sudo chown root:root /opt/bitnami/nginx/conf/bitnami/certs/server*
sudo chmod 600 /opt/bitnami/nginx/conf/bitnami/certs/server*
sudo /opt/bitnami/ctlscript.sh start
8-5)Step 4: Test The Configuration
実際にブラウザからhttps://〜
でアクセスしてSSLが有効になっているかを確認してください
以上で、サイトがSSLに対応したのですが、 導入したLet’s Encryptは有効期間が90日間です。つまり3ヶ月毎に更新しないといけません...それは中々に辛いので、引き続き自動更新されるように設定します
8-6)Step 5: Renew The Let’s Encrypt Certificate
下記のコマンドをターミナル上で実行してください。
sudo mkdir -p /opt/bitnami/letsencrypt/scripts
sudo vi /opt/bitnami/letsencrypt/scripts/renew-certificate.sh
renew-certificate.sh
には、下記の内容を書き込んでください
※途中の「EMAIL-ADDRESS」と「DOMAIN(2箇所)」は各自の内容に置き換えてください
(書き込みの仕方はvi 使い方
などのワードで検索してください)
#!/bin/bash
sudo /opt/bitnami/ctlscript.sh stop nginx
sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --domains="www.DOMAIN" --path="/opt/bitnami/letsencrypt" renew --days 90
sudo /opt/bitnami/ctlscript.sh start nginx
renew-certificate.sh
へ書き込みができましたら、続いてターミナルで下記のコマンドを実行してください
sudo chmod +x /opt/bitnami/letsencrypt/scripts/renew-certificate.sh
sudo crontab -e
crontab
の編集画面になりましたら、下記の内容を書き込んでください
0 0 1 * * /opt/bitnami/letsencrypt/scripts/renew-certificate.sh 2> /dev/null
これで、Let’s Encryptが自動更新されるはずです
上記の工程で「何のコマンドを実行しているの?」と思われた方は、公式ドキュメントをご確認ください
Generate And Install A Let's Encrypt SSL Certificate For A Bitnami Application
手動で更新する場合
自動更新がうまくいかないなどで、手動で証明書を更新する場合は、下記のコマンドを実行ください
※途中の「EMAIL-ADDRESS」と「DOMAIN」は各自の内容に置き換えてください
sudo /opt/bitnami/ctlscript.sh stop
sudo /opt/bitnami/letsencrypt/lego --tls --email="EMAIL-ADDRESS" --domains="DOMAIN" --path="/opt/bitnami/letsencrypt" renew --days 90
sudo /opt/bitnami/ctlscript.sh start
9)ローカルPCからSSH接続する
OpenSSHのキーペアを作成し公開鍵をGCPのインスタンスへ登録すれば、ローカルPCから(SFTPクライアントやVScodeなどから)サーバーへ接続できるようになります。
9-1)認証鍵(キーペア)を作る
公式ドキュメントに分かりやすい記載がありました
新しい SSH 認証鍵を作成する
※Linux または macOS の方々は chmod 400 ~/.ssh/[KEY_FILENAME]
の工程を忘れないように!
9-2)公開鍵を登録する
ナビゲーションメニュー内のcompute Engine > VM インスタンス
の編集画面で公開鍵(SSH 認証鍵)を登録します。
※登録するのはssh-rsa 〜
で始まる文字列です
9-3)接続してみる
SSH接続できるアプリは様々あると思いますが、大方必要な情報は以下かと
- ホスト名:固定外部IPアドレス、もしくはドメイン
- 鍵:ローカルPC上の秘密鍵へのパス
↓サーバー内は、こんな感じです。実際に触る可能性が高いのは/bitnami
か/opt/bitnami
じゃないですかね
10)phpMyAdminへ接続する
場合によっては、直接MySQLを触りたいときがあると思います。
BitnamiにはphpMyAdminもインストールされているのですが、そのままではブラウザからアクセスできません
↓ [url]/phpmyadmin/
へアクセスしようとすると、下記の表示が...
For security reasons, this URL is only accessible using localhost (127.0.0.1) as the hostname.
デフォルトでは、セキュリティ上の理由から、アクセスを制限している状態です。これを解除します。
10-1)/opt/bitnami/nginx/conf/bitnami/phpmyadmin.conf
へアクセスする
phpmyadmin.conf
内に、先程にブラウザ上へ表示されていたテキストFor security reasons〜
が確認できます。
10-2)if ($remote_addr != 127.0.0.1) {〜省略〜}
をコメントアウトする
10-3)Bitnamiサービスを再起動する
sudo /opt/bitnami/ctlscript.sh restart
10-4)phpMyAdminへ接続する
phpMyAdminへアクセスするURLは[url]/phpmyadmin/
です。
ユーザー名はroot
です。
パスワードはDeployment Manager > デプロイ
の詳細にあるAdmin password
にあるものです。
もしくはターミナルで下記コマンドを実行しても確認できます
sudo cat /home/bitnami/bitnami_credentials
10-5)重要!触ったあとは、元へ戻しておきましょう!
コメントアウトを外して、サービスを再起動です。
「元へ戻したはずなのに、まだアクセスできる...なんで!?」と思った方は、たぶんそれ、ブラウザのキャッシュです。キャッシュを消すか、シークレットモードでアクセスしてみて、アクセスできなかったらOKです。
おまけ
リダイレクトさせたい(urlのwwwを省略したい)
本稿ではNGINXを使っていますので、.htaccess
が使えません。
じゃあ、どうやってリダイレクトさせるのか。
例えば、「www」有りURLへアクセスがあった場合に、無しURLへリダイレクトさせたい場合について。
- 触るファイルは
/opt/bitnami/nginx/conf/server_blocks/wordpress-https-server-block.conf
です。 - 例えば、下記のコードを加えます
# Redirect www to non-www:
if ($host = "www.abcde.com") {
return 301 https://abcde.com$request_uri;
}
# end redirect
- コードを加えたあとは、サービスを再起動してください
sudo /opt/bitnami/ctlscript.sh restart
BASIC認証を加えたい
これも、ほとんど上記と同じですね(スクショは上記を参照)
上記のスクショでは、WordPressのログイン画面にBASIC認証をかけています。
コード加えたあとは、サービスを再起動してください
# BASIC-Authentication
location ~* /wp-login.php|/wp-admin/.*\.php$ {
auth_basic "basic authentication";
auth_basic_user_file "/bitnami/wordpress/.htpasswd";
fastcgi_pass unix:/opt/bitnami/php/var/run/www.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
}
# end BASIC-Authentication
上記のコードでは/bitnami/wordpress/
へ.htpasswd
を入れています
avif/WebP に対応したい
こちらもApacheであれば.htaccess
へ記載しますが、NGINXの場合は/opt/bitnami/nginx/conf/nginx.conf
へ記載します。記載後はサービス再起動を忘れずに...
# load avif/webp
map $http_accept $load_avif {
~image/avif ".avif";
}
map $http_accept $load_webp {
~image/webp ".webp";
}
# end load avif/webp
# HTTP Server
server {
# load avif/webp
location ~ /wp-content/(?<path>.+)\.(?<ext>jpe?g|png|gif)$ {
add_header Vary Accept;
add_header Cache-Control "private" always;
expires 365d;
try_files $load_avif $load_webp $uri =404;
}
# end load avif/webp
# 〜省略〜
}
Bitnamiサービスの再起動/停止/開始コマンド
上記でもちょくちょく出てますが、よく使うコマンドなので...
# 再起動
sudo /opt/bitnami/ctlscript.sh restart
# 停止
sudo /opt/bitnami/ctlscript.sh stop
# 開始/再開
sudo /opt/bitnami/ctlscript.sh start
GCP-Bitnamiのドキュメント
Bitnamiは癖があります。困った時は...
WordPress With NGINX And SSL Packaged By Bitnami For Google Cloud Platform
WordPressを新規で立ち上げた際に、サーバー側でいじる部分は上記ぐらいでしょうか...
また思いついたら追記していきます
-
AWSのLightsailについての記事も投稿しています→【初心者】AWSのlightsailでWordPressを導入するまで ↩