Cloud9で簡単Jupyter環境構築


# **超簡単設定**

超簡単バージョンを作りました。
https://github.com/y-sama/cloud9
主に、Jupyter, Pandas, Scikit-learn, tensorflowが使えるようにしています。

```bash
git clone https://github.com/y-sama/cloud9.git
bash cloud9/init.sh
```

# Introduction

最近某所でオンラインIDE [Cloud9](https://c9.io/)にJupyterをのせられるという話を聞きました。
[先行記事](http://qiita.com/piruty_joy/items/f11b7aef611055041e40)がありますが、自分用にまとめ直します。

セキュリティ無視の最速設定なら10分弱、色々設定しても30分かからないと思います。
Cloud9で使える無料DISKは2GBですが、1.6GBほど使います。残念ながらディスクスペースを食うのでTensorflowはインストール不可です。
またシングルコアなので本気計算はできませんが、Jupyterに興味があるとか、pandasを試したいとか、scikit-learnのチュートリアルしたいとかなら十分です。

# Cloud9のアカウントを作る

メールアドレスだけあればOKです。
https://c9.io/signup

適当に名前とか入れるだけです。

ここまで**一分**

# workspaceを作る

適当なworkspaceを作ります。
一応Private設定、Templateはpythonにしていますが、別になんでもいいです。
仮想マシンが立ち上がるのにちょっとかかります。

ここまで**三分**

# 最速設定

workspaceの画面が立ち上がったら、画面の下の方にbashコンソールがあるので下記Scriptをコピペします。

```bash
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
pyenv install anaconda3-4.0.0
pyenv rehash
pyenv global anaconda3-4.0.0
```

anacondaのダウンロードが入りますが３分くらいで終わります。

ここまで**6分**

### Jupyter起動

```bash
jupyter notebook --ip 0.0.0.0 --port 8080 --no-browser
```

セキュリティ超甘ですがとりあえずならこれで動きます。

`https://<workspace>.<username>.c9users.io`

からJupyterにアクセスできます。
httpsなのでそこだけ注意。

ここまで**7分**
最速なら10分かからないで環境が用意できます :laughing: 

# Anacondaの設定

Anacondaじゃなくてminicondaを入れている場合はこれくらい入れておけば多分OK。

```bash
conda install jupyter scikit-learn bokeh seaborn pandas dask networkx numba pep8 pillow scikit-image sqlalchemy sqlite statsmodels sympy xlrd xlsxwriter xlwt
```

Anaconda周りはこれくらい設定しておけばいいです。

```bash
conda update conda #condaのバージョンはよくあがるので、一応チェックしておく
echo 'alias activate="source $PYENV_ROOT/versions/anaconda3-4.0.0/bin/activate"' >> ~/.bashrc
source ~/.bashrc
conda install seaborn # anacondaに入っていないので入れておく
```

# Jupyterの設定

**Cloud9はどこからでもアクセスできてしまうので、passwordくらいは設定しておいた方がよいです。**

[参考](http://qiita.com/y__sama/items/17aedf0c05187edd61c3)

- コンフィグファイルを作る
- Jupyterアクセス時のパスワード用のハッシュ文字列を生成する。

```bash
mkdir ~/workspace/jupyter
jupyter notebook --generate-config
#>>> Writing default config to: /home/ubuntu/.jupyter/jupyter_notebook_config.py
python -c "from notebook.auth import passwd;print(passwd())" 
#>>> Enter password: #Jupyterのアクセス時に使うパスワードを入力する 
#>>> Verify password: 
#>>> 'sha1:......' #sha以降をコピーしておく
```

- jupyter_notebook_config.pyを編集する。

```bash
vi ~/.jupyter/jupyter_notebook_config.py
```

### jupyter_notebook_config.pyの編集箇所
 
|変更箇所|初期値|変更後|
|:--|:--|:--|
|c.NotebookApp.ip|'localhost'|'*'|
|c.NotebookApp.notebook_dir|null|'/home/ubuntu/workspace/jupyter'|
|c.NotebookApp.open_browser|True|False|
|c.NotebookApp.port|8888|8080|
|c.NotebookApp.password|null|'sha1:......' #さっきのハッシュ文字列|

これもセキュリティ的には甘いので、常にJupyterを立ち上げておきたいのなら、IPアドレスを制限するとかしてください。

# startupの設定

`~/.ipython/profile_default/startup`の中に.pyや.ipyを配置しておくと、Ipythonのkernelスタート時に読み込まれます。
`00_start.ipy`のようなファイルを置いておけば、Jupyter立ち上げ時にいちいち打ち込まなくていいので楽です。.ipy形式はipythonのマジックコマンドも書けます。

```00_start.ipy
import os,sys
import numpy as np
import pandas as pd
import seaborn as sns
%matplotlib inline
```

# extensionのインストール

IPython拡張機能詰め合わせ、プレゼン用の拡張機能RISE、Jupyter内の文書検索jupyter_cmsを入れておきます。

```bash
cd ~/
git clone https://github.com/ipython-contrib/IPython-notebook-extensions
cd IPython-notebook-extensions
python setup.py install
cd ../
git clone https://github.com/damianavila/RISE
cd RISE
python setup.py install
pip install jupyter_cms
jupyter cms quick-setup --sys-prefix
```

IPython-notebook-extensionsの[Qiita記事](http://qiita.com/sasaki77/items/30a19d2be7d94116b237)
Drag&Dropとか便利です。

# 起動

```
jupyter notebook
```

ファイルをjupyter.shとかで保存して一回Runしておくと、次回以降はlast Run一発で起動できるので楽です。

`https://<workspace>.<username>.c9users.io`でJupyterに入れます。

おもちゃとしては最高です。