JupyterLab を Docker + nginx-proxy で構築する

スポンサーリンク

いつでもどこでもデータ分析ができる環境として JupyterLab を Docker で Nginx のリバースプロキシ経由で動くように構築してみた。

そのときのメモ。

スポンサーリンク

JupyterLab

Jupyter Notebook というノートブックの形式でプログラムとその実行結果、メモなどを残すことができるツールの次世代版らしい JupyterLab。フォルダ表示やタブや分割による複数ノートブックの表示など jupyter Notebook がさらに便利になっている。

ローカル環境で Jupyter Notebook を利用していたけれど、どこからでも利用できるようにVPS上にその環境を構築してみることにした。

構築環境や前提など

  • さくらVPS
  • CentOS 7
  • Docker と docker-compse がインストールされていて利用できること
  • nginx-proxy と letsencrypt-nginx-proxy-companion を利用したリバースプロキシを用意していること

リバースプロキシの件は以下あたりが参考になる。

docker-compose.yml

JupyterLab のコンテナ用のフォルダを作成して、その中に docker-compose.yml を作成する。

記載内容は以下。

version: '2'

services:
  jupyterlab:
    image: jupyter/datascience-notebook:latest
    user: root    ②
    volumes:
      - "./work:/home/jovyan/work"
    environment:
      NB_UID: 1000       ①
      NB_GID: 1000       ①
      GRANT_SUDO: "yes"  ②
      VIRTUAL_HOST: jupyterlab.example.com      ④
      LETSENCRYPT_HOST: jupyterlab.example.com  ④
      LETSENCRYPT_EMAIL: jupyterlab@example.com ④
      LETSENCRYPT_TEST: "false"                 ④
    privileged: true
    restart: always
    command: start.sh jupyter lab --NotebookApp.token="token"   ③


networks:
  default:
    external:
      name: nginx-proxy

JupyterLab のイメージは jupyter – Docker Hub の datascience-notebook を利用した、他のものを利用しても大丈夫なはず。

① 永続化とユーザーグループ権限

永続化のために /home/jovyan/work./work へマウントしている。その際、コンテナユーザーでの読み書きができるように、NB_UIDNB_GID を設定してコンテナのユーザーとグループをホスト側のユーザーとグループになるようにしている。

② sudo権限

また、GRANT_SUDO を yes にすることで、パスワードなしで sudo を実行できるようにしている。パッケージのインストールなどをできるようにするため。コンテナも user:root 指定が必要。

③ token の設定

初回起動は token をつけず以下のみで $ docker-compose up する。

    command: start.sh jupyter lab

そうすると以下のような感じで起動して ★ の位置に token が表示される。

Starting jupyter_jupyterlab_1 ... 
Starting jupyter_jupyterlab_1 ... done
Attaching to jupyter_jupyterlab_1
jupyterlab_1  | Executing the command: jupyter lab --NotebookApp.token=xxxxx <-★
jupyterlab_1  | [I 06:39:05.296 LabApp] http://localhost:8888/?token=...
jupyterlab_1  | [I 06:39:05.296 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

これをメモしておいて③のtoken部分に記載する。そうすることで以後はこのtokenで常に起動するので、ログイン時にそれを入力して入るようにする。

④ VIRTUAL_HOSTなど

nginx-proxy と letsencrypt-nginx-proxy-companion 用にドメインの指定などを実施。 Jupyter 自体に SSL の指定をする方法が用意されているが、これはあくまで Jupyter を直接利用する場合に使う。

今回のように nginx-proxy 経由で行う場合は、通常通り環境変数で記載する。nginx-proxy を別コンテナで動かしているなら、 network 設定も忘れずに。

まとめ

これで、 https 環境での JupyterLab 環境ができあがる。 Terminal 機能もあるので、conda からのパッケージインストールなども行えるので便利。

スポンサーリンク

python

Posted by itdog