Amazon lightsailでJupyterを起動させてみた

AWSから「lightsail」というVPSサービスが開始されたので、お試しとして使ってみた。
使ってみるついでにディープラーニングの学習環境として使いたかったので
Jupyterを入れて起動させてみた。その手順をここにまとめておく。

ちなみに学習するのはオライリーの「ゼロから作るDeep Learning」。
すごくわかりやすいのでおすすめ！
![picture978-4-87311-758-4.gif](https://qiita-image-store.s3.amazonaws.com/0/152303/b2a8d740-f91c-5864-4a8f-8c726e220fb2.gif)
<https://www.oreilly.co.jp/books/9784873117584/>

## 前提
AWSアカウントをお持ちの方

## lightsailの起動
lightsailのページへGo
![chrome_2016-12-01_20-45-27.png](https://qiita-image-store.s3.amazonaws.com/0/152303/9190dda4-efb7-a1a7-a7e0-2b29f092d2da.png)

「Base OS」をクリック。
「Ubuntu」を選択して「Apps + OS」をクリック
![chrome_2016-12-01_20-47-06.png](https://qiita-image-store.s3.amazonaws.com/0/152303/5f8ee585-1560-f1d7-1bf4-9002530f44e7.png)

「Nginx」をリバースプロキシとして使いたいので「Nginx」を選択
![chrome_2016-12-01_20-47-31.png](https://qiita-image-store.s3.amazonaws.com/0/152303/c974464d-e9af-6b36-b653-334016409d93.png)

料金プランはもちろん一番安い「$5」！
![chrome_2016-12-01_20-48-58.png](https://qiita-image-store.s3.amazonaws.com/0/152303/ab1c9d04-3a3c-05ab-99b1-533159b5de01.png)

今回作成するインスタンスの名前を指定。
今回は「python-deeplarning-jupyter」で作成（実際作ったときはdepplarningとスペルミスしてる…）
名前が決まったら「Create」をクリック！
![chrome_2016-12-01_20-49-58.png](https://qiita-image-store.s3.amazonaws.com/0/152303/1b7b7081-8a02-0025-d97e-cbf5a1567199.png)

インスタンスができた！作成したインスタンスのリンクをクリック。
![chrome_2016-12-01_20-51-07_Ink_LI.jpg](https://qiita-image-store.s3.amazonaws.com/0/152303/40a91209-f441-9192-dfef-31a6ee7c5233.jpeg)

## インスタンスの設定
ブラウザでJupyterを見たいわけなので、そのための設定をしていく。

### Elastic IPの付与
毎回IPが変わるとブラウザアクセスの際、めんどくさいのでElastic IP（固定IP）をインスタンスに付与する。

下記画面のNetworkingをクリック。
![chrome_2016-12-01_20-52-09_Ink_LI.jpg](https://qiita-image-store.s3.amazonaws.com/0/152303/993855f2-18cb-e31a-0547-ea4310500197.jpeg)

Public IPのところの「Create Static IP」をクリック
![chrome_2016-12-01_21-09-23.png](https://qiita-image-store.s3.amazonaws.com/0/152303/ce898749-f64f-a52e-99ae-fc4e87d8f0c6.png)

Static IPの名前をつけてとのことなので、適当に名前を付けて「Create」をクリック！
![chrome_2016-12-03_20-08-35.png](https://qiita-image-store.s3.amazonaws.com/0/152303/72a6f682-223e-3a08-5b02-d6a180a7e31e.png)

これで固定IPがもらえた！

## Nginxの設定
さぁ、次はサーバーに入ってNginxの設定だ！

サーバーへログインするためにSSHしたいが、めんどくさいのでWebコンソールからログインしよう。
下記画面の「Connect using SSH」をクリック。
![chrome_2016-12-01_20-52-09.png](https://qiita-image-store.s3.amazonaws.com/0/152303/40e7ab6f-d7a0-9879-733e-e9168ce12edf.png)

ここからはコンソールでの作業。
Nginxの設定ファイルを下記のように書き換える。

```
sudo vim /opt/bitnami/nginx/conf/bitnami/bitnami.conf
===
upstream jupyter {
    server localhost:8888;
}

server {
    listen      80;
    server_name localhost;
    
    allow xxx.xxx.xxx.xxx;
    deny all;
    
    location / {
        proxy_pass http://jupyter;
        
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Origin "";
    }
}
===
```

JupyterをNginx経由で閲覧するための設定。
他人には当然見られたくないので

```
allow xxx.xxx.xxx.xxx;
```
のところで、自分のPCのグローバルIPアドレスを指定する。

locationのところの設定は、JupyterはWebSocketを使用するため、WebSocketの設定をする。

ここまで出来たらNginxの再起動。エラーが出なきゃおｋ

```
sudo /opt/bitnami/ctlscript.sh restart nginx
```

ここまで出来たらブラウザで、Elastic IP（固定IP）にアクセスしてみる。

```
http://xxx.xxx.xxx.xxx
```

下記画面が表示された成功！
![chrome_2016-12-01_20-57-32.png](https://qiita-image-store.s3.amazonaws.com/0/152303/5c003280-f880-48b4-fbb2-49fbfbead304.png)


## Jupyterの設定
まずはJupyterをインストールする前に、pipのインストールを行う。
オライリーのディープラーニングの本はPython3が前提なのでPython3用を使う。

```
curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
curl -kL https://bootstrap.pypa.io/get-pip.py | sudo python3
```

次にJupyterのインストール。

```
pip3 install jupyter
```

Jupyter内で生成されるファイルの保存先を作成。
どこでもよい。

```
mkdir ~/jupyter
```

Jupyterの設定ファイルを生成。
そして設定ファイルの編集。

```
jupyter notebook --generate-config

vim ~/.jupyter/jupyter_notebook_config.py
===
# 179行目 Jupyterのファイル保存先ディレクトリの指定。上記で作成したディレクトリ。
c.NotebookApp.notebook_dir = '/home/bitnami/jupyter'
# 185行目 Jupyterを起動するとブラウザが起動して邪魔なのでOFF
c.NotebookApp.open_browser = False
===
```

ここまで来たらJupyterを起動しよう。

```
jupyter notebook
```

さっきNginxの動作確認の時に見たページにブラウザでアクセス

```
http://xxx.xxx.xxx.xxx
```

下記画面が出たら完了！
![chrome_2016-12-03_20-07-16.png](https://qiita-image-store.s3.amazonaws.com/0/152303/fafc6cd7-e9db-d4ee-892a-3572b5bbb597.png)

## 最後に
ということで、lightsailでJupterを起動させることができた。
ほかのAWSのサービスは従量課金だが、このlightsailは定額なので初心者でも安心。
VMは重いから嫌だってひとにはおすすめ。