2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Swiftで始めるWeb開発(3) Swiftで書かれたWebページをデプロイする

Last updated at Posted at 2024-05-07

前回のSwiftで始めるWeb開発(2) 静的サイトジェネレータIgniteを用いてWebページを構築するに続き今回はSwiftからジェネレートされたWebページをデプロイしてみたいと思います。

Google Cloud Runにデプロイできる設定をしたサンプルプロジェクトを用意していますので、簡単に試してみたい方は見てみてください。
https://github.com/gdate/SwiftServerDemo

Google Cloud Runとは

Google Cloud RunとはDockerコンテナを使用して、任意の言語やフレームワークで記述されたWebアプリケーションやAPIをパッケージ化し、Googleのインフラストラクチャー上で実行するためのサービスです。
今回WebページのデプロイにGoogle Cloud Runを選択した理由は、上述の通りプログラミング言語の制限がないからです。例えば Google Cloud Functions を使用する場合、使用できるランタイムは Node.js、Python、Go、Java、Ruby、PHP、.Net Core です。つまり、Cloud Functions では Swift で実装することができません。

また、今回はサーバサイドのWebアプリケーション開発フレームワークであるVaporをつかってSwiftで書いたバックエンドコードをGoogle Cloud Runにデプロイします。

プロジェクトを作成

以下を参考にGoogle Cloudコンソールからプロジェクトを作成
https://cloud.google.com/resource-manager/docs/creating-managing-projects?hl=ja#console

コマンドラインツールをインストールする

macユーザーであれば以下リンクからコマンドラインツールを入手

インストールディレクトリに移動してインストールスクリプトを実行

$ ./install.sh

途中でPATHを通すか聞いてくるので通す

Modify profile to update your $PATH and enable shell command completion?

Do you want to continue (Y/n)?  y

コマンドラインツールを初期化

$ gcloud init

ログインを求められるので、出力されたURLをブラウザに貼り付けてログイン

You must log in to continue. Would you like to log in (Y/n)?  y

Your browser has been opened to visit:

    https://accounts.google.com/o/oauth2/auth?response_type=code&xxxxxxxx

プロジェクトを設定

$ gcloud config set project {PROJECT_ID}

確認

$ gcloud config list
[core]
account = xxx
disable_usage_reporting = True
project = xxx

Google Cloud Run にデプロイ

今回はソースから直接デプロイをします。この方法ではソースコードからコンテナイメージが自動的にビルドされて、デプロイされます。

// プロジェクトのルートディレクトリ
$ gcloud run deploy

ビルドに足りないAPIを有効にするか聞いてくるので、有効にする

Service name (xxx):
The following APIs are not enabled on project {PROJECT_ID}:
        artifactregistry.googleapis.com
        cloudbuild.googleapis.com
        run.googleapis.com

Do you want enable these APIs to continue (this will take a few minutes)? (y/N)?
  y

続いてCloud Runを稼働させるリージョンが聞かれるのでasia-northeast1などを選択

Please specify a region:
 [1] africa-south1
 [2] asia-east1
 [3] asia-east2
 [4] asia-northeast1
 [5] asia-northeast2
 [6] asia-northeast3
 ...
Please enter numeric choice or text value (must exactly match list item):  4

最後にサービスを公開するかを聞かれるのでYes

Allow unauthenticated invocations to [swiftserverdemo] (y/N)?  y

サービスのURLが発行するのでアクセスする

Done.
Service [xxx] revision [xxx] has been deployed and is serving 100 percent of traffic.
Service URL: https://xxx.a.run.app

Tips

.gitignoreに注意

google cloud runでソースコードをアップロードする際にIgniteから生成されたフォルダだけアップロードされないという不具合に遭遇しました。

---> Running in xxx
cp: cannot stat '/build/Build': No such file or directory
The command '/bin/sh -c cp -r /build/Build ./' returned a non-zero code: 1

gcloud run deployのドキュメントをよく読んでみたところ、
.gcloudignoreファイルが存在しない場合は.gitignoreから.gcloudignoreを生成し、そこにリストされているものはアップロードされない ということでした。

If a .gcloudignore file is absent and a .gitignore file is present in the local source directory, gcloud will use a generated Git-compatible .gcloudignore file that respects your .gitignored files.

そのため、.gcloudignoreを作ってアップロード対象の指定をしてあげる必要があるようでした。
.gcloudignoreを作成する際には、一旦全ファイルを無視して、必要なものだけ指定するというのが必要最低限のものをアップロードできてよさそうでした。
そこで以下のように設定しました。

* ←全ファイル無視
!Sources/**
!Sources/WebServer/**
Sources/WebSiteGenerator/** ←IgniteのSwiftコードはビルド時に必要ないので除外
!Assets/**
!Content/**
!Public/** ←Igniteによって生成されるWebページの表示に必要なものが入ったフォルダは含める
!CloudRun/**
!docker-compose.yml
!Dockerfile

参考

https://cloud.google.com/sdk/gcloud/reference/topic/gcloudignore
https://blog.pokutuna.com/entry/allowlist-gcloudignore

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?