Google Kubernetes EngineとArtifact RegistryでQGIS Serverを構築してみた

<br>

![](https://day-journal.com/memo/images/try-064_00.png)

<br>

### Google Kubernetes EngineとArtifact RegistryでQGIS Serverを構築してみました :tada:  

KubernetesをベースとしたGCPのマネージドサービスである、[Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)とGoogle Container Registryの進化版の[Artifact Registry](https://cloud.google.com/artifact-registry)を利用し、QGIS Serverを構築してみました!

<br>

## Artifact Registryの設定
はじめに、Artifact RegistryでDockerイメージを登録します。

<br>

GCPコンソールでArtifact Registryに移動し「リポジトリを作成」をクリックします。
![画像](https://day-journal.com/memo/images/try-064_01.png)

リポジトリ名・形式・リージョン・暗号化を設定します。リポジトリ名は任意で形式はDockerとします。プレビュー版ですがnpmも登録できるようです。
![画像](https://day-journal.com/memo/images/try-064_02.png)

リポジトリが作成されたのを確認します。
![画像](https://day-journal.com/memo/images/try-064_03.png)

次に、GCPコンソールで別途Cloud Shellを起動します。
![画像](https://day-journal.com/memo/images/try-064_04.png)

認証設定をします。

```sh
gcloud auth configure-docker asia-northeast1-docker.pkg.dev
```

![画像](https://day-journal.com/memo/images/try-064_05.png)

登録したいDockerイメージをpullします。今回はQGIS ServerのDockerイメージ「[camptocamp/qgis-server](https://hub.docker.com/r/camptocamp/qgis-server)」を利用します。

```sh
docker pull camptocamp/qgis-server
```

![画像](https://day-journal.com/memo/images/try-064_06.png)

イメージにレジストリ名をタグ付けします。

```sh
docker tag camptocamp/qgis-server \
asia-northeast1-docker.pkg.dev/プロジェクトID/sample-docker/qgis-server-image
```

イメージをArtifact Registryにpushします。

```sh
docker push asia-northeast1-docker.pkg.dev/プロジェクトID/sample-docker/qgis-server-image
```

![画像](https://day-journal.com/memo/images/try-064_07.png)

リポジトリの中にDockerイメージが登録されているのを確認できます。
![画像](https://day-journal.com/memo/images/try-064_08.png)

これでArtifact Registryの設定は完了になります :thumbsup: 

<br>

## Google Kubernetes Engine (GKE)の設定
最後に、Artifact Registryに登録したDockerイメージをGKEにデプロイします。 

<br>

「GKEにデプロイする」をクリックします。
![画像](https://day-journal.com/memo/images/try-064_09.png)

既存のコンテナイメージをそのまま選択し「続行」をクリックします。
![画像](https://day-journal.com/memo/images/try-064_10.png)

アプリケーション名とゾーンを任意で設定し「デプロイ」をクリックします。
![画像](https://day-journal.com/memo/images/try-064_11.png)

デプロイされるまで5分くらい待ちます。
![画像](https://day-journal.com/memo/images/try-064_12.png)

正常にデプロイされているのが確認できたら、「公開する」をクリックします。
![画像](https://day-journal.com/memo/images/try-064_13.png)

公開設定をします。今回はこのままの設定で「公開」をクリックします。
![画像](https://day-journal.com/memo/images/try-064_14.png)

公開されると、Serviceの詳細に外部エンドポイントが表示されるのでブラウザでアクセスしてみます。
![画像](https://day-journal.com/memo/images/try-064_15.png)

公開されたURLで、QGIS Serverが起動されているのを確認できました。
![画像](https://day-journal.com/memo/images/try-064_16.png)

<br>

#### Google Kubernetes EngineとArtifact RegistryでQGIS Serverを構築できました :thumbsup: 

本番環境用に詳細設定をする場合は、kubectl CLIを利用したり自動化したりの設定をしていくことになりますが、今回は例が少ないArtifact Registryを利用しGCPコンソールでデプロイまでをトライしてみました!

QGIS Serverについても、デフォルトだとプロジェクトファイルが設定されていないので、設定するように独自のDockerイメージを構築する必要があります。

また、今回の用途だとGoogle Cloud Runのほうがシンプルにデプロイできると思うので、こちらも今後トライしてみたいと思います :muscle: 

<br>

やってみたシリーズ :grinning:
<a href="https://day-journal.com/memo/tags/Try" target="_blank">tags - Try</a>
<a href="https://day-journal.com/memo/try-055" target="_blank">Serverless FrameworkでNode.jsのサーバーレスAPIをGCPにデプロイしてみた</a>
<a href="https://day-journal.com/memo/try-023" target="_blank">QGISとCloud SQLのPostgreSQL&PostGISを利用してジオデータを表示してみた</a>
<a href="https://day-journal.com/memo/try-018/" target="_blank">BigQuery GISとFlaskとMapbox GL JSを組み合わせて可視化してみた</a>

<br>
<br>

<a href="https://dayjournal.booth.pm" target="_blank"><img src="https://day-journal.com/memo/images/etc/book.png" alt="book"></a>