はじめに
経済産業省の「衛星データ利用環境整備・ソリューション開発支援事業」において、弊社は衛星データ無料利用事業者として支援を受けています
本事業では日本発の衛星データプラットフォーム「Tellus」のデータの一部を無料利用できます
(一般利用者が無料利用できるデータもあります)
「Tellus」から取得できる様々なデータを使って何をどう実装できるのか、現在調査検証中です
今回から連載で「Tellus」の公式メディア「宙畑-sorabatake-」の記事を参考にしながら、 Elixir で衛星データを扱ってみます
連載記事
今回は Elixir 用の環境構築までを行います
Livebook
データ加工には Elixir の Livebook を使います
Livebook はブラウザ上で対話的にコーディング、結果の可視化を行うためのツールです
有体に言えば Python でいうところの Jupyter です
セル(上画像の黒い横長のブロック)にコードを書いて実行すると、その下に実行結果が表示されます
当然、グラフや画像、表、そして地図も表示できます
しかも表示した表や地図を操作することもできます
更に処理の過程を参照したり、変更したりしてデバッグすることもできます
表現力では 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 にアクセスできます
右上 New notebook をクリックし、新しいノートブックを開けば準備完了です
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 コンテナを使うことで、簡単に環境構築できました
次回はデータ取得編です