この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは、岩城です。 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
おわりに
本エントリが誰かの役に立てれば幸いです。