4
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker-compose で https 対応の Jupyter lab を作る

Last updated at Posted at 2018-10-16

Python の勉強をするついでに HTTPS 対応した Jupyter lab を Conoha VPS@CentOS 7 で建ててみました。
メモ代わりにまとめてみました。

大変参考にさせていただきました。
JupyterLab を Docker + nginx-proxy で構築する
docker-composeでLet's Encrypt SSL,HTTP2通信対応Nginxリバースプロキシサーバを構築する

  1. 構築環境
  • ConoHa VPS@CentOS 7
  • docker 18.06.1-ce
  • docker-compose 1.21.2, build a133471
  • jupyter.example.com へホスティングする
  1. ディレクトリ構成

ファイル構成は下図のように配置しました。

/home/jupyter/
 ┣ docker-nginx/
 ┃ ┗ docker-compose.yml
 ┗ docker-jupyterlab/
   ┗ docker-compose.yml

  1. nginx-proxy, letsencrypt-nginx-proxy-companion の作成
docker-nginx/docker-compose.yml
version: '2'
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    privileged: true
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./docker-compose.d/certs:/etc/nginx/certs:ro
      - ./docker-compose.d/htpasswd:/etc/nginx/htpasswd
      - /etc/nginx/vhost.d
      - /usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
    restart: always

  letsencrypt-nginx:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: letsencrypt-nginx
    privileged: true
    volumes:
      - ./docker-compose.d/certs:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
    volumes_from:
      - nginx-proxy
    restart: always

networks:
  default:
    external:
      name: webproxy

次にネットワークの作成を行います。

$ docker network create webproxy

無事にできたらコンテナを起動してみます。

$ docker-compose up -d

この状態で example.com へアクセスすると 503 Error ページが表示されます。

  1. Jupyter lab の作成

ひとまず起動できるか確認したいので、 --NotebookApp.token='' にしておきます。

docker-jupyterlab/docker-compose.yml
version: '2'

services:
  jupyterlab:
    image: jupyter/tensorflow-notebook:latest
    user: root
    environment:
      NB_UID: 1000
      NB_GID: 100
      GRANT_SUDO: "yes"
      VIRTUAL_HOST: jupyter.example.com
      LETSENCRYPT_HOST: jupyter.example.com
      LETSENCRYPT_EMAIL: hoge@example.com
      LETSENCRYPT_TEST: "false"
    volumes:
       - "./work:/home/jovyan/work"
    privileged: true
    expose:
      - "8888"
    restart: unless-stopped
    command: start.sh jupyter lab --NotebookApp.token=''
networks:
  default:
    external:
      name: webproxy

また、下記部分は自分の環境に変更するようにしてください。

      VIRTUAL_HOST: jupyter.example.com
      LETSENCRYPT_HOST: jupyter.example.com
      LETSENCRYPT_EMAIL: hoge@example.com

コンテナを起動してみます。

$ docker-compose up -d

起動後しばらくまった後に jupyer.example.com に接続ます。
SSL認証マークがついたら無事完了です!嬉しい!

  1. パスワードの設定

このままだと jupyter.example.com へ接続すると誰でも接続できてしまうので、パスワードを設定します。
Console で iPython で passwd() 用いてパスワードのハッシュ値を生成します。

Jupyter lab の Launcher から Terminal を選択後、 ipython と入力することで iPython の Console に入ることができます。
launcher.png

jovyan@[ContainerID]:~$ ipython

iPython の Console で下記のように実行し、設定したいパスワードを 2 回入力し、
出力されたハッシュ値をメモします。

In [1]: from notebook.auth import passwd

In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

Jupyter lab のコンテナを停止させておきます。

$ docker-compose stop

docker-jupyterlab/docker-compose.yml の command 部を下記のように変更します。

command: start.sh jupyter lab --NotebookApp.token=''command: start.sh jupyter lab --NotebookApp.password='sha1:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

変更後の docker-jupyterlab/docker-compose.yml がこちら。

docker-jupyterlab/docker-compose.yml
version: '2'

services:
  jupyterlab:
    image: jupyter/tensorflow-notebook:latest
    user: root
    environment:
      NB_UID: 1000
      NB_GID: 100
      GRANT_SUDO: "yes"
      VIRTUAL_HOST: jupyter.example.com
      LETSENCRYPT_HOST: jupyter.example.com
      LETSENCRYPT_EMAIL: hoge@example.com
      LETSENCRYPT_TEST: "false"
    volumes:
       - "./work:/home/jovyan/work"
    privileged: true
    expose:
      - "8888"
    restart: unless-stopped
    command: start.sh jupyter lab --NotebookApp.password='sha1:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
networks:
  default:
    external:
      name: webproxy

編集後起動します。

$ docker-compose up -d

これでパスワード画面が表示されたら完了です!お疲れ様でした。
jupyter_login.png

よい Python ライフを!

4
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?