GCPでAWSの静的Webサイトホスティングを再現してみる(その2)

前回GCPのCloudStorage使ってAWSのCloudFront+S3使った静的サイトのパターンを再現しようとしたけど、httpなので意図通りに動かなかった件について、FireBaseHostingを使ってリトライしてみました。AWSでは結構GUIバリバリで作れる構成ですが、GCPでやろうとするとコマンドライン必須になるので結構ツヨツヨな人じゃないと厳しいかもしれないです。少なくともヨワヨワな自分にはハードル高かったです。
設定作業自体は先人様がいろいろとしてくださっているのでそれをなぞっただけですが、一応記録にしておきます。

◆手順

1.FireBaseプロジェクト作成

1)FireBaseコンソールへ移動







2)プロジェクトを作成
・プロジェクトを追加をクリック






・プロジェクト名を入力し[続行]をクリック











・いったんGoogleアナリティクスは無効、[プロジェクトを作成]をクリック














・プロジェクト作成が完了したら[続行]をクリック













・FireBaseのコンソール画面に遷移する











2.コンソール作業

1)node,npmインストール(nパッケージで導入

$ sudo apt install -y nodejs npm
$ sudo npm install n -g
$ sudo n stable
$ sudo apt purge -y nodejs npm
$ exec $SHELL -l
$ node -v
v12.16.0
$ npm -v
6.13.4

2)FireBaseToolインストール

#FireBaseToolインストール
$ sudo npm install -g firebase-tools
#FireBaseTool ログイン
#FireBaseTool ログイン
$ firebase login --no-localhost
i  Firebase optionally collects CLI usage and error reporting information to help improve our products. Data is collected in accordance with Google's privacy policy (https://policies.google.com/privacy) and is not used to identify you.
? Allow Firebase to collect CLI usage and error reporting information? (Y/n)

Visit this URL on any device to log in:
https://accounts.google.com/o/oauth2/auth?

? Paste authorization code here:
?  Success! Logged in as hogehoge@gmail.com

・認証
[Visit this URL on any device to log in]で表示されたURLにブラウザでアクセス
アカウント接続画面が表示されるのでアカウントを選択





[許可]をクリック


コードをコピーして[Paste authorization code here:]の後ろに貼付


















3)プロジェクト作成

$ mkdir -p project/public
$ cd project/
$ firebase projects:list
? Preparing the list of your Firebase projects
lqqqqqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqqqqqqqqqqwqqqqqqqqqqqqqqqqqqqqqqk
x Project Display Name x Project ID          x Resource Location ID x
tqqqqqqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqqqqqqqqqqnqqqqqqqqqqqqqqqqqqqqqqu

X project(s) total.

$ firebase init --project=FireBase-project

     ######## #### ########  ######## ########     ###     ######  ########
     ##        ##  ##     ## ##       ##     ##  ##   ##  ##       ##
     ######    ##  ########  ######   ########  #########  ######  ######
     ##        ##  ##    ##  ##       ##     ## ##     ##       ## ##
     ##       #### ##     ## ######## ########  ##     ##  ######  ########

You're about to initialize a Firebase project in this directory:

  /home/users/project

? Which Firebase CLI features do you want to set up for this folder? Press Space
 to select features, then Enter to confirm your choices.
 ◯ Database: Deploy Firebase Realtime Database Rules
 ◯ Firestore: Deploy rules and create indexes for Firestore
 ◯ Functions: Configure and deploy Cloud Functions
?? Hosting: Configure and deploy Firebase Hosting sites        #SPACE押して選択してEnter
 ◯ Storage: Deploy Cloud Storage security rules
 ◯ Emulators: Set up local emulators for Firebase features
 

You're about to initialize a Firebase project in this directory:

  /home/users/project

? Which Firebase CLI features do you want to set up for this folder? Press Space
 to select features, then Enter to confirm your choices. Hosting: Configure and
deploy Firebase Hosting sites

=== Project Setup

First, let's associate this project directory with a Firebase project.
You can create multiple project aliases by running firebase use --add,
but for now we'll just set up a default project.

i  Using project FireBase-project (project)

=== Hosting Setup

Your public directory is the folder (relative to your project directory) that
will contain Hosting assets to be uploaded with firebase deploy. If you
have a build process for your assets, use your build's output directory.

? What do you want to use as your public directory? public
? Configure as a single-page app (rewrite all urls to /index.html)? Yes
?  Wrote public/index.html

