EC2(Ubuntu 18.04 LS)にJupyter Notebookをインストールしてみた
はじめに
こんにちは、岩城です。 EC2(Ubuntu 18.04LS)にJupyter Notebookをインストールする機会がありました。 備忘録として残しておきます。
構成
本エントリの構成を以下に示します。 本来は、インターネットからアクセスする場合、リバースプロキシを介すなど、セキュリティ面で考慮すべき点があります。ご留意ください。
やってみた
EC2インスタンスの作成
- Ubuntu Server 18.04 LTS (HVM)を選択します
- ルートボリュームのサイズを増やします
- デフォルト8GBですが、Anacondaインストール時に容量が足りなくて失敗します
- 私は単にインストールして動作確認することが目的だったので、20GBにしました
セキュリティグループの設定
- インスタンスに関連付けたセキュリティグループを編集します
- 本エントリでは以下のポートへの接続を制限するために作業端末のIPアドレスを指定します
- SSH接続するための22ポート
- Jupyter Notebookに接続するための8888ポート
pyenvをインストール
インスタンスにログインして以下の作業を行います。
## パッケージを最新化 $ sudo apt update $ sudo apt upgrade ## pyenvをインストール $ git clone https://github.com/pyenv/pyenv.git ~/.pyenv ## pyenvにパスを通す $ echo 'export PYENV_ROOT="${HOME}/.pyenv"' >> ~/.bash_profile $ echo 'export PATH="${PYENV_ROOT}/bin:$PATH"' >> ~/.bash_profile $ echo 'export PATH="${PYENV_ROOT}/shims:$PATH"' >> ~/.bash_profile $ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile ## .bash_profileを確認 $ cat ~/.bash_profile export PYENV_ROOT="${HOME}/.pyenv" export PATH="${PYENV_ROOT}/bin:$PATH" export PATH="${PYENV_ROOT}/shims:$PATH" eval "$(pyenv init -)" ## .bash_profileを再読込 $ source ~/.bash_profile
Anacondaをインストール
Anacondaをインストールします。
## パッケージリストにanaconda3系があることを確認 $ pyenv install --list | grep anaconda3 ## Anacondaをインストール $ pyenv install anaconda3-5.3.1 ## Anacondaにパスを通す $ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-5.3.1/bin:$PATH"' >> ~/.bash_profile ## .bash_profileを確認 $ cat ~/.bash_profile export PYENV_ROOT="${HOME}/.pyenv" export PATH="${PYENV_ROOT}/bin:$PATH" export PATH="${PYENV_ROOT}/shims:$PATH" eval "$(pyenv init -)" export PATH="$PYENV_ROOT/versions/anaconda3-5.3.1/bin:$PATH" ## .bash_profileを再読込 $ source ~/.bash_profile ## インストールできたことを確認 $ pyenv versions * system (set by /home/ubuntu/.pyenv/version) anaconda3-5.3.1 (set by /home/ubuntu/.pyenv/version) ## Anacondaに切り替える $ pyenv global anaconda3-5.3.1 ## 切り替わったことを確認 $ pyenv versions system * anaconda3-5.3.1 (set by /home/ubuntu/.pyenv/version) ## Anaconda, Incが表示されることを確認 $ python Python 3.7.0 (default, Jun 28 2018, 13:15:42) [GCC 7.2.0] :: Anaconda, Inc. on linux Type "help", "copyright", "credits" or "license" for more information. >>>quit()
Jupyter Notebookのセットアップ
リモートからJupyter Notebookにアクセスするための設定を行います。 まずは、ログイン時に利用するパスワードのハッシュ値(sha1:XXXXXXX)を出力し、控えておきます。
$ ipython3 In [1]: from IPython.lib import passwd In [2]: passwd() Enter password:<パスワードを入力> Verify password:<もう一度パスワードを入力> Out[2]: 'sha1:XXXXXXXXXXXXXXXXX' Out[3]: quit()
次に、リモートアクセスのための設定を行います。
$ jupyter-notebook --generate-config $ vi ~/.jupyter/jupyter_notebook_config.py c.IPKernelApp.pylab = 'inline' #matplotlibで描画したものがJupyter Notebook上で表示可能となる c.NotebookApp.ip = '*' #Jupyter NotebookにアクセスできるIPを制限 c.NotebookApp.open_browser = False #Jupyter Notebook起動後にブラウザの自動起動を拒否 c.NotebookApp.port = 8888 #ポート指定(デフォルト8888) c.NotebookApp.password = u'sha1:XXXXXXX(#先ほど保存したハッシュ値を記載)'
Jupyter Notebookを起動します。
$ jupyter-notebook &
Jupyter Notebookに接続
http://xxx.xxx.xxx.xxx:8888/login
にアクセスして以下の画面が表示されます。
パスワードを入力してログインできればOKです。
Jupyter Notebookの自動起動
このままの設定では、インスタンスを再起動および停止した場合、毎回jupyter-notebook &
を実行して起動しなければなりません。そこでsystemdにサービスを登録してインスタンス起動時にJupyter Notebookを起動するようにします。
まずは、QuitをクリックしてJupyter Notebookを停止します。
## サービスファイルの作成 $ sudo vi /etc/systemd/system/notebook.service [Unit] Description = Jupyter Notebook [Service] Type=simple PIDFile=/var/run/jupyter-notebook.pid ExecStart=/home/ubuntu/.pyenv/versions/anaconda3-5.3.1/bin/jupyter notebook WorkingDirectory=/home/ubuntu User=ubuntu Group=ubuntu Restart=always [Install] WantedBy = multi-user.target ## サービスに登録されていることを確認 $ sudo systemctl list-unit-files --type=service |grep notebook notebook.service disabled ## 起動 $ sudo systemctl start notebook ## 起動確認 $ sudo systemctl status notebook ● notebook.service - Jupyter Notebook Loaded: loaded (/etc/systemd/system/notebook.service; disabled; vendor preset Active: active (running) since Sun 2019-02-10 06:58:54 UTC; 10s ago Main PID: 18873 (jupyter-noteboo) Tasks: 1 (limit: 1152) CGroup: /system.slice/notebook.service └─18873 /home/ubuntu/.pyenv/versions/anaconda3-5.3.1/bin/python /home ~以下省略 ## 停止 $ sudo systemctl stop notebook ## 停止確認 $ sudo systemctl status notebook ● notebook.service - Jupyter Notebook Loaded: loaded (/etc/systemd/system/notebook.service; disabled; vendor preset: enabled) Active: inactive (dead) ~以下省略 ## 自動起動の設定 $ sudo systemctl enable notebook Created symlink /etc/systemd/system/multi-user.target.wants/notebook.service → /etc/systemd/system/notebook.service. ## 自動起動が有効になっていることを確認 $ sudo systemctl list-unit-files --type=service |grep notebook notebook.service enabled
再起動後、http://xxx.xxx.xxx.xxx:8888/login
にアクセスして画面が表示されれば完了です。
$ sudo shutdown -r now
おわりに
本エントリが誰かの役に立てれば幸いです。