サーバにJupyterLabいれてどこでもJulia環境

julia_logo サーバー

概要

Juliaの勉強を始めた。
プログラミング言語Juliaは最近人気が出てきている言語の一つ
数値計算や機械学習方面で秀でていて、従来MatLabやR、Pythonでやってたことを置き換えるのにいいらしい。
最初はWindows上で試そうとWin64版のインストーラー+Intellij IDEAのJuliaプラグインで試してみたんだけど、現状のプラグインだとPlots.jlの描画ができないって問題があって、いくつか回避方法はあったりVS Code使うって手もあったんだけどどれも面倒で、どうせならサーバ上で動くようにしてどこでも試せるようにしようとJupyterLabを構築することにした。

JupyterLabはJupyterNotebookの後継でよくPythonの機械学習等で使われているけど、Juliaにも対応している。
Jupyterベースの環境としてはGoogleColabolatoryを使ったことがあったのでなんとなく使い方はわかるのでいいかなと。
GoogleColabでPython各事自体はあまり好きな感じではなかったんだけど、言語を学んだりするときの書き捨てのコードには向いてるんじゃないかなと思って

構築

JupyterLabの構築はJula環境入りのものが公式でDockerイメージ出しているので簡単に導入できた。
構築先はVPS借りて外からいつでもアクセスできるようにした。

Docker

ということでまずはDocker周りの構築から
CentOS環境なのでyumを利用して入れていく。

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce

インストールできたらユーザーを設定して自動起動

sudo usermod -aG docker $USER
sudo systemctl start docker
sudo systemctl enable docker

次にDocker Composeの導入
こちらはcurlで落として設定する。

sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

ここまでできたら準備ができたので、JupyterLabを動かすためのDockerComposeファイルを記述する。

mkdir jupyter
cd jupyter
vi docker-compose.yml
version: "3"
services:
  notebook:
    image: jupyter/datascience-notebook
    ports:
      - "8888:8888"
    # 環境変数の設定
    environment:
      JUPYTER_ENABLE_LAB: "yes"
      TZ: "Asia/Tokyo"
    volumes:
      - ./jovyan:/home/jovyan
    command:
      start-notebook.sh
        --NotebookApp.notebook_dir='/home/jovyan/work'
    restart: always

設定ファイルで書いているボリュームを紐付けるためのディレクトリを作成する。
(ユーザー名のjovyanはjupyter使うときに標準的に使われている名前らしい)

mkdir jovyan

これで設定できたのでdocker-composeするとイメージのDL、起動ができる。

docker-compose up -d

サーバのポートが開いてれば8888でブラウザからアクセスできるはず

Apache設定

80番ポートでアクセスできるようにApacheの設定をする。
JupyterLabだけ使うんだったらDockerのポート紐付けを80番にするだけでもいいと思うけど、他のものと同居したかったのでバーチャルホストでプロクシ通すようにした。

sudo vi /etc/httpd/conf.d/jupyter.conf
<VirtualHost *:80>
ServerName example.com
ServerAlias example.com

ProxyRequests Off
ProxyPreserveHost On

<Location />
ProxyPass http://localhost:8888/
ProxyPassReverse http://localhost:8888/
</Location>

<Location /terminals/websocket/>
ProxyPass ws://localhost:8888/terminals/websocket/
ProxyPassReverse ws://localhost:8888/terminals/websocket/
</Location>

<LocationMatch /(api/kernels/[^/]+/channels.*)>
ProxyPass ws://localhost:8888/$1
ProxyPassReverse ws://localhost:8888/$1
</LocationMatch>
</VirtualHost>

バーチャルホストの基本的な設定だけだけど、少し特殊なものとしてはWebSocket使ってる部分があるのでそこだけは追加で設定しないといけないみたい。

これでapacheを再起動すると設定したURLでアクセスできる。

その他

これで基本的に外部からアクセスできるけど、このままだとURL叩いたら誰でもNotebook開けてしまう。
それだと嫌だと思うのでJupyterLabにパスワード認証を追加した。
後は一応SSLもLet’s Encryptで対応した。
この部分は割愛

所感

というわけどこのように環境構築してしばらく使ってみた感想を言うととても良い!
今まで以上に気軽にプログラム書けるのと、端末間の作業引き継ぎをシームレスに行うことができる。
そして何よりiPadなどのモバイル端末で気軽にコードを書ける!
キーボードさえあればそれなりにかけてしまいちょっとした思いつきを書き留めるのに便利だ。

あまりスペックのいいサーバではないので、機械学習などの少し重い処理をするとすぐ固まるから万能ではないけど色々と勉強するには便利なものなので頑張ろう!

コメント

タイトルとURLをコピーしました