i  Writing configuration info to firebase.json...
i  Writing project information to .firebaserc...
i  Writing gitignore file to .gitignore...

?  Firebase initialization complete!

4)デプロイ

#firebase.json編集
$ cd project
$ vi firebase.json
※以下の通り編集
----------------
{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "/",
        "destination": "/index.html"
      }
    ]
  }
}
-------------

#サイト公開
$ firebase deploy

=== Deploying to 'FireBase-project'...

i  deploying hosting
i  hosting[FireBase-project]: beginning deploy...
i  hosting[FireBase-project]: found 3 files in public
?  hosting[FireBase-project]: file upload complete
i  hosting[FireBase-project]: finalizing version...
?  hosting[FireBase-project]: version finalized
i  hosting[FireBase-project]: releasing new version...
?  hosting[FireBase-project]: release complete

?  Deploy complete!

Project Console: https://console.firebase.google.com/project/FireBase-project/overview
Hosting URL: https://FireBase-project.firebaseapp.com

上記のURLでindex.htmlの内容が表示されているか確認する。
404.htmlのファイルはあらかじめ作成してアップロードしておく

3.カスタムドメイン設定

1)FireBaseの設定(ドメイン認証用TXTレコード取得)
・FireBaseHostingの設定を選択
















・[カスタムドメインを追加]をクリック

・設定するドメインを入力して[次へ]をクリック










・[セットアップモード]を[詳細設定]に変更する。
 DNSに設定するパラメータが表示されるので内容を
 コピーしておく。コピーしたら[次へ]をクリックする。















・時間がかかるのでいったん[ダイアログを閉じる]














2)GCPのCloudDNS側作業(TXTレコード登録)
・GCPコンソールでCloudDNS設定を開く















・登録されているサブドメインをクリックする。









・[レコードセットを追加]をクリックする。









・[DNS名]のサブドメインの前にFireBaseで出てきた[ホスト]を入力する。
 レコードのタイプは[TXT]を選択して[TXT]データにFireBaseで出てきた[値]を
 入力する。最後に[作成]をクリック
 










3)ドメイン認証完了後作業(Aレコード登録)
・FireBaseのコンソールでFireBaseHostingのダッシュボードを開く
[設定が必要です]と表示されているので[表示]をクリックする。
・値の箇所の内容をコピーする













・GCPのCloudDNSのコンソールを開いて、サブドメイン選択後に[レコードセットの追加]
 をクリックする。リソースレコードのタイプで[A]を選択してFireBaseの[値]の箇所に
 表示されているIPアドレス2つを貼り付けて[作成]をクリックする。








・しばらく待つてからFireBaseHostingのダッシュボード画面にログインすると
 [接続されています]と表示されるので、設定したドメインをブラウザに打ち込んで
 動作を確認する。








まぁ、やりたかったことはできたんですが、AWSほどお手軽ではなかったですね。
CLIの構築が必要だし、ツヨツヨなエンジニアさん向けという感じでしたね。
Gitとかと相性よさそうだし、コマンドラインでいろいろとできるし、
FireStoreとかCloudFunctionsとかとも連携できるからスピード重視の開発とかの
場合はAWSより自由度高いかなぁと思いました。
よく考えるとGCPでやる場合はあえてこういうことせずに素直にGAEを使った方が
いいんだよなぁというのはここでは思わなかったことにしよう。
それとwwwありでもwwwなしにリダイレクトさせるという設定がうまくできていないのでこれをやっておくようにしておかないと実運用で使えないなぁ、最初の設定でミスりました。気が向いたら直します。

そしてそのうちAzureで同じようなストレージホスティング構成がとれるのか検証
してみようかなぁと思っていたりします。(いつになることやら。

◆参考サイト

https://firebase.google.com/docs/cli?hl=ja
https://qiita.com/seibe/items/36cef7df85fe2cefa3ea
https://qiita.com/yacchi1123/items/963bdf12c9c4a7a8f67c
https://firebase.google.com/docs/hosting/custom-domain?hl=ja
https://firebase.google.com/docs/hosting/url-redirects-rewrites?hl=ja
https://qiita.com/qrusadorz/items/617ef8e21aee75e7cd20
https://stackoverflow.com/questions/45672351/firebase-hosting-create-a-404-page
https://blog.haramishio.xyz/entry/migrate-firebase-hosting

コメント

このブログの人気の投稿

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

証券外務員1種勉強(計算式暗記用メモ)

マクロ経済学(IS-LM分析)