初心者【GCP】WordPress＋SFTP＋ドメイン＋SSL（Bitnami NGINX 2022年3月）

本稿では、GCP（Google Cloud Platform）上でWordPress（Bitnami NGINX）を立ち上げる手順を、できるだけスクショを多めにして記載します。また立ち上げたローカルPCからWordPressへSFTPで接続する方法、WordPressをドメインと紐付けてSSL化する方法も記載します。

※あくまで2022年3月現在での方法です。ご覧いただくタイミングによっては、GCPのUIが異なっていたり、手順が変更になっていたり、サービス内容自体が変更されていたりすることも考えられます。


# ０）無料で使える！？GCPのWordPress

AWSのLightsailでは＄3.5/月でWordPress（Bitnami）を、とても簡単に立ち上げることができます（[Amazon Lightsail 料金表](https://aws.amazon.com/jp/lightsail/pricing/)｜※ドメイン費は除く）[^toAWS]

[^toAWS]:AWSのLightsailについての記事も投稿しています→[【初心者】AWSのlightsailでWordPressを導入するまで](https://qiita.com/tomokei5634/items/9719731e355ad5299fc2)　


同様にGCPでも、割と簡単にWordPressサイトを立ち上げることができます。なんとコチラは、**条件があえば**激安で持てたりします（※ドメイン費は除く）

https://cloud.google.com/free/docs/gcp-free-tier?hl=ja

:::note warn
無料トライアルの登録時に、クレジットカードまたは他のお支払い方法を入力いただく必要があります。
[Google Cloud の無料プログラム お支払い情報の確認](https://cloud.google.com/free/docs/gcp-free-tier?hl=ja#billing_verification)
登録したからといって、勝手に課金されるわけではありません。
あと、そもそもですがGCPの利用にはGoogleアカウントが必要です。
:::

:::note info
無料プログラムには`90日間 $300 分無料トライアル`と`無料枠`があります。
前者は90日後に終わりますが、後者は[無料枠の制限](https://cloud.google.com/free/docs/gcp-free-tier?hl=ja#free-tier-usage-limits)の範囲内であれば（所定の月間使用量上限内であれば）ずっと無料（もしくは激安）で利用できます。

なお、WordPressに関係するリソースは[Compute Engine](https://cloud.google.com/free/docs/gcp-free-tier?hl=ja#compute)のところです（こちらに無料利用の条件が記載してあります）。
:::


では、本題へ

# １）GCPへクレジットカードの登録
1-0）Googleアカウントは事前に用意しておいてください。
1-1）Googleなどの検索エンジンで「GCP」を検索し、アクセスしてください。
1-2）`無料で開始`か`無料で使ってみる`をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/2eccfab8-b4d4-cab3-4d8f-2613478198b0.png)
1-3）アナウンスに従って、情報入力（クレジットカードを登録）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/a997e192-307c-c58f-5f4e-729becf4c3e9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/78338937-9fbf-bc56-de82-1293e6d6dc26.png)
1-4）登録した支払い方法を確認したり、変更したりしたい場合は、ナビゲーションメニューの`お支払い`へアクセスしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/41ed71bf-ff0d-dbe0-5a6a-b55289b07578.png)


# ２）プロジェクトの新規作成
GCPを立ち上げ直後は`My First Project`という名のプロジェクトが立ち上がっており、選択されています。そのまま、このプロジェクトを使ってもいいのですが、今後に別のプロジェクトとしてWordPressを立ち上げたいこともあると思うので、本稿では別のプロジェクトを立ち上げます。

2-1）ヘッダーのロゴの右側のプルダウン（プロジェクトの管理）をクリック
2-2）アナウンスにしたがって、プロジェクト名などを入力し進める。最後に新規作成したプロジェクトを選択し、「開く」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/06724353-ca4a-1896-94ee-d74e36adc9e3.png)


:::note info
GCPには沢山のサービスがありますが、よく使うサービスは、ナビゲーションメニューで「固定」をしておくと、運用が便利になるかもしれません。
本稿で紹介するWordPressにおいては`Deployment Manager` `Compute Engine` `VPC ネットワーク` `マーケットプレイス` `お支払い` が関係するサービスかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/a02e6ad2-b77d-b6fe-c6ba-79ef33684669.png)
:::


