LoginSignup
15
10

More than 1 year has passed since last update.

衛星データプラットフォーム Tellus と Elixir Livebook を使って、植物の分布から田畑の利用状況を推測する(環境構築編)

Last updated at Posted at 2023-01-04

はじめに

経済産業省の「衛星データ利用環境整備・ソリューション開発支援事業」において、弊社は衛星データ無料利用事業者として支援を受けています

本事業では日本発の衛星データプラットフォーム「Tellus」のデータの一部を無料利用できます

(一般利用者が無料利用できるデータもあります)

「Tellus」から取得できる様々なデータを使って何をどう実装できるのか、現在調査検証中です

今回から連載で「Tellus」の公式メディア「宙畑-sorabatake-」の記事を参考にしながら、 Elixir で衛星データを扱ってみます

連載記事

今回は Elixir 用の環境構築までを行います

Livebook

データ加工には Elixir の Livebook を使います

Livebook はブラウザ上で対話的にコーディング、結果の可視化を行うためのツールです

有体に言えば Python でいうところの Jupyter です

スクリーンショット 2023-01-04 14.58.28.png

セル(上画像の黒い横長のブロック)にコードを書いて実行すると、その下に実行結果が表示されます

当然、グラフや画像、表、そして地図も表示できます

しかも表示した表や地図を操作することもできます

visualization.png

スクリーンショット 2022-12-28 11.27.59.png

search.gif

oita.gif

更に処理の過程を参照したり、変更したりしてデバッグすることもできます

drag.gif

evision.gif

表現力では Jupyter を十分超えているのではないでしょうか

実行環境

本事業で衛星データを扱うにあたり、「さくらのクラウドサービス」の仮想サーバーを提供されています

サーバースペック

  • CPU 4コア
  • メモリ 16GB
  • SSD 1TB
  • OS: Ubuntu 20.04.1

まずはこのサーバー上に環境を構築ます

SSH接続

「さくらのクラウドサービス」から提供された接続情報を使って、 SSH で仮想サーバーに接続します

パスワードを聞かれるので入力すると接続できます

$ ssh <ユーザー名>@<ホスト名>
<ユーザー名>@<ホスト名>'s password:

Docker のインストール

楽をしたいので Docker コンテナを使います

実行環境に Docker コンテナがオススメな理由

  • サーバーの環境を極力汚さない
  • サーバーを別のマシンにしても同じ環境で動かせる
  • Dockerfile さえ変更すれば簡単にカスタマイズできる

Docker 公式ドキュメントに従って Docker をインストールします

Docker に必要なパッケージをインストールします

sudo apt-get update
sudo apt-get install \
  ca-certificates \
  curl \
  gnupg \
  lsb-release

Docker 用のリポジトリを追加します

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

Docker-CE などをインストールします

sudo apt-get install \
  docker-ce \
  docker-ce-cli \
  containerd.io \
  docker-compose-plugin

動作確認します

sudo docker run hello-world

Hello from Docker! というような文言が表示されれば無事インストールされています

ファイアウォールの設定

Livebook を使ってブラウザ経由でコードを実行するため、 ファイアウォールでポートを解放しておく必要があります

以下のコマンドを実行すると、現在のファイアウォールの設定が確認できます

sudo ufw status

基本的には SSH 用の 22番ポートが空いていると思います

自分のローカルマシンのグローバルIPから特定のポート番号にアクセスできるよう、設定を追加します

sudo ufw allow proto tcp to <ローカルマシンのグローバルIP>/32 port <使用するポート番号>

コンテナの起動

私の場合は自分で作っている Elixir 学習用コンテナがあるので、 git からクローンしてきて起動するだけで環境構築完了です

パブリックリポジトリーなので誰でも使えます

git clone https://github.com/RyoWakabayashi/elixir-learning.git
cd elixir-learning
$ sudo docker-compose up
...
Attaching to livebook
livebook    | [Livebook] Application running at http://0.0.0.0:<ポート番号>/?token=<認証トークン>

0.0.0.0 の部分を SSH 接続しているホスト名に置き換えてブラウザで開けば Livebook にアクセスできます

スクリーンショット 2022-09-30 17.40.59.png

右上 New notebook をクリックし、新しいノートブックを開けば準備完了です

スクリーンショット 2022-09-30 17.43.02.png

Livebook を停止したい場合は sudo docker-compose up を実行したターミナルで Ctrl + C を押して中断するか、別のターミナルで以下のコマンドを実行してください

cd elixir-learning && sudo docker-compose down

また、起動したターミナルを閉じてしまって Livebook の認証トークンがわからなくなった場合は以下のコマンドでコンテナのログを取得してください

sudo docker logs livebook

コンテナの解説

少しだけ使っているコンテナの解説をしておきます

Dockerfile

コンテナ定義本体です

まず先頭行で、 Livebook の 0.8.0  用公式コンテナを指定しています

FROM livebook/livebook:0.8.0

Livebook 以外に Phoenix プロジェクトもコンテナ内で作りたいときのために mix phx.new の準備をしています

RUN mix local.hex --force \
  && mix archive.install hex phx_new --force \
  && mix local.rebar --force

この後の作業や Evision (OpenCV) に必要なパッケージをインストールしています

RUN apt-get upgrade -y \
  && apt-get update \
  && apt-get install --no-install-recommends -y \
    gnupg2 \
    apt-transport-https \
    ca-certificates \
    lsb-release \
    curl \
    libopencv-dev \
    build-essential \
    erlang-dev \
    sudo \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*

Docker コンテナ内から Docker を操作する(DooD)ために Docker の CLI だけをインストールしています

RUN mkdir -p /etc/apt/keyrings \
  && curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg \
  && echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null \
  && sudo apt-get update \
  && sudo apt-get install -y docker.io \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*

WSL (Windows Subsystem for Linux) でも動かせるように WSL Utilities をインストールし、設定用のシェルを追加しています

RUN wget -O - https://pkg.wslutiliti.es/public.key | sudo tee -a /etc/apt/trusted.gpg.d/wslu.asc

RUN echo "deb https://pkg.wslutiliti.es/debian bullseye main" | sudo tee -a /etc/apt/sources.list

RUN apt-get update \
  && apt-get install --no-install-recommends -y \
  wslu \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*

COPY ./setup_for_wsl.sh /home/livebook/

RUN chmod +x /home/livebook/setup_for_wsl.sh

./livebook 配下のファイルをコンテナ内にコピーしています

これで作っておいたノートブックをコンテナ内で使うことができます

COPY ./livebooks /home/livebook

docker-compose.yml

コンテナ起動時のオプションを保持しています

ports で、コンテナ内のポート番号をホストのポート番号に割り当てています

8080 以外のポート番号を使いたい場合はここを変更する必要があります

volumes ではホストのディレクトリーをコンテナ内からマウントする設定をしています

例えば ./tmp:/tmp でホストの ./tmp (docker-compose.yml からの相対パス)をコンテナ内の /tmp にマウントしています

こうすることでコンテナとホストの間で簡単にファイル授受ができます

//var/run/docker.sock:/var/run/docker.sock はコンテナ内から Docker を操作する(DooD)のための設定です

まとめ

Docker コンテナを使うことで、簡単に環境構築できました

次回はデータ取得編です

15
10
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
15
10