Alibaba Cloud で どこでもJupyter notebook(Jupyterhub認証＆Kernel変更機能付き) その1

# Alibaba Cloudで どこでもJupyter notebook(Jupyterhub認証＆Kernel変更機能付き)その1
## どこでもJupyter notebookを利用可能な環境を作ってみた 備忘録
データ分析や機械学習を勉強したり、デモをしているうちに、色んなPC環境にJupyter notebook環境が点在することになった。  
Notebookディレクトリは共通化していたのだが、環境が異なるため動かないものも出てきてしまう始末。
そこで、どこでもJupyter notebookを使える環境が欲しいと考えて作ってみた、作業の備忘録になります。

## 接続例 iPhoneから
画像の例では利用していませんが、SSL証明書とhttpsの利用を当然推奨します。
<img width="414" alt="11FBF88A-D8A7-418B-9211-FC6CC6E95967.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/8d7f4881-45a8-0660-de41-393ed9c68a11.jpeg">

## 仮想環境切替例 iPadから
<img width="966" alt="751EAAD7-6B05-403E-9A6A-508B880EB166.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/40f6539e-f13c-97aa-98e7-6ba59b086fa8.jpeg">


## ご注意
この記事ではAlibaba CloudおよびECSの契約/構築/運用については詳しく説明しません。
公式ドキュメント [ドキュメントセンター > Elastic Compute Service](https://jp.alibabacloud.com/help/product/25365.htm?spm=a21mg.p38356.a1.2.28d41cc81ApadK) や記事／ブログで説明されていますので、それらを参照してください。  
また、ドメインやSSL証明書の取得、httpsの利用についても説明しません。
こちらも同様に、他のドキュメントを参照下さい。

## 要件
1. AIやデータ分析の勉強をするために、自分専用の、どの端末からでも利用可能なJupyter notebookが欲しい  
2. 利用するパッケージに合わせてPython環境は複数欲しい、それを効率的に切り替えできるようにしておきたい  
3. Jupyter notebook(Python/R)以外もデータ分析で使いたいので、Linuxサーバを利用できるようにしておきたい
4. お小遣いの制約が強く交渉が不可能なため、、、できるだけ安く運用したい
5. サーバ構築を勉強したいわけではないので、管理の手間を掛けたくない、楽したい

## 構成
* Alibaba Cloud上のECSを採用しました。(理由は後述）
    * OS CentOS
    * Anaconda3 2019.03
    * Jupyterhub + jupyter_environment_kernels(kernel切替用)

## どうして Alibaba Cloud の ECS※ にしたのか
※ECSはAlibaba Cloudの仮想クラウドサーバサービスの名称です。
私も結構、悩みましたので、色々とご意見はあると思います。  
以下は私の基準ということで、ご容赦ください。  
  
**ECSにした主な理由**
1. 仮想サーバなのにコンソール接続がサポートされている、アウトバンド接続無しでも使える 
2. スナップショットが無料(2019/04時点、将来は有料になるそう)、リストアが楽
3. サーバ監視用のエージェントが用意されている、サーバ監視の手間がかからない
4. SSL証明書とhttps利用を推奨するが、ECSのセキュリティグループ設定を厳密に設定する※ことでセキュリティを多少は確保できる  
※アクセス元のIPのみに限定する、通常はコンソール以外使わない など
## Alibaba Cloud 仮想サーバ ECS を契約
スペックは実行したい内容と予算に応じて選択してください。  
お勧めするとしたら。
使う頻度が少ない、使うかはわからないなら従量課金。
常時動くサーバが欲しいなら、（選択できれば）スーターターパッケージかな。
いずれにしても、契約内容をよく確認して自己責任で選択をお願いします。
  
その他の注意としては、リージョンがアジア東北1(東京）となっている事を必ず確認すること。

## 契約やECSサーバの初期設定については説明割愛します

## 以下は私の環境構築例です
セキュリティ対策が必要な環境では適していない点もありますので、参照して構築される場合は自己責任でお願いいたします。
OSはCentOSを選択し、仮にユーザidをtagucchanとして記載します。
  
## Anaconda をinstallする
[Anacondaの公式ホームページ](https://www.anaconda.com/)から、OSに合わせ、最新のものをダウンロードします。  
作業時点ではAnaconda3-2019.03-Linux-x86_64.shが最新でした。  
~/envディレクトリを作成し、wgetコマンドでダウンロードします。  

```
$ mkdir env  
$ cd env  
$ wget https://repo.anaconda.com/archive/Anaconda3-2019.03-Linux-x86_64.sh
```

他のユーザーも利用できるように/opt配下にインストールします。  
Anacondaが混在できるよう/opt/Anaconda3ではなく、その配下にディレクトリを作る構成にします。  

```
$ sudo mkdir /opt/Anaconda3  
$ sudo chown tagucchan /opt/Anaconda3/  
$ sudo chgrp tagucchan /opt/Anaconda3/  
$ sudo chmod 775 /opt/Anaconda3/
``` 

CentOSでbzip2がインストールされていない記憶があったので、インストールしておきます。

``` 
$ sudo yum install -y bzip2
```

ダウンロードしたファイルをbashで実行しインストーラーを起動します。

```
$ bash ./Anaconda3-2019.03-Linux-x86_64.sh  
```

インストールが開始されます。
  

```
Welcome to Anaconda3 2019.03

In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>>
```

Enterを入力します。 

```
===================================
Anaconda End User License Agreement
===================================

Copyright 2015, Anaconda, Inc.

All rights reserved under the 3-clause BSD License:

```

Spaceキーを押し、ライセンスを読み進みます。  

```
Do you accept the license terms? [yes|no]
>>>
```

ライセンスに合意、yesと入力します。  

```
Anaconda3 will now be installed into this location:
/home/tagucchan/anaconda3

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

[/home/tagucchan/anaconda3] >>>
```

インストール先を聞かれるので、 /opt/Anaconda3/2019.03 と入力します。  
(/opt/Anaconda3までは事前に作成しました)

```
installation finished.
Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
[no] >>>
```

デフォルトはnoです。  
yesにするとbash以外のシェルを利用している際に、シェルを指定しての初期化が実行できます。  

## Anaconda環境の初期設定
bash以外のシェルを利用しているなら、利用しているシェルに合わせること。  
入力オプションがわからない場合は conda init で表示されると思います。  
bashの場合。

```
$ conda init bash
```

## その2 に続く
[Alibaba Cloud で どこでもJupyter notebook(Jupyterhub認証＆Kernel変更機能付き) その2](https://qiita.com/tagucchan/items/deeb89018cf98147fa47)