# ３）マーケットプレイスからWordPressの選択
3-1）ナビゲーションメニュー内の`マーケットプレイス（Marketplace）`をクリック
3-2）検索枠に`WordPress SSL`で検索実行
3-3）`WordPress with NGINX and SSL Certified by Bitnami and Automattic`を探してください（見つからない場合は、この名前で検索してください）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/c7032cb3-9656-4b3a-964b-87fcff284d7d.png)

:::note info
`WordPress`で検索すると、沢山のパッケージが表示されます。目的に応じて選択いただければいいのですが、「とりあえず無料で試してみたい」という方は、左サイドエリアの`無料`でフィルタリングしてみてはいかがでしょうか。なお本稿で使用するパッケージは、この`無料`に含まれるものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/bd3e840b-1671-78c1-43c4-130c27360953.png)
:::

# ４）無料で使えるように設定する

:::note warn
`WordPress with NGINX and SSL Certified by Bitnami and Automattic`をクリックして`料金`をみると...「あれ？有料！？」と思ってしまうような表示があります。安心してください。この工程で「無料（もしくは激安）」になるように設定します。言い換えると、**設定をしないと表示通りのお金が発生する**ので、ご注意ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/4c94c446-7e84-3c9e-2bb4-897424fa1246.png)
:::

4-1）`WordPress with NGINX and SSL Certified by Bitnami and Automattic`をクリック。詳細ページにある`運用開始`ボタンをクリック
4-2）*必要なAPI*で`有効にする`をクリック（すでに他のプロダクトでAPIを有効にしている場合は、この表示はされません）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/d2591ee2-aa73-32f3-7c6a-c7571af58af6.png)

4-3）任意の`Deployment name`をつける（※英小文字、数字、ダッシュのみ可。またデプロイ中のインスタンスと同名は不可）
4-4）<font color="red">重要！</font>`Zone`から米国リージョン`us-west1` `us-central1` `us-east1`のいずれかを選択（参考：[無料枠の使用量上限](https://cloud.google.com/free/docs/gcp-free-tier?hl=ja#compute)）。ちなみにゾーン`-a` `-b` `-c`は、どれでもOKです（参考：[リージョンとゾーン](https://cloud.google.com/compute/docs/regions-zones?hl=ja)）
4-5）<font color="red">重要！</font>*シリーズ*を`E2`にして、*マシンタイプ*では`e2-micro`を選択
4-6）*Boot Disk*はそのまま（`Standard Persistent Disk` `10GB`）
4-7）*Networking*にあるチェックボックス２つをON
4-8）最下部の規約に同意して`デプロイ`ボタンをクリック

リージョンやマシンタイプを変更すると、右側の料金も変わることを確認できるかと思います。なお*マシンタイプ*は**インスタンスを停止後なら**構成を変更することが可能です。

![op032801.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/401e9f28-2fc8-8647-3111-a7980682d6f0.png)

↓デプロイが完了した状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/638c2c33-251f-5907-1e79-56530df5281b.png)

:::note info
**もしAPIを無効にしたくなったら**
ナビゲーションメニュー内の`APIとサービス > 有効なAPIとサービス`から確認、無効にすることができます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/945cb2d7-bf84-2001-5765-b6b860ba897c.png)
:::


:::note info
**インスタンスを停止したいとき、構成を変更したいとき**
ナビゲーションメニュー内の`compute Engine > VM インスタンス`で停止、変更することができます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/fe3cc50c-5521-2681-56ed-7ffbb642c522.png)
:::



# ５）WordPressへアクセスしてみる
ナビゲーションメニュー内の`Deployment Manager > デプロイ`の詳細からWordPressへのログイン情報を確認することができます。

- `Site address`には何故か`wordpresspro`という邪魔な文字列がついています...この邪魔文字を除けば、サイトのTOPへアクセスできます。
- `Admin URL`へアクセスし、記載されている`Admin user`と`Admin password`でWPの管理システムへログインしてみましょう
- `Admin password`は適宜に変更しましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/82fa7efd-6341-97e8-e6fe-be8f3fb20fd8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/01ab7a8c-9d75-e085-a6d1-ad40596e104a.png)


:::note info
**「推奨される次のステップ」と「ドキュメント」の確認**
`Deployment Manager > デプロイ`の詳細ページの右サイド下側（WordPressへのログイン情報が記載された下側）に、**推奨される次のステップ**と**ドキュメント**が掲載されています。一度、内容を確認しておきましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/af18fd28-6a36-7497-f7a3-c2446e9721cd.png)

