Alibaba CloudでJupyter notebookを構築する

#1. 背景紹介
最近Deep learningやAIなど新しい技術を使ってビジネスをやりたい人がどんどん増えています。しかし、Deep learningの機能をサーバで実現するにはまずインフラの立ち上げとネットワーク構築など低層的の設定を行わなければなりません。そこで、最近クラウドサービスを使ってインフラを簡単に構築する方法がデータサイエンスの開発者の間で流行っています。本ドキュメントではAlibaba Cloudサービスを使って簡単なサーバの立ち上げとJupyter notebookを使ったデータサイエンス開発環境の設定を紹介させていただきます。

#2. Jupyter notebookとは
Jupyter notebookとは「ブラウザを使って開発できるComputing platform」です。コメントラインと違って、ノートブックと呼ばれる形式です。計算の中間結果とか簡単に視覚化できるし、実行結果を記録しながら、データの分析作業を進めることができ、データサイエンスの研究者達の間でもよく使われます。最近Deep learningを中心としたさまざまなAIツールがJupyter notebook上で簡単に実現できるようになっています（例えばTensorflow、Lua、Caffe、Keras、Theanoなど）。pythonだけじゃなく、C/C++、Javaなどの言語も使えるようになっています。
リンク：http://www.jupyter.org

![image](https://qiita-image-store.s3.amazonaws.com/0/181746/b33cf4ac-e2c5-7e48-325d-5dc623322858.png)

#3. クラウドサーバの立ち上げ
では、Alibaba Cloudサーバを立ち上げましょう。Cloudサーバの立ち上げ方法は下のガイドに従って簡単に行えます。

リンク：　https://jp.aliyun.com/help/product/25365.htm?spm=a3c0i.mja.a1.1.83UW3X

Jupyter notebookの使用感はサーバの性能と通信環境に大きく依存しますので、より高い性能のサーバとネットワーク環境をご利用頂くことをお勧めします。なお、使用目的によって違いがありますが、KerasやCaffeなどのDeep learningツールを使用したい場合、個人の経験上で2コア８GB以上の環境を推薦しています。本ドキュメントはUbuntu OS環境を選択します。


![image](https://qiita-image-store.s3.amazonaws.com/0/181746/499a1f7b-527f-bc63-7a0e-1d76d2678414.png)

#4. Jupyter notebookインストール
サーバの立ち上げが終わったらAlibaba Cloudに接続してJupyter notebookの設定環境を行いましょう。Jupyter notebookの実装はいくつかの方法があります。
・ Anacondaなどのパッケージ
・ ソースコードをインストール
### 4.1 Anacondaで簡単にインストール
Anaconda は Python の分析系環境を構築するためにNumPy、SciPy、matplotlib、 pandasなど様々なパッケージをまとめたディストリビューションです。

####A.インストール前の準備
1.まず、UbuntuOSをアップデートします。

```
$ sudo apt-get update
```

2.PythonとPython関連環境を作りましょう。

```
$ sudo apt-get -y install python python-pip python-dev
```

####B. Anacondaをインストールする
3.Anacondaのダウンロード

```
$ wget https://3230d63b5fc54e62148e-c95ac804525aac4b6dba79b00b39d1d3.ssl.cf1.rackcdn.com/Anaconda3-2.4.1-Linux-x86_64.sh
```

4.インストール

```
$ bash Anaconda3-2.4.1-Linux-x86_64.sh
```

インストール完了後に、以下のコマンドで追加されたパスを有効化する

```
$ source /root/.bashrc
```

5.インストール確認
 
```
$ python --version
>>Python 3.x.x :: Anaconda 3.x.x (x86_64)
```

6.Jupyterのアップロード

```
$ conda update jupyter
$ jupyter notebook
```

ここまでうまくやったらJupyterだけじゃなく、いろんなpythonパッケージの設定できたはずです。ブラウザ関連設定は4.3をご参照ください。

### 4.2 ソースコードでインストール
上記のように、AnacondaはJupyterだけじゃなく、色んなパッケージもインストールしてくれます。もしJupyterだけのインストールがほしい場合は、ソースコードをインストールしてみましょう。

####A.インストール前の準備
1.まず、Ubuntu　OSをアップデートします。

```
$ sudo apt-get update
```
2.PythonとPython関連環境を作りましょう。

```
$ sudo apt-get -y install python python-pip python-dev
```
3.Pythonをインストールするとpipを使えます。pipはパッケージソフトウェアをインストール・管理するためのパッケージ管理システムです。ソースコードのインストールはpipを使って行いますから、まずpipの確認としてバージョンチェックをしてみましょう。

```
$ pip –version
```

####B. Jupyter notebookをインストールする
1.pipでインストール

```
$ pip install jupyter
```
2.これで、自分のPCでJupyterは上手く動くはずです。

```
$ jupyter notebook
```

### 4.3 インターネットから接続してみましょう
1.ここまでは、自分のPCのブラウザでJupyterを使えるはずです。次は外のPCでJupyterを使ってCloudサーバに接続できるように設定してみましょう。まずは設定ファイルを作ります。

```
$ jupyter notebook --generate-config
```
2.ログインパスワードを作ります。Linux コマンドで次に命令を入れます。

```
$:python
>>from IPython.lib import passwd
>>passwd()
>>Enter password:
>>Verify password:
```
```
out>>'sha1:xxxxxxxxxxxxxxxxxxxxxxxxx'
```
ここで暗号化されたログインパスワードを記録します。後の設置で使います。

3.openSSL証明書を作ります。

```
$ openssl req -x509 -nodes -days 10000 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
```
4.最後にconfigファイルを設定します。

```
$ cd {your dir}/.jupyter
$ vim jupyter_notebook_config.py
```
次の内容を設定します。

```
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.password = u'sha1: xxxx your hashed password'
c.NotebookApp.certfile = u' /path/to/your/certificate/mycert.pem'
c.Notebook.App.port = 8888   #自分の好きなポート番号
```

5.（オプション）ファイアーフォールで通信ポートの権限を追加します。 
ファイアーフォールで8888ポート番号を開きます。

```
-A RH-Firewall-1-INPUT -m state --state new -m tcp -p tcp --dport 8888 -j ACCEPT
-A OUTPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
```

### 4.4 Jupyter notebookを楽しみましょう
1.Jupyter notebook始動

```
$ jupyter notebook
```
2.外のPCからブラウザで接続

```
https://ip/of/your/server:8888(your port number)
```

### 4.5 (オプション)Python2(or 3) kenelの設定
Jupyterを初めて設定するとPython2か３のどっちかが使えます。しかし、二つのバージョンを全部使いたい場合はkenelの設定を行う必要があります。ここでAnacondaとpip両方の方法紹介します。

```
Anaconda：　$ conda install jupyter ipykernel
```
```
pip：　https://github.com/ipython/ipykernel
```
Jupyterではほかの言語もサポートしています。詳しい内容は下記のリンクをご参照ください。
リンク：　https://github.com/ipython/ipykernel

![image](https://qiita-image-store.s3.amazonaws.com/0/181746/368674f2-d7ec-0d70-8f17-dc32fc3e6122.png)