読者です 読者をやめる 読者になる 読者になる

INPUTしたらOUTPUT!

忘れっぽいんでメモっとく

CentOS6.6(64bit)にJupyterHubをインストールする

Python

estrellita.hatenablog.com

の続き。
jupyter/jupyterhub · GitHubに従ってJupyterHubをインストールする。


1. npmのインストール

JupyterHubの仕組み仕組みが分かっていないがnode.jsが必要なので以下のコマンドでインストールする。

$ sudo yum install npm
$ sudo npm install -g configurable-http-proxy


2. JupyterHubのインストール

続いて以下のコマンドでJupyterHubをインストール

$ sudo pip3 install jupyterhub
$ sudo pip3 install "ipython[notebook]"

この時点でjupyterhubと実行するとhttp://ホスト名:8000でJupyterHubにアクセスできるようになる。


3. JupyterHub起動ユーザの作成

Using sudo to run JupyterHub without root privileges · jupyter/jupyterhub Wiki · GitHubに従って特権ユーザーを作成する。

以下のコマンドでshadowグループとログインシェル・ホームディレクトリなしのユーザーjupyterを作成する。

$ sudo group add shadow
$ sudo useradd -s /sbin/nologin -M -g shadow jupyter


以下のコマンドで/etc/shadowのグループとパーミッションを変更する。

$ sudo chgrp shadow /etc/shadow
$ sudo chmod g+r /etc/shadow


sudospawnerとやらが必要なので以下のコマンドでインストールする。

$ sudo pip install git+https://github.com/jupyter/sudospawner


上記で作成したjupyterユーザがパスワードなしでsudo sudospanwerを実行できるよう/etc/sudoersを編集する。
sudospawnerのパスは自分の環境にあわせて変更している。

$ sudo visudo

JupyterHub用/etc/sudoers


4. JupyterHubの設定

以下のコマンドを実行して設定ファイルを生成する。

$ sudo mkdir /etc/jupyterhub
$ sudo chown jupyter /etc/jupyterhub
$ cd /etc/jupyterhub
$ sudo -u jupyter jupyterhub --generate-config
Writing default config to: jupyterhub_config.py


ポートの変更、SSLの設定のため以下を修正する。

$ sudo -u jupyter vi jupyterhub_config.py

GitHubアカウントでOAuth認証などもできるようだけど今回はLinuxのPAM認証のままにしておく。

JupyterHub設定ファイル


5. JupyterHubの起動

以下のコマンドを実行してJupyterHubを起動する。

$ sudo -u jupyter jupyterhub --JupyterHub.spawner_class=sudospawner.SudoSpawner


https://ホスト名:ポート/jupyter/にアクセスするとログイン画面が表示される。
(Nginxのリバースプロキシでポート番号をリライトしたけどリダイレクト大量発生でうまくいかなかった。。。)


今回PAMで認証しているのでID/パスワードはCentOS上のものと同じ。

f:id:tak95:20150730113538p:plain


whitelistに登録しているユーザーでログインに成功するとトップ画面に遷移。
今回は設定ファイルでログイン後のディレクトリを~/notebooksに指定しているので予め作成しておかないとリフレッシュが永遠に続くので注意。

f:id:tak95:20150730113549p:plain


notebookは右のNewから起動

f:id:tak95:20150730113557p:plain


無事にnotebookが起動できた!

f:id:tak95:20150730113605p:plain



これでchainerの学習が捗る!と思ったけど、よく考えたら自分ぼっちなのでマルチユーザー用のJupyter notebookなんて必要なかった。
またPythonにはvirtualenvでプロジェクト毎にパッケージのバージョンを管理する仕組みがあるけどJupyterHubだとその恩恵が受けられなさそう。
結局普通にjupyter notebook serverかな。。。