**推奨される次のステップ**
> 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](https://docs.bitnami.com/google/apps/wordpress-pro/)
SSL化をする方法やGCPのBitnamiにおける仕様などを確認できるので、割と重要かと。英語ですが、困った時に参照しましょう。
:::


# ６）固定外部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 アドレス](https://cloud.google.com/compute/docs/ip-addresses#ephemeraladdress)」より

ようは『固定外部IPアドレスの割り当て』をしないと「インスタンスを停止したら外部IPアドレスが変わっちゃうかもよ」ということです。

6-1）ナビゲーションメニュー内の`VPCネットワーク`をクリック
6-2）左サイドメニュー内の`外部IPアドレス`をクリック
6-3）リストの右端にある`予約`をクリック
6-4）任意の名前を入力し`予約`をクリック
6-5）リストの*種類*列の表示が**エフェメラル**から**静的**へ変わっている事を確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/251d8848-c5b6-ed63-4f42-76e81a5db58d.png)

関連リンク：[GCP / Compute Engine：静的外部 IP アドレスの予約](https://cloud.google.com/compute/docs/ip-addresses/reserve-static-external-ip-address)

:::note info
**もう一つの方法（インスタンスから固定外部IPアドレス割り当て）**
ナビゲーションメニュー内の`compute Engine > VM インスタンス`の編集ページからでも、固定外部IPアドレスを割り当てることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/d0c8fbec-64c9-b1c5-7cb1-74c894b7e986.png)
:::

## 重要！IPアドレスは有料です
まずは、コチラを確認しましょう → [GCP / Compute Engine ： 外部 IP アドレス料金](https://cloud.google.com/compute/all-pricing?hl=ja#ipaddress)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/c36b4edb-c106-ef01-776b-89564d9f09fd.png)

- たぶんですが、本稿の設定であれば`転送ルールにアタッチされた静的 IP アドレス`に該当し、課金は`無料`と思われます（しらんけど）
- もし`標準 VM インスタンス`だった場合は、１ヶ月間で約360円でしょうか（24時間 × 31日間 × ＄0.004 ＝ 744時間 × ＄0.004 ＝ ＄2.976　｜＄１が120円として...　）
- <font color="red">超重要！</font>：特に注意しないといけないのが、インスタンスを削除した場合です（停止も！？）。インスタンスを削除してもIPの設定は残っています。`未使用`の場合は、＄0.01かかります。上記の式で計算すると、約900円。使ってないのに月額900円。**不要なIPは、必ず解放しましょう！**

:::note warn
**不要なIPを解放する方法**
ナビゲーションメニュー内の`VPCネットワーク > 外部IPアドレス`から不要なIPを解放することができます。詳細は、下記のスクショを参照してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/7022f7be-3b5f-bcbc-3e7a-74ef207f228f.png)
:::

:::note info
**インスタンスを停止したら、外部IPアドレスが変わるかを試してみた**
『エフェメラル外部 IP』のままで（固定外部IPアドレスの割り当てをしていない状態で）、インスタンスを停止したら外部IPアドレスが、どんな風になるかを試してみました。
インスタンスを停止したところ、外部IPアドレス部が「null」になりました。インスタンスを再開したところ、今回は元と同じ外部IPアドレスが割り当てられました（外部IPが変わらなかった）
もし、外部IPアドレスを強制的に変えたい場合は`VPCネットワーク > 外部IPアドレス`で「IPの固定→エフェメラルへ変更」をしてみてはいかがでしょうか（不要なIPを解放することを忘れずに！）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/0b8d48ae-1c4d-82fe-3f4d-0cefe5f02446.png)
:::


# ７）独自ドメインの設定（DNSで固定外部IPアドレスと紐付ける）
この工程は、各DNSのサービスで多少異なるかと。
本稿では*Google Domains*を使った場合を記します（下記のスクショは、サブドメと固定外部IPを紐付けているものです。なお、独自ドメインの取得方法については本稿へは記載しません）
- 各DNSサービスにおいて、独自ドメインのAレコードに、GCPで取得した固定外部IPアドレスとを紐付けてください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/7b984c83-2a5b-d725-6dc1-cef7eea14ac0.png)



# ８）サイトをSSL化する（NGINXでの対応）
独自ドメインが設定できれば、次はSSLへの対応です。
※本項ではWordPress内の設定は触れません。

