8
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?

MIERUNEAdvent Calendar 2023

Day 9

Mergin Maps CE (Community Edition) をEC2にデプロイする

Last updated at Posted at 2023-12-08

これは MIERUNE AdventCalendar 2023 9日目の記事です! 昨日は@darshuさんによる 地形で栓抜きを作れと言われたら でした。

Mergin Maps

Mergin Mapsは、 Lutra Consulting Limitedによって開発された地理空間データの収集および共有プラットフォームです。

地理空間データの収集を効率的に行えるシステム・アプリには、「Qfield」や「ArcGIS Field Maps」などがありますが、Mergin Mapsは以下のような特徴を持っています。

  1. QGISとの統合
    • Mergin MapsはQGISの機能をモバイルデバイス向けに拡張し、利用者が簡単に調査プロジェクトを作成し、最新の情報をすべてのチームメンバーと共有できます​。
    • QGISのMergin Mapsプラグインは、QGIS内でMergin Mapsプロジェクトを直接操作することを可能にします。PCへのプロジェクトのダウンロード、プロジェクトの変更、およびクラウドへの同期を行えます。
  2. データ収集
    • モバイルデバイスを使って地理空間データを簡単に記録でき、紙のフィールドノートからの手書き転写、写真の整理などの手間を省くことができます。モバイルデバイスでは専用のアプリを使用します。

Mergin Mapsは、Mergin Maps cloudを使用することで、データを複数端末間でシームレスに同期します。Mergin Maps cloudは、SaaSとして利用することもできますが、利用者が用意したサーバ(例えば、AWS EC2)にMergin Maps cloudを構築し、利用することもできます。

SaaSとしてのMergin Maps

Mergin MapsをSaaSとして利用する場合、以下のプランが選択できます。
金額や利用可能なサービス内容については、HPを確認してください。

  • Individual
  • Professional
  • Team

Private Hosting

SaaSとしてMergins Mapsを利用する場合、データ容量などに制限がつきますが、自分でサーバを用意することで、無制限にデータを保存することが可能になります。
Private Hostingには以下2つのプランがあり、利用できるサービスに違いがあります。詳しくはHPを確認してください。

  • Mergin Maps CE (Community Edition)(無料)
  • Mergin Maps EE (Enterprise Edition)(有料)

今回はAWSのEC2にMergin Maps CEを構築してみます。

EC2にMergin Maps CEをデプロイする手順

merginmaps-merginmaps.drawio (1).png

システム構成としては、上図のようになります。
以下の作業が完了していることを前提として、解説していきます。

  • ACMでSSL証明書を発行する。
  • EC2インスタンスを起動する。
  • ELBを生成し、
    • セキュリティグループをHTTPS:443およびHTTP:80ポートへの接続を許可する。
    • ターゲットグループに起動したEC2インスタンスを配置する。
    • ACMで発行したSSL証明書を設定する。
  • EC2インスタンスのセキュリティグループに、上記ELBから8080ポートへの接続を許可する(使用端末からのSSH接続も合わせて許可する)。
  • Route53パブリックホストゾーンを作成する。
  • Route53でELBのドメイン名を指すAレコード(エイリアス)を作成する。

上記の準備が完了したら、
まずは、SSHクライアントを使用して、EC2インスタンスに接続しておきます。

EC2に必要なソフトをインストールする

EC2内のパッケージをupdateしておきます。

$ sudo yum update -y

Dockerのインストール

まずはDockerをインストールします。

$ sudo yum -y install docker

Dockerがインストールできたら、Dockerを起動します。

$ sudo systemctl start docker

Dockerが起動していることを確認します。active(running)と表示されていれば、正常に起動しています。

$ systemctl status docker

Dockerの自動起動を有効化

Dockerの自動起動を有効にします。
これで、EC2を再起動しても自動でDockerが起動します。

$ sudo systemctl enable docker

ec2-userにdockerグループを追加

Dockerをインストールすると、OSにdockerグループが自動作成されます。
そのdockerグループにec2-userを追加します。
これでec2-userはsudoなしでdockerコマンドを実行できます。

$ sudo usermod -a -G docker ec2-user

いったんEC2からexitコマンドでログアウトし、再度EC2にec2-userでSSH接続します。
それ以降の接続では、ec2-userにdockerグループのアクセス権限が付与された状態になります。

Docker Compose(docker-compose)のインストール

はじめに/usr/local/lib/配下にディレクトリ/usr/local/lib/docker/cli-plugins/を作成します。このあとの手順でDocker Composeのバイナリファイルを格納します。

$ sudo mkdir -p /usr/local/lib/docker/cli-plugins

変数VERにDocker Composeのバージョンを代入します。バージョンの数字は最新安定版のものに変えてください(最新安定版のバーションはdocker docsの公式サイトで確認してください)。

$ VER=2.4.1

GitHubにあるDocker Composeのバイナリファイルを、上記で作成した/usr/local/lib/docker/cli-plugins/にダウンロードします。

$ sudo curl \
  -L https://github.com/docker/compose/releases/download/v${VER}/docker-compose-$(uname -s)-$(uname -m) \
  -o /usr/local/lib/docker/cli-plugins/docker-compose

ダウンロードしたdocker-compose(バイナリファイル)に実行権限を付与します。

$ sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose

次にシンボリックリンクを設定します。

$ sudo ln -s /usr/local/lib/docker/cli-plugins/docker-compose /usr/bin/docker-compose

docker-composeコマンドが使用できることを確認します。
Docker Compose version v2.4.1が表示されていればDocker Composeのインストールは成功です。

$ docker-compose --version
Docker Compose version v2.4.1

Gitのインストール

最後にGitをインストールします。

$ sudo install -y git

Mergin Mapsのデプロイ

GitでCloneする

Mergin MapsのレポジトリをCloneします。

$ git clone https://github.com/MerginMaps/mergin.git

Dockerコンテナを起動する

以下のコマンドを実行し、Dockerコンテナを起動させます。
5つのコンテナが起動することを確認します。

$ cd mergin
$ mkdir -p projects
$ sudo chown -R  901:999 ./projects/
$ sudo chmod g+s ./projects/
$ docker-compose -f docker-compose.yml up
[+] Running 5/5
 ⠿ Container merginmaps-proxy   Started                                                                    2.0s
 ⠿ Container merginmaps-db      Started                                                                    2.0s
 ⠿ Container merginmaps-redis   Started                                                                    2.0s
 ⠿ Container merginmaps-server  Started                                                                   10.8s
 ⠿ Container merginmaps-web     Started                                                                    0.8s
....

サーバーを初めて起動する場合は、データベースを初期化し、スーパーユーザーを作成する必要があります。管理者のユーザー名、パスワード、電子メールを設定します。

$ docker exec merginmaps-server flask init-db
$ docker exec merginmaps-server flask user create <username> <password> --is-admin --email <email>

アプリケーションの確認

Route53で作成したレコード名を使用して、ELBへHTTPS接続してみます。

接続に成功すると、以下の画面が表示されます。

image.png

登録した「管理者のユーザー名」と「パスワード」を入力し、サインインします。
サインインするとDashboad画面に遷移します。

image.png

QGISからプロジェクトを作成し、Mergin Mapsへ同期する

QGISを起動し、プラグイン「Mergin」をインストールします。
image.png

ブラウザパネルにMergin Mapsが表示されることを確認し、右クリックして表示されるConfigureをクリックします。

Custom Mergin Serverにチェックをいれることで、自分で立ち上げたMergin MapsのServerとQGISを連携することができます。

UsernamePasswordCustom Mergin Serverには、Webブラウザでアクセスする時に使用したものを入力します。

入力して「OK」し、ブラウザパネルのMergin Mapsを右クリックすると、選択できる項目がふえていることが確認できます。

それでは、新しくプロジェクトを作成してみます。Create new projectをクリックします。

New basic QGIS projectをクリックします。
image.png

Project NameとServerと同期させるローカルフォルダを選択し、「Finish」をクリックします。
image.png

デフォルトで用意されているプロジェクトが作成されました。
調査時のメモや写真が登録できるポイントレイヤSurveyとラスタータイルOpenMapTiles (OSM)がレイヤパネルに確認できます。
image.png

先月、福井に行ったので福井駅前のメモを登録してみます。
PCから写真を登録する時は、写真ファイルをプロジェクトフォルダの中にコピー・移動させてから登録してください(そうしないと、写真ファイルがEC2のServerに同期されないため)。

データが登録できたら、ブラウザパネルからMergin Maps> sampleを右クリックし、Synchronizeをクリックします。

「Sync」をクリックします。

ブラウザからEC2で立ち上げたMergin Mapsを確認します。
画面左のProjectsをクリックすると、先ほど作成したsampleプロジェクトが同期されていることが確認できます。
image.png

写真ファイルを保存しておいたDCIMフォルダを見てみると、写真も同期できたことが確認できます。

モバイルアプリMergin Mapsでプロジェクトを操作する

 モバイル端末(iOS、Androidのどちらでも良い)でMergin Mapsのアプリをダウンロードしておきます。

アプリを起動し、画面右上のアカウントボタンをタップし、ログイン画面に遷移します。
ログイン画面では「ユーザ名」と「パスワード」を入力し、画面下の鉛筆マークの右側にRoute53で作成したレコード名を入力します。
入力できたらサインインします。

サインに成功すると、プロジェクト一覧にQGISで作成・同期したプロジェクトが表示されていることが確認できます。

プロジェクト名をタップすると、モバイル端末からQGISで作成したプロジェクトを閲覧することができます。もちろん編集も可能です。

地物の属性情報も閲覧することができました。

終わりに

AWSのEC2にMergin Mapsのクラウド環境を構築できました。
QGISおよびモバイルアプリ「Mergin Maps」から上記クラウドのデータにアクセス・同期することも確認できました。

Mergin Maps CEはサーバさえ用意できれば、無料で利用できます。
とりあえず試してみたい人は使ってみると良いのではないでしょうか。

Mergin Mapsによる「地理空間データの収集および共有」が気に入った会社は、セキュリティアップデート等の追加機能がついた有料版Mergin Maps EEを契約し、Mergin Mapsのエコシステムを維持するための資金提供をしていただくのが望ましいと思います。

参考

明日は@soramiさんによる記事です!お楽しみに!!

8
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
8
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?