JupyterHubは、マルチユーザーで、シングルユーザーJupyter notebook サーバーの複数インスタンスを生成、管理、およびプロキシします。AWS EC2環境で Pyenv + Anacondaを使用して環境を構築した時のメモです。

AWS EC2環境構築

  • AWSコンソールにログインし、EC2 Dashboardを選択。[Launch Instance] をクリックします。

  • Amazon Linux AMI 2017.03.1 (HVM), SSD Volume Type を選択、[Select]クリック

  • t2.micro (Free tier eligible) を選択, [Next: Configure Instance Details]クリック

  • [Next: Add Storage]クリック

  • [Next: Add Tags]クリック

  • [Next: Configure Security Group]クリック

  • Create a new security group を選択, [Security group name:] を適当な名前に変更。Add Ruleから SSH, Custom TCP Rule:Port 8000を追加。[Review and Launch]クリック

  •  [Launch]クリック。Create a new key pairを選択し, [Key pair name] に適当な名前を入れる。[Download Key Pair]をクリックすると pemファイルがダウンロードされるので、ファイル名及びパーミッション(600)を変更する。[Launch Instances]クリック

  • [View Instances]クリック

  • “Status Check”が “2/2 checks passed”になるまで数分待つ。ステータスが変わったら AWS EC2 の構築は完了です。右下の “Public DNS (IPv4)”は、SSH loginで必要になるのでメモしておく。

Pyenv setup

  • ssh -i JUPYTERHUB-key-pair.pem ec2-user@[Public DNS(IPv4)]

$ sudo yum update

$ sudo su

# yum install gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel

# cd /opt

# git clone https://github.com/yyuu/pyenv.git pyenv

# echo 'export PYENV_ROOT="/opt/pyenv"' >> ~/.bashrc
# echo 'if [ -d "${PYENV_ROOT}" ]; then' >> ~/.bashrc
# echo '    export PATH=${PYENV_ROOT}/bin:$PATH' >> ~/.bashrc
# echo '    eval "$(pyenv init -)"' >> ~/.bashrc
# echo 'fi' >> ~/.bashrc

# exec $SHELL -l

Anaconda install

# pyenv install anaconda3-4.4.0

# pyenv global anaconda3-4.4.0

# python --version
Python 3.6.1 :: Anaconda 4.4.0 (64-bit)

JupyterHub install

# conda install -c conda-forge jupyterhub

# conda install notebook

JupyterHub setup

# mkdir /etc/jupyterhub

# cd /etc/jupyterhub

# jupyterhub --generate-config

# vi jupyterhub_config.py

#c.Spawner.notebook_dir = ''
c.Spawner.notebook_dir = '~/notebook'

Startup setup

# echo jupyterhub -f /etc/jupyterhub/jupyterhub_config.py > jupyterhub.sh

# echo su -l root /etc/jupyterhub/jupyterhub.sh \& >>/etc/rc.local

JupyterHub user setup

# adducer testuser

# passwd testuser
Changing password for user testuser.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

# reboot

* ssh -i JUPYTERHUB-key-pair.pem ec2-user@[Public DNS(IPv4)]

$ mkdir notebook

$ sudo passed ec2-user
Changing password for user ec2-user.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

$ sudo su - testuser

$ mkdir notebook

Loginして動作確認

  • http://[Public DNS(IPv4)]:8000

  • notebook画面

セットアップが完了していれば、上記の画面が表示されます。テストユーザは後で削除してください。また、ec2-userの代わりに管理用のユーザを作成して、ec2-userを削除するのが良いでしょう。証明書やドメインの設定は適宜行ってください🙇