GCP/DDNS/Let's Encrypt/できるだけ費用をかけずにインターネット上にblogサイトを立ち上げる

#blogサイトをできるだけローコストで立ち上げたい…目指せ！月額トータル100円運用！
* GCPの無料枠を利用
* ダイナミックDNSを使うことで、固定グローバルIPの課金を回避
* Let's Encryptを使うことで、無料でHTTPS化
    * オンプレインフラエンジニアが時代の流れを感じながら試行錯誤w

##GCPの無料枠で頑張る！
　クラウドの勉強にGCPを触っていたとき、AWSやAzureと違い、無料お試し期間が終わっても使える[永久無料枠:Google Cloud の無料プログラム](https://cloud.google.com/free/docs/gcp-free-tier)があるのを知りました。要件はちょこちょこ変更されるらしく注意は必要だけど、3か月とか半年とかで課金が始まり、お金を払うか作ったものを捨てるかを選ばざるを得ないAWSやAzureと違い魅力的。
　ちょうどこの無料枠を使ってWordpressの立ち上げを行う[@ulwlu様の記事:1時間で出来るWordPress環境構築(※永久無料・・・だった)【※2020/7/1より約300円/月が有料になります】](https://qiita.com/ulwlu/items/dbb0db5cf7099b7a7cc4#25cdn%E9%80%A3%E6%90%BA--dns%E8%A8%AD%E5%AE%9A)を拝見した。今どきのできるエンジニアは客先で打ち合わせしながらプロトタイプまで作ってしまうなんて、すごい。クラウドならでは。
###静的グローバルIP月額300円を回避するためダイナミックDNSを使う！
　固定グローバルアドレスをひょいっとGETできるというのもクラウドならでは。ただこれで**月額300円**かかってしまうのは惜しい。せっかく計算機資源を0円で利用できるのに。なるたけ費用をかけたくないのでダイナミックDNSを検討。[Google Domains の DDNS を Raspberry Pi で利用する](https://qiita.com/gorohash/items/8287738ffe47ab52a36f)を参考にダイナミックDNSを設定。[ddclientでGoogle DomainsのDDNSを更新する方法](https://www.uchidigi.com/2020/01/ddclient-google-ddns.html)こちらも大変詳しかったです。
　ドメインもついでに[Google Domains](https://domains.google/intl/ja_jp/)取り直しました。今までは**「0円」**とか**「無料」**に引かれて、ドメイン取得料が安いレジストラを使っていましたが、取得時はタダ同然でも、更新料がレンタルサーバをセット契約しないと数千円くらいして高い。Google Domainsがめちゃくちゃ安いわけではありませんが、取得できるドメインが多く、ダイナミックDNSに対応したDNSも使えるので、こちらにしました。wwwのAレコードを追加しましょう。しかしGoogle様、何でもやってますね。
※結局ここで課金しているのでGCPの思うつぼかもしれません。
※すでに他のレジストラで取っているドメインがある場合でも、DDNSさえ使えれば問題ないと思います。

###HTTPS、時代の流れか。こちらも無料のサーバ証明書Let's Encryptを使う！
　以前はSSL化するのに、ベリサインやグローバルサインで証明書を購入していました。「自分でCA立てて証明書発行して」という作業もしたことがあります。しかし今は[Let's Encrypt](https://letsencrypt.org/ja/)というサービスがあるのですね。素晴らしいと思います。企業ポリシー等で難しい場合もあるでしょうが、こういう個人サイトの作成にはもってこいなのではないでしょうか。証明書作成リクエストを投げるときは、**www**.domain.xxxとしておいた方がはまらないかも。

###bitnamiのHTTPS化、はまったのでシェア
 私はbitnami-wordpresspro-5-8-2-22-r09-linux-debian-10-x86-64-namiというバージョンのVMを利用しました。[WordPressにSSL証明書を導入して自動更新させる（by BitNami）](https://blogs.asterisk-interceptor.net/security/wordpress-ssl-renew-by-bitnami/)という詳しい記事を見つけたのでこちらを参考に作業しました。BitNamiのバージョン(?)によっては、bncert-toolという便利なHTTPS化ツールがあるようですが、わたしのVMイメージはありませんでした。そもそもこのBitNami、以前はLAMP環境を作るときに、

 * Linux入れて、
 * Apache入れて、
 * MySQL入れて、
 * PHP入れて、
 * Java入れて、
 * TOMCAT入れて、
とやっていたのに、さくっとやりたいときは今はもうそんなことはやらないんですね。全部まとめたVMイメージもそうですし、コンテナ等を使うんですね。

###はまったところ。作ったサーバ証明書をnginxが使ってくれない。ブラウザでHTTPSアクセスするとオレオレ証明書(example.com)となり、エラーで接続できませんでした。
どうも、多くの手順書にある以下フォルダではなく、

```
/opt/bitnami/nginx/conf/server.key
/opt/bitnami/nginx/conf/server.crt
```


nginxは以下のフォルダを読みに行っているようでした。

```
/opt/bitnami/nginx/conf/bitnami/cert/server.key
/opt/bitnami/nginx/conf/bitnami/cert/server.crt
```

なので、Let's Encryptで作成したサーバ証明書と秘密鍵を、上記フォルダ内に、server.crtとserver.keyとして保存しました。nginxの設定ファイルを変えてもよいと思いますが、これで一応ブラウザでHTTPSアクセスすると作成したLet's Encryptの証明書でSSL化され閲覧できました。


おそらく影響しているのは、
`/opt/bitnami/nginx/conf/server_blocks/default-https-server-block.conf`

```
# HTTPS Server
server {
    # Port to listen on, can also be set in IP:PORT format
    listen  443 ssl;
    ssl_certificate      bitnami/certs/server.crt;
    ssl_certificate_key  bitnami/certs/server.key;
    include  "/opt/bitnami/nginx/conf/bitnami/*.conf";
    location /status {
        stub_status on;
        access_log   off;
        allow 127.0.0.1;
        deny all;
    }
}
```

サーバやミドルウェアの設定にはソースやhelpを読んだり、[一時情報](https://docs.bitnami.com/aws/how-to/generate-install-lets-encrypt-ssl/)や[ユーザコミュニティ](https://community.bitnami.com/t/redirect-http-to-https-on-nginx/95427/6)をあたるべきなのでしょうが、私の力不足で、いつもヘトヘトになります。
バージョンが上がると急にコマンドが変わったり、設定ファイルの場所が変更になったりするのを、イケてるエンジニアさんはどうやって推量しているのか、教えていただきたいです。

Qiitaをはじめとしたサイトに大変助けてもらっております。

##おまけ
よし、ではさっそくサイトを作っていこうと思ってwp-adminを開いたところ、「あああぁぁぁっ、WordPlessのログイン情報を書きとめておくの忘れた…orz」となりました。
その場合、GCPのWebコンソールからVMイメージデプロイ時の情報を確認することができます。

 1. 左上の「≡」メニューをクリックして、「Marketplace」を選択
 2. wordpress with nginx and ssl certified by bitnamiを検索、表示されたらクリック
 3. 過去のデプロイメントをクリック
 4. 該当のDeployment nameをクリックすれば、Admin user/Admin passwordが表示されます。

##感想
* クラウド(IaaS)の、早い、安いは恐るべし
* 一からなんでも準備する時代ではないのだなと思う反面、仕組みがわかってないとトラブルシュートできないんじゃないかと。手順書通りにいかなかったら、とっかえてしまうしかできなくなってしまう。私の師匠はエンジニアであれ、チェンジニアになることなかれとおっしゃっていました。
* クラウドのコンソール画面の変化の速さよ…これじゃ手順者なんて作れない
* オンプレの知識はやはり大事。それがクラウドにも生きるし、いいとこどりできれば尚良し。
* インターネット上にはフレンドリーで利他的な方がたくさんいて、惜しげもなく知識を公開している。素晴らしいことだ。

##追記
独自ドメイン設定を間違えたときにCLIから修正する方法
```
wp option update home 'http://独自ドメイン'
wp option update siteurl 'http://独自ドメイン'
```
Let's Encryotの自動更新のためのcronが動かないとき、パスを明示してやると良い
```
XX XX XX * * /usr/bin/certbot renew && systemctl restart XXX
```