pipでJupyterHubをインストール

#JupyterNotebookを複数ユーザーで使う
Jupyter Notebookの環境を立てただけでは、複数ユーザーで同時に使用することは困難なので、ユーザー管理機能を追加する「JupyterHub」を用いて、Jupyter Notebookを使用できる環境を作ります。
JupyterHub：https://jupyterhub.readthedocs.io/en/stable/

インストールをAnacondaで行うことを説明している記事が多いので、Anacondaの代わりにpipで実行する方法についてまとめました。
Jupyter Notebookは、Googleアカウントをお持ちであれば、[Google Colaboratory](https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja)を使うことがとても簡単ですが、Googleアカウントを職場で使用できない場合は、クレジットカード不要で無料で使える[IBM Cloudライトアカウント](https://www.ibm.com/cloud-computing/jp/ja/lite-account/)のWatson Studioがあります。他にも[Amazon EMR](https://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/emr-jupyterhub.html)なども....。
GoogleやIBM Cloudなどを使用できない場合は、オンプレミスあるいは、専有型のシングルテナントサーバーをIBM Cloud IaaSなどで確保し、この記事を参考にJupyterHubとJupyter Notebookによる実行環境を構築すると良いでしょう。

#想定環境
Virtual Box上に、Ubuntu 16.04 Server環境を用意しました。
Ubuntu 16.04 Server:http://releases.ubuntu.com/16.04/
ホストオンリーアダプタを追加し、IPアドレスとして「192.168.56.10」を割り当てています。

割当CPUは1つで、メモリは2GBです。IBM CloudやIDCFクラウドで仮想サーバーを用意する場合も、小さく始めるので、メモリ2GBあれば良いでしょう。
また、「user」という名称のユーザーを作成済みの状態です。この「user」というユーザーは、JupyterHubの管理者とします。

#インストールディレクトリの作成
/opt ディレクトリ以下に、jupyterという名称のディレクトリを作成し、作業します。

```
sudo mkdir -p /opt/jupyter
cd /opt/jupyter
```

#インストールスクリプト
JupyterHubとJupyter　Notebookの両方をインストールします。下記が、インストールスクリプトです。

```
#!/bin/bash
sudo apt-get update -y && sudo apt-get upgrade -y
sudo apt-get update -y && sudo apt-get upgrade -y
sudo apt-get install -y build-essential python3-dev python3-setuptools libfreetype6-dev
sudo ln -s /usr/include/freetype2/ft2build.h /usr/include/
sudo easy_install3 pip
sudo pip install numpy scipy matplotlib seaborn scikit-learn pandas psycopg2 ipython-sql pymysql
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo python3 -m pip install jupyterhub
sudo npm install -g configurable-http-proxy
sudo python3 -m pip install notebook
sudo jupyterhub --generate-config
echo "Installed JupyterHub"
```

適当なディレクトリで、「jupyterhub-install.sh」を作成し、インストールスクリプトをコピー&ペーストし、保存します。ここでは、nanoエディタを使用していますので、Ctrl+xキーを押し、yキーで保存です。

```
sudo nano jupyterhub-install.sh
```
前述のインストールスクリプトをコピー&ペースト。jupyterhub-install.shを実行します。

```
sudo chmod a+x jupyterhub-install.sh
./jupyterhub-install.sh
```

#Ubuntu Serverにユーザー追加
JupyterHubを利用するユーザーは、デフォルトの認証ではインストール先のLinux環境(ここではUbuntu Server)のユーザー情報を使用します。

```
sudo adduser user1
sudo adduser user2
```

#JupyterHub設定ファイルの編集
/opt/jupyterディレクトリ内の「jupyterhub_config.py」を編集します。

```
sudo nano /opt/jupyter/jupyterhub_config.py

JupyterHubの管理者について記述します。
#c.JupyterHub.admin_users = set() の直下に、
c.JupyterHub.admin_users = {'user'}
を追記。

JupyterHubの一般ユーザーとして、user1とuser2を記述します。
#c.Authenticator.whitelist = set() の直下に、
c.Authenticator.whitelist = {'user1', 'user2'}
を追記。

#c.JupyterHub.hub_ip = '127.0.0.1' の直下に、
c.JupyterHub.hub_ip = '0.0.0.0'
を追記。
```

#JupyterHubの起動
```
sudo jupyterhub /opt/jupyter/jupyterhub_config.py &
```

#JupyterHubにログイン
Webブラウザで、http://割当IPアドレス:8000 にアクセスし、下記のユーザーでログインし、Notebookを作成、実行できるかどうか確認します。

- 管理者：user
- 一般ユーザー：user1, user2

##Notebookの動作確認
先ずログインします。上記の一般ユーザーのどちらかでログインします。ユーザー名、パスワードともに、デフォルトの認証ではJupyterHubをインストールしたサーバーのユーザー名とパスワードです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/41414/47d64e09-7e50-818b-a2ab-9e622edb0583.png)

他のJupyter Notebook環境で作成しておいたノートブック(ipynb形式)のファイルを取り込み、同様の結果が出るか確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/41414/f9f493eb-d73a-6e00-26a2-bc0662164d12.png)