テック・スタディ

IoTとかセキュリティとかの備忘録

Jupyter NotebookをCentOS 7 で構築する

目的

最近Pythonで検証することが増えてきたため、即座に検証できる環境を構築しようと思い立ちました。 これから機械学習などのコードを検証していきたいので、足場作りにJupyter Notebookの環境を整備してみることにします。

環境

# cat /etc/centos-release
CentOS Linux release 7.3.1611 (Core) 

インストール

update

環境は常に最新のものを使いましょう。

$ sudo yum update

必要なものをdownload

$ curl https://repo.continuum.io/archive/Anaconda3-4.3.1-Linux-x86_64.sh -O
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  474M  100  474M    0     0  11.0M      0  0:00:42  0:00:42 --:--:-- 11.2M
$ chmod +x Anaconda3-4.3.1-Linux-x86_64.sh 

$ ./Anaconda3-4.3.1-Linux-x86_64.sh 

Welcome to Anaconda3 4.3.1 (by Continuum Analytics, Inc.)

In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>> (Enterを押下)

#↓ライセンス条項を承認するか?という質問が出てくるので、yesと入力
Do you approve the license terms? [yes|no]  
>>>  yes

#↓Anaconda3を以下の場所にインストールするよ!と出てくる。
#特に問題なければEnter押下
Anaconda3 will now be installed into this location:                                      
/home/h3xm9s9/anaconda3                     

  - Press ENTER to confirm the location     
  - Press CTRL-C to abort the installation  
  - Or specify a different location below   

[/home/h3xm9s9/anaconda3] >>> (Enterを押下)

installing: xxxxx

・・・(中略)・・・

Python 3.6.0 :: Continuum Analytics, Inc.   
creating default environment...             
installation finished. 
#Anaconda3のファイルパス?か何かを.bashrcに書き込もうとしてるみたい
#特に問題なければyesにします。                     
Do you wish the installer to prepend the Anaconda3 install location      
to PATH in your /home/h3xm9s9/.bashrc ? [yes|no]                                         
[no] >>> yes                                

Prepending PATH=/home/h3xm9s9/anaconda3/bin to PATH in /home/h3xm9s9/.bashrc             
A backup will be made to: /home/h3xm9s9/.bashrc-anaconda3.bak                            


For this change to become active, you have to open a new terminal.                       

Thank you for installing Anaconda3!         

Share your notebooks and packages on Anaconda Cloud!                                     
Sign up for free: https://anaconda.org      

[h3xm9s9 ~]$ 
                        
###noにした場合...
###$PATH設定してね!って言われます。

[no] >>> no        

You may wish to edit your .bashrc or prepend the Anaconda3 install location:             

$ export PATH=/home/h3xm9s9/anaconda3/bin:$PATH                                          

Thank you for installing Anaconda3!         

Share your notebooks and packages on Anaconda Cloud!                                     
Sign up for free: https://anaconda.org  

インストールは無事に終了しました。

.bashrcを再読み込み

インストール段階でファイルパスの設定がされていますが、筆者の環境では.bashrcが読み込まれていなかったので 以下を実行しました。

$ source ~/.bashrc

Jupyter Notebook起動!

インストール時にファイルパスを.bashrcに書き込めていれば、起動できるはず。 前項の筆者のように、そもそもsourceされていない場合もありますが。。。 そもそもコマンドが無いと怒られる場合は、インストール時に失敗している or 「$ export PATH=/…」の部分が適用されていないので、なんとか解決してください。 ※特にシェルをbash以外にしている人は要注意です。

configファイル作成&編集

$ mkdir ~/.jupyter
$ touch ~/.jupyter/jupyter_noteboook_config.py
c = get_config()

c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888

firewalld設定

「セキュリティは万全?」のセの字を言われる前に設定する。

$ sudo firewall-cmd --add-port=8888/tcp --permanent
$ sudo firewall-cmd --reload

ログインパスワードの設定

# iPythonを起動
$ ipython

# 暗号化された文字列を生成するためにライブラリ読み込み
In [1]: from notebook.auth import passwd

# パスワードを入力して暗号化された文字列を生成
In [2]: passwd()
Enter password: 
Verify password: 
Out[2]: 'sha1:(暗号化された文字列)'

# iPythonから抜ける
In [3]:                                                                                                                                               
Do you really want to exit ([y]/n)? y

iPython実行時に以下のエラーが

ImportError: No module named notebook.auth

おそらくjupyterのインストールがanaconda経由のためでしょう。 pipでjupyterをインストールします。

$ pip install jupyter

特にエラーが出なければ、モジュールが追加されているはずです。 もう一度暗号化文字列生成用のモジュールを読み込んでみましょう。

暗号化されたパスワードをconfigに設定

先ほど生成したパスワードを設定します。

$ vim ~/.jupyter/jupyter_notebook_config.py

c.NotebookApp.password = u'sha1:(前項で生成した文字列)'  #追記

Jupyter Notebook 起動

$ jupyter notebook

パスワード認証画面が出てきた!

f:id:h3xm9s9:20170811100625p:plain

HTTPSアクセスを有効にするための設定

あらかじめ鍵ペア作成と証明書取得は完了しておきます。 作成が完了したら、移動します。

$ mv mycert.pem ~/.jupyter/
$ mv mykey.key ~/.jupyter/

移動ができたら、configに秘密鍵と証明書のパスを追記しておきます。

$ vim ~/.jupyter/jupyter_notebook_config.py
c.NotebookApp.certfile = u'${ホームディレクトリへの絶対パス}/.jupyter/mycert.pem'
c.NotebookApp.keyfile = u'${ホームディレクトリへの絶対パス}/.jupyter/mykey.key'

デーモン再起動をすれば、作業完了!

参考サイト

CentOS 7のsystemctlコマンドに登録できるみたいですね。 詳しい手順は以下のサイトを参考にすればいいかな。

CentOS7にJupyter Notebookを導入