Azureに分析サーバを構築する
引き続きAzureネタを引っ張ります。
今回は普通の仮想マシンにDocker + docker-composeをインストールして複数コンテナを稼働させてみます。
PostgreSQLに分析データを格納し、それをJupyter Notebookで分析、作ったスクリプトをGitLabでソースコード管理しつつ、分析プロジェクトのノウハウなんかをメルカリ社内ドキュメントツールとかやしるCrowiで保管する、みたいな感じです。
ちなみにこれ全部コンテナで立ててしまうと docker-compose down
した時にDBが吹っ飛ぶという致命的な欠点を備えてしまっていますが今回はとりあえずレベルで構築できるものを考えます。その辺の「データ永続化」的な話は別途しようと思います。ひとまず備忘録。
ホストOSセットアップ
省略します。
今回はCentOS 7.5を使いました。
ポート開放
AzureでLinuxを立ち上げる場合はクラウド管理のセキュリティを別途弄る必要があります。というかむしろデフォルトでfirewalld入ってないのでこれをせざるを得ません。
あらかじめ以下のポートを開放しておきます。
- 22/tcp
- 8080/tcp
- 8081/tcp
- 8888/tcp
このうち「22/tcp」はsshのウェルノウンポートですので開けた途端大量のセキュリティ攻撃を受けますが、セットアップに必要のため一時的に開放することにします。sshdのセットアップさえ終われば別ポートに変えればいいのですが、そのやり方も後日記載しようと思います。調べたら幾らでも出てきます。
Dockerセットアップ
前回の「Wep App on Linux」と違い今回は「Virtual Machines」なのでDockerのインストールが必要です。
[root@hoge ~]# yum install -y docker
[root@hoge ~]# systemctl enable docker
[root@hoge ~]# systemctl start docker
docker-composeセットアップ
複数コンテナ環境は本来Kubernetesとかオーケストレーションツールを使うべきなのでしょうがこれも横着します。
パッケージをダウンロードします。
[root@hoge ~]# curl -L https://github.com/docker/compose/releases/download/1.22.0-rc1/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose
実行権限付与&グループ追加(いらないかも)
[root@hoge ~]# chmod +x /usr/local/bin/docker-compose
[root@hoge ~]# groupadd docker
[root@hoge ~]# gpasswd -a $USER docker
[root@hoge ~]# systemctl restart docker
コンテナセットアップ
Jupyter、GitLab、PostgreSQL、Crowiのコンテナをまとめて引っ張ります。
# ディレクトリ作成&移動
[root@hoge ~]# mkdir hogedir
[root@hoge ~]# cd hogedir
[root@hoge hogedir]# vi docker-compose.yml
docker-compose.ymlの中身はこんな感じ。DBのユーザ名とパスワードが直書きですがご愛嬌。多分環境変数とかに突っ込むのが正しいと思われ。
version: "2"
services:
jupyter:
image: jupyter/datascience-notebook
restart: always
container_name: hogeJupyter
links:
- db
- gitlab
ports:
- "8888:8888"
gitlab:
image: gitlab/gitlab-ce
restart: always
container_name: hogeGitLab
ports:
- "8080:80"
db:
image: postgres
restart: always
container_name: hogePostgres
environment:
POSTGRES_USER: your_name
POSTGRES_PASSWORD: your_password
crowi:
image: noobynoob/docker-node-crowi:v1.5.0
restart: always
container_name: hogeCrowi
links:
- mongo:mogo
- redis:redis
- elasticsearch:elasticsearch
ports:
- "8081:80"
mongo:
image: mongo
restart: always
container_name: hogeMongo
redis:
image: redis:alpine
restart: always
container_name: hogeRedis
elasticsearch:
image: elasticsearch
user: elasticsearch
restart: always
container_name: hogeES
ports:
- "9200:9200"
command:
- "sh"
- "-c"
- "./bin/plugin install analysis-kuromoji;
./bin/plugin install mobz/elasticsearch-head;
elasticsearch;"
あとはコンテナをまとめて起動。
[root@hoge hogedir]# docker-compose up -d
Jupyterにアクセスする場合は通常の設定だとTokenが必要なので以下のようにして得ます。
[root@hoge hogedir]# docker logs hogeJupyter
...
[C 13:11:14.594 NotebookApp]
Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
http://[コンテナID]:8888/?token=[ここがTokenとなる]
...
コンテナをまとめて終了する時は以下。ただしコンテナが消えるので要注意。
[root@hoge hogedir]# docker-compose down
Jupyterの設定もJupyterHub利用によるマルチユーザ化など色々課題がありますので、そのうちにご紹介します。