Help us understand the problem. What is going on with this article?

JupyterHubの構築

More than 1 year has passed since last update.

JupyterHubを構築する

みなさまはPythonのコーディング環境、なにを使っていますか?
Jupyter Notebookという人も意外と多いと思います。
Jupyter NotebookはWebブラウザで使うコーディング環境で、プラグインを使うことでPython以外にもJavaやR等のコーディング環境にもなります。

Jupyter Notebookだけではユーザ管理はできず、グループで開発を行うときに不便です。
JupyterHubを使えばJupyter Notebookにユーザ認証のインターフェイスを付けることができるので、その構築方法を紹介します。

※ Jupyter NotebookはAnacondaでインストールするのが簡単です。
https://www.continuum.io/downloads

※ JupyterHub
http://jupyterhub.readthedocs.io/en/latest/index.html

環境

今回紹介する構築環境は以下です。
- OS:CentOS7.3
- Anaconda4.3.0
- Python3.5
- 基盤:AWS EC2

事前設定

まずは事前にAnaconda4.3.0をインストールしましょう。

AnacondaのLinux用インストールシェルをダウンロードします。

# 以降、rootユーザで操作しますが、実際には使用可能なユーザを使ってください。
sudo su -
cd ~
wget https://repo.continuum.io/archive/Anaconda3-4.2.0-Linux-x86_64.sh

Anacondaをインストールします。
インストール中に色々きかれますが、基本的にyesで良いです。

ただし、一つだけ注意点があります。
インストールディレクトリはひとまず/opt/anaconda3/にします。
インストールディレクトリはデフォルトだと/root/anaconda3/になってしまいますが、これだとroot以外のユーザがAnacondaを使えません。
非rootユーザ(sudo権限あってもなくても)がJupyterHubを使う場合は、そのユーザもアクセス可能なディレクトリにインストールしましょう。

bash Anaconda3-4.2.0-Linux-x86_64.sh

2017-02-05_1.png

これでAnacondaはインストールされました。
Jupyter NotebookのConfigは不要なので、いよいよJupyterHubのインストールを行います。

JupyterHubのインストール

AnacondaをインストールするとAnaconda用パッケージやPythonモジュールをconda installコマンドでインストールできるようになります。
JupyterHubもconda installでインストールします。

# JupyterHubをインストール
conda install -c conda-forge jupyterhub
# JupyterHubのnotebookをインストール
conda install notebook

これでJupyterHubをインストールしNotebookを起動できるようになりました。
次はConfigファイルを作成し、設定を行います。

JupyterHubのConfigファイルを作成

JupyterHubのConfigファイルは以下コマンドで生成します。

cd /opt/
jupyterhub --generate-config

このようにjupyterhub_config.pyというファイルが作られます。

2017-02-05_2.png

JupyterHubの設定

JupyterHubではプロキシやTLS証明書、ユーザ、管理ユーザ等、多様な設定を行うことが可能です。
今回は最低限、管理ユーザ、ユーザ、ユーザのNotebookディレクトリのみ設定します。
jupyterhub_config.pyをエディターで開きます。

vi jupyterhub_config.py

以下の設定値を変更します。

まずはNotebookディレクトリです。
各ユーザのホームディレクトリ配下に~/notebook/ディレクトリを作成し、そこをNotebookディレクトリにします。

## Path to the notebook directory for the single-user server.
#
#  The user sees a file listing of this directory when the notebook interface is
#  started. The current interface does not easily allow browsing beyond the
#  subdirectories in this directory's tree.
#
#  `~` will be expanded to the home directory of the user, and {username} will be
#  replaced with the name of the user.
#
#  Note that this does *not* prevent users from accessing files outside of this
#  path! They can do so with many other means.
#c.Spawner.notebook_dir = ''
# 以下を追記
c.Spawner.notebook_dir = '~/notebook'

次にJupyterHubの使用ユーザです。
これはWhitelistとして設定します。

## Whitelist of usernames that are allowed to log in.
#
#  Use this with supported authenticators to restrict which users can log in.
#  This is an additional whitelist that further restricts users, beyond whatever
#  restrictions the authenticator has in place.
#
#  If empty, does not perform any additional restriction.
#c.Authenticator.whitelist = set()
# 以下を追加
c.Authenticator.whitelist = {'user01', 'user02'}

最後に管理ユーザです。

## Set of users that will have admin rights on this JupyterHub.
#
#  Admin users have extra privilages:
#   - Use the admin panel to see list of users logged in
#   - Add / remove users in some authenticators
#   - Restart / halt the hub
#   - Start / stop users' single-user servers
#   - Can access each individual users' single-user server (if configured)
#
#  Admin access should be treated the same way root access is.
#
#  Defaults to an empty set, in which case no user has admin access.
#c.Authenticator.admin_users = set()
# 以下を追加
c.Authenticator.admin_users = {'user00'}

これで最低限の設定は完了です。
他の設定値については以下を参照してください。
http://jupyterhub.readthedocs.io/en/latest/getting-started.html#configuration

各ユーザのNotebookを作成

JupyterHubを使用するユーザ用にNotebookを作成します。

mkdir -p /home/user01/notebook
chown user01:usergr /home/user01/notebook

JupyterHub起動

JupyterHubはデフォルトでHTTPSで起動しますが、今回はTLS証明書を設定していません。
自己署名証明書(オレオレ証明書)でも良いのですが、面倒なので、--no-sslオプションをつけてHTTPで起動します。

jupyterhub --no-ssl

2017-02-05_3.png

これで起動します。
JupyterHubはポート番号8000、HTTPで公開されます。

余談ですが、このコマンドはnohupと&で挟んでOSバックグラウンド起動にすることをお奨めします。

nohup jupyterhub --no-ssl &

JupyterHubにアクセス

PCでWebブラウザからJupyterHubにアクセスします。
URLは http://:8000/ です。

2017-02-05_4.png

HTTPSにしろよごら(# ゚Д゚) とメッセージが出ています。
あとでオレオレ証明書を作りましょう(^_^;)。

(2018/04/27追記:証明書はletsencryptでもOKなようです。
https://jupyterhub.readthedocs.io/en/0.7.2/getting-started.html#ssl-encryption)

ユーザ名とパスワードを入力してログインします。
以降Jupyter Notebook同様に使用可能ですので、割愛します。

参考URL:
http://jupyterhub.readthedocs.io/en/latest/index.html
https://www.continuum.io/downloads

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away