これは MIERUNE AdventCalendar 2023 9日目の記事です! 昨日は@darshuさんによる 地形で栓抜きを作れと言われたら でした。
Mergin Maps
Mergin Mapsは、 Lutra Consulting Limitedによって開発された地理空間データの収集および共有プラットフォームです。
地理空間データの収集を効率的に行えるシステム・アプリには、「Qfield」や「ArcGIS Field Maps」などがありますが、Mergin Mapsは以下のような特徴を持っています。
- QGISとの統合
- Mergin MapsはQGISの機能をモバイルデバイス向けに拡張し、利用者が簡単に調査プロジェクトを作成し、最新の情報をすべてのチームメンバーと共有できます。
- QGISのMergin Mapsプラグインは、QGIS内でMergin Mapsプロジェクトを直接操作することを可能にします。PCへのプロジェクトのダウンロード、プロジェクトの変更、およびクラウドへの同期を行えます。
- データ収集
- モバイルデバイスを使って地理空間データを簡単に記録でき、紙のフィールドノートからの手書き転写、写真の整理などの手間を省くことができます。モバイルデバイスでは専用のアプリを使用します。
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をデプロイする手順
システム構成としては、上図のようになります。
以下の作業が完了していることを前提として、解説していきます。
- 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接続してみます。
接続に成功すると、以下の画面が表示されます。
登録した「管理者のユーザー名」と「パスワード」を入力し、サインインします。
サインインするとDashboad画面に遷移します。
QGISからプロジェクトを作成し、Mergin Mapsへ同期する
QGISを起動し、プラグイン「Mergin」をインストールします。
ブラウザパネルにMergin Maps
が表示されることを確認し、右クリックして表示されるConfigure
をクリックします。
Custom Mergin Server
にチェックをいれることで、自分で立ち上げたMergin MapsのServerとQGISを連携することができます。
Username
とPassword
、Custom Mergin Server
には、Webブラウザでアクセスする時に使用したものを入力します。
入力して「OK」し、ブラウザパネルのMergin Maps
を右クリックすると、選択できる項目がふえていることが確認できます。
それでは、新しくプロジェクトを作成してみます。Create new project
をクリックします。
New basic QGIS project
をクリックします。
Project Name
とServerと同期させるローカルフォルダを選択し、「Finish」をクリックします。
デフォルトで用意されているプロジェクトが作成されました。
調査時のメモや写真が登録できるポイントレイヤSurvey
とラスタータイルOpenMapTiles (OSM)
がレイヤパネルに確認できます。
先月、福井に行ったので福井駅前のメモを登録してみます。
PCから写真を登録する時は、写真ファイルをプロジェクトフォルダの中にコピー・移動させてから登録してください(そうしないと、写真ファイルがEC2のServerに同期されないため)。
データが登録できたら、ブラウザパネルからMergin Maps
> sample
を右クリックし、Synchronize
をクリックします。
ブラウザからEC2で立ち上げたMergin Mapsを確認します。
画面左のProjectsをクリックすると、先ほど作成したsampleプロジェクトが同期されていることが確認できます。
写真ファイルを保存しておいた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のエコシステムを維持するための資金提供をしていただくのが望ましいと思います。
参考
- 【AWS】EC2にDockerとDocker Composeをインストール
- httpで公開したWebサーバーをhttps通信できるようにする
- パブリックALB(HTTPS) → プライベートEC2構築
- Mergin Maps Community Edition
明日は@soramiさんによる記事です!お楽しみに!!