0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

React webアプリをCloud Runで実行する

Posted at

ReactアプリをCloud Runで実行する必要があったので方法を調べました。

Cloud Runとは

コンテナイメージを上げておけばそのイメージをいい感じにスケールアップしながら使ってくれる便利な機能。
AWSでいえばECSのようなものですかね。

GCPのプロジェクト作成とCloud Runのサービス作成

  1. GCPプロジェクトを作成します
  2. Cloud Runを有効化します
  3. Cloud Runサービスを作成します
  4. コンテナイメージのURLを指定します(作成方法は後述)
  5. Cloud Runサービスの作成を完了します

コンテナイメージの保存場所

  1. Artifact Registryを作成します
  2. GCR.io Repositoryを作成します。
    こんなURLが割り当てられます gcr.io/YOUR_PROJECT_ID/gcr.io
  3. コンテナイメージをpushします(方法は後述)

コンテナイメージのpush

# ローカルでreactをビルドします
cd PROJECT_ROOT
npm run build

# 一度だけ gcpのレジストリのurlとかをdockerに認識させます
gcloud auth configure-docker

# gcp環境にpushするのに認証が必要です
gcloud auth login

# ビルドされたreactを含むコンテナイメージを作成しRegistoryにpushします
## Intel Macの場合
### ビルド
docker build -f docker_cloudrun/Dockerfile --tag gcr.io/YOUR_PROJECT_ID/gcr.io/reactcloudrun:latest .
### プッシュ
docker push gcr.io/YOUR_PROJECT_ID/gcr.io/reactcloudrun:latest

## M1 Macの場合ビルドとプッシュは同時に行う
docker buildx build --no-cache --push --platform=linux/amd64 -f docker_cloudrun/Dockerfile --tag gcr.io/YOUR_PROJECT_ID/gcr.io/reactcloudrun:latest .

これはGCPの実行環境のアーキテクチャがM1のものと違うからbuildxを使う必要があるという認識です。buildxで作成したマルチプラットフォームのイメージはローカルに作成できないので、直接pushする必要があると理解しました。

Dockerfile

nginxで任意のディレクトリを表示すればよいだけなのでシンプルです。

FROM nginx:1.23
# PORTを8080で待ち受けるようにしたconfをコピー
COPY docker_cloudrun/default.conf /etc/nginx/conf.d/default.conf
# ビルドされたreactのディレクトリをnginxの公開ディレクトリとしてコピー
COPY build /usr/share/nginx/html

検証用プロジェクト

今回検証に使ったプロジェクトはGithubで公開しています。
https://github.com/sekitaka/react-cloud-run-example

注意

ポート番号

Cloud Runの内部のコンテナが待ち受けるポートはデフォルトで8080なので、作成するイメージを8080に合わせる必要があります。ドキュメントではPORT環境変数から取得して動くようにしてねと書いてはありました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?