公式ドキュメントの「[Auto-Configure A Let's Encrypt Certificate](https://docs.bitnami.com/google/apps/wordpress-pro/administration/generate-configure-certificate-letsencrypt/)」を参照すると...

> 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](https://docs.bitnami.com/google/how-to/generate-install-lets-encrypt-ssl/#alternative-approach)」


8-1）ブラウザのSSH接続でターミナルを開く
ナビゲーションメニュー内の`Deployment Manager > デプロイ`の詳細からSSH接続でターミナルを開くことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/eef49b8d-046d-7a11-98cf-e6d9d2d5d081.png)

※以下の手順は、上記の[Alternative Approach](https://docs.bitnami.com/google/how-to/generate-install-lets-encrypt-ssl/#alternative-approach)に記載のある方法です。一度はご覧いただいた方がいいかもしれません。

8-2)Step 1: Install The Lego Client
下記のコマンドをターミナル上で実行してください。
※**途中の「<font color="red">lego_vX.Y.Z</font>」はダウンロードしたアーカイブのバージョン番号に置き換えることを忘れないでください**

```shell:GCP-SSH-terminal
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
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/709b9872-47ec-589c-31e6-5df7f5d82118.png)

8-3）Step 2: Generate A Let’s Encrypt Certificate For Your Domain
下記のコマンドをターミナル上で実行してください。
※**途中の「<font color="red">EMAIL-ADDRESS</font>」と「<font color="red">DOMAIN（2箇所）</font>」は各自の内容に置き換えてください**

例） --domains="DOMAIN" →　--domains="abcde.com"

```shell:GCP-SSH-terminal
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
下記のコマンドをターミナル上で実行してください。
※**途中の「<font color="red">DOMAIN</font>」は各自の内容に置き換えてください**

```shell:GCP-SSH-terminal
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
下記のコマンドをターミナル上で実行してください。

```shell:GCP-SSH-terminal
sudo mkdir -p /opt/bitnami/letsencrypt/scripts
sudo vi /opt/bitnami/letsencrypt/scripts/renew-certificate.sh
```

`renew-certificate.sh`には、下記の内容を書き込んでください
※**途中の「<font color="red">EMAIL-ADDRESS</font>」と「<font color="red">DOMAIN（2箇所）</font>」は各自の内容に置き換えてください**
（書き込みの仕方は[`vi 使い方`](https://www.google.com/search?q=vi+%E4%BD%BF%E3%81%84%E6%96%B9)などのワードで検索してください）

```shell:/opt/bitnami/letsencrypt/scripts/renew-certificate.sh
#!/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
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/40067a58-d7dd-e9cf-8207-70e0e8cb5406.png)


`renew-certificate.sh`へ書き込みができましたら、続いてターミナルで下記のコマンドを実行してください

```shell:GCP-SSH-terminal
sudo chmod +x /opt/bitnami/letsencrypt/scripts/renew-certificate.sh
sudo crontab -e
```

`crontab`の編集画面になりましたら、下記の内容を書き込んでください

```shell:crontab
  0 0 1 * * /opt/bitnami/letsencrypt/scripts/renew-certificate.sh 2> /dev/null
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/47abed5f-ba79-35b2-1663-48055c62d371.png)


これで、*Let’s Encrypt*が自動更新される**はず**です

上記の工程で「何のコマンドを実行しているの？」と思われた方は、公式ドキュメントをご確認ください
[Generate And Install A Let's Encrypt SSL Certificate For A Bitnami Application](https://docs.bitnami.com/google/how-to/generate-install-lets-encrypt-ssl/#alternative-approach)

:::note info
**手動で更新する場合**
自動更新がうまくいかないなどで、手動で証明書を更新する場合は、下記のコマンドを実行ください
※**途中の「<font color="red">EMAIL-ADDRESS</font>」と「<font color="red">DOMAIN</font>」は各自の内容に置き換えてください**
```shell:GCP-SSH-terminal
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
```
:::



# ９）ローカルPCからSSH接続する
OpenSSHのキーペアを作成し公開鍵をGCPのインスタンスへ登録すれば、ローカルPCから（SFTPクライアントやVScodeなどから）サーバーへ接続できるようになります。

9-1）認証鍵（キーペア）を作る
公式ドキュメントに分かりやすい記載がありました
[新しい SSH 認証鍵を作成する](https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys#createsshkeys)

※Linux または macOS の方々は `chmod 400 ~/.ssh/[KEY_FILENAME]` の工程を忘れないように！

9-2)公開鍵を登録する
ナビゲーションメニュー内の`compute Engine > VM インスタンス`の編集画面で公開鍵（SSH 認証鍵）を登録します。
※登録するのは`ssh-rsa 〜`で始まる文字列です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/63b9b9a6-0d51-a2b5-2cb3-af9452938726.png)

9-3)接続してみる
SSH接続できるアプリは様々あると思いますが、大方必要な情報は以下かと
- ホスト名：固定外部IPアドレス、もしくはドメイン
- 鍵：ローカルPC上の秘密鍵へのパス

↓サーバー内は、こんな感じです。実際に触る可能性が高いのは`/bitnami`か`/opt/bitnami`じゃないですかね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/01f99ea3-16ee-1b70-740b-fe77ea439ba1.png)

# １０）phpMyAdminへ接続する
場合によっては、直接MySQLを触りたいときがあると思います。
Bitnamiには*phpMyAdmin*もインストールされているのですが、そのままではブラウザからアクセスできません

↓ `[url]/phpmyadmin/`へアクセスしようとすると、下記の表示が...

```text:[url]/phpmyadmin/
For security reasons, this URL is only accessible using localhost (127.0.0.1) as the hostname.
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/67cbdb68-82e4-9651-dbc7-0cacc02714e0.png)

