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利用によるマルチユーザ化など色々課題がありますので、そのうちにご紹介します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Docker

次の記事

自宅サーバでDocker