デフォルトでは、セキュリティ上の理由から、アクセスを制限している状態です。これを解除します。

10-1）`/opt/bitnami/nginx/conf/bitnami/phpmyadmin.conf`へアクセスする

`phpmyadmin.conf`内に、先程にブラウザ上へ表示されていたテキスト`For security reasons〜`が確認できます。

10-2）`if ($remote_addr != 127.0.0.1) {〜省略〜}`をコメントアウトする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/0772537f-6a42-0914-dc8e-2451fa2a7789.png)

10-3）Bitnamiサービスを再起動する

```shell:GCP-SSH-terminal
sudo /opt/bitnami/ctlscript.sh restart
```

10-4）phpMyAdminへ接続する
*phpMyAdmin*へアクセスするURLは`[url]/phpmyadmin/`です。
ユーザー名は`root`です。
パスワードは`Deployment Manager > デプロイ`の詳細にある`Admin password`にあるものです。
もしくはターミナルで下記コマンドを実行しても確認できます

```shell:GCP-SSH-terminal
sudo cat /home/bitnami/bitnami_credentials
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/526c9df6-1ea8-7f53-2259-48cc41e83fc5.png)


10-5）重要！触ったあとは、元へ戻しておきましょう！
コメントアウトを外して、サービスを再起動です。
「元へ戻したはずなのに、まだアクセスできる...なんで！？」と思った方は、たぶんそれ、ブラウザのキャッシュです。キャッシュを消すか、シークレットモードでアクセスしてみて、アクセスできなかったらOKです。


# おまけ
## リダイレクトさせたい(urlのwwwを省略したい)
本稿では*NGINX*を使っていますので、`.htaccess`が使えません。
じゃあ、どうやってリダイレクトさせるのか。
例えば、「www」有りURLへアクセスがあった場合に、無しURLへリダイレクトさせたい場合について。

- 触るファイルは`/opt/bitnami/nginx/conf/server_blocks/wordpress-https-server-block.conf`です。
- 例えば、下記のコードを加えます

```conf:/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
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/50aa91e6-6b8a-8e08-c51c-5a44e4600d63.png)

- コードを加えたあとは、サービスを再起動してください

```shell:GCP-SSH-terminal
sudo /opt/bitnami/ctlscript.sh restart
```

## BASIC認証を加えたい
これも、ほとんど上記と同じですね（スクショは上記を参照）
上記のスクショでは、WordPressのログイン画面にBASIC認証をかけています。
コード加えたあとは、サービスを再起動してください

```shell:GCP-SSH-terminal
# 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
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/5296dcbe-40ff-3534-6460-92affd8f6262.png)

上記のコードでは`/bitnami/wordpress/`へ`.htpasswd`を入れています


## avif/WebP に対応したい
こちらも*Apache*であれば`.htaccess`へ記載しますが、*NGINX*の場合は`/opt/bitnami/nginx/conf/nginx.conf`へ記載します。記載後はサービス再起動を忘れずに...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283603/d4d6cd9b-40be-c2f7-7b5d-683b7eca2007.png)


```conf:/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サービスの再起動／停止／開始コマンド
上記でもちょくちょく出てますが、よく使うコマンドなので...

```shell:GCP-SSH-terminal
# 再起動
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](https://docs.bitnami.com/google/apps/wordpress-pro/)

---

WordPressを新規で立ち上げた際に、サーバー側でいじる部分は上記ぐらいでしょうか...
また思いついたら追記していきます