最小限の持ち物で勉強できるのか？iPadで開発 《第3弾》~救世主現る~

# 関連記事

[最小限の持ち物で勉強できるのか？iPadで開発 《第1弾》](https://qiita.com/ryotafull/items/6a0c28c0c87ac8e21bd8)
[最小限の持ち物で勉強できるのか？iPadで開発 《第2弾》~SSHで接続~](https://qiita.com/ryotafull/items/8a395538c711d9950ef2)


# おさらい
## 目的
- 机の上には最小限のものだけで勉強する！！
- iPad Pro でどこまで開発の勉強ができるか？

## こんな人向け
- iPad ひとつでなんでもやりたい人
- 持ち歩くものを減らしたい人
- PCの買い替えはもう嫌な人
- 新しい勉強の仕方を開拓したい人

# 環境
- iPad Pro 2018 11inch
- Apple 純正 Smart Keyboard
- モバイルルータ
- さくらのVPS　（CentOS7）

# 更新が遅れていた理由
簡単です。全部うまくいかなかったからです(つω-｀)
でもご安心ください。iPad に救世主が現れました。

# 救世主とは
iPad OS です！！
さらにいうと、、、
**Safari が PC版の表示** となったことです。

# 何がそんなにいいの
何がそんなにいいのと疑問かと思いますが、
今までですと、web ブラウザ経由で使う
**Cloud9** や **Jupyter Notebook** での操作がうまくいかなかったのですがこれが改善されます！
（Smart Keyboard のカーソルの操作が効かないなど苦労しました。。。）
ということで今回は Jupyter Notebook を表示させてみたいと思います。

# 手順
## VPSを立ち上げる  
さくらのVPSコントロールパネルに入り「起動」を押す
## SSH クライアントを用いてサーバーに入る
**現在のおすすめ: [Termius](https://apps.apple.com/jp/app/termius-ssh-client/id549039908)**  
セキュリティを考え鍵認証でのSSH接続にしたときに簡単にできました
## Jupyter のイメージを取得する  
Docker が入っていることの確認  

```
$ docker --version
Docker version 1.13.1, build b2f74b2/1.13.1
```
イメージをダウンロード

```
docker pull jupyter/datascience-notebook
```

## パスワードを作成  
ハッシュを作るために仮起動（--rm つけるのでコンテナから出たら勝手に消えます）

```
$ docker run -it --rm  jupyter/datascience-notebook /bin/bash
```

jovyan@xxxxxxx のようにコンテナ内に入れたら、
コンテナ内の Python3 をお借りしてパスワードのハッシュ作成（今回は `test` 、お好きなもの安全なものに変えてお使いください）

```
$ python3 -c 'from notebook.auth import passwd;print(passwd())'
Enter password: 
Verify password: 
sha1:43dd030f7f29:bfa2d32e343582447c4ddf176911a8417bc64cc0 ←これをあとで用いる
```
コンテナから抜ける（Control+D でも可）

```
$ exit
```
## 起動！  

パスワードには先ほど作成したハッシュを用います

引数の簡単な説明
-d: バックグラウンドで動かすよ
--name: コンテナ名は jupyter という名前だよ
-p: 外部からポート 8888 にアクセスされたらコンテナ内の 8888 に繋いだことになるよ
-u: root ユーザーで使うよ

```
$ docker run -d --name jupyter -p 8888:8888 -u root jupyter/datascience-notebook start-notebook.sh --NotebookApp.password='sha1:43dd030f7f29:bfa2d32e343582447c4ddf176911a8417bc64cc0'
```

一応動いてることの確認

```
$ docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
5f9c6b139eae        jupyter/datascience-notebook   "tini -g -- start-..."   3 seconds ago       Up 2 seconds        0.0.0.0:8888->8888/tcp   jupyter
```
## ドキドキのブラウザからアクセス
自分のサーバーの IPアドレス:8888でアクセスすると。。。。
できました(ﾉ∀＼*)
<img width="465" alt="A5773342-7B6E-4345-A88F-671C73545C05.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/162539/d9f8c09b-ba64-618b-e2b1-03e9ea9d5345.jpeg">
パスワード `test` を入れると。。。。
入れました！
<img width="1194" alt="2DBEB3DB-6BF2-4861-8301-C8267EBC49AE.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/162539/f1e87e79-fab8-2a0b-7bb5-f4e456e90cbc.jpeg">

Python 使えるかの確認
上記の矢印で示したように「New」から「Python 3」を選ぶと
<img width="1194" alt="C33B7395-523F-4359-AC86-742EF21EF398.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/162539/3e6af674-35eb-c464-3bea-ca3a050b708b.jpeg">

思った通りの挙動に！！！最高！！

## 補足） xxx.xxx.xxx.xxx:8888 で入れなかった場合
ポートが解放されてない可能性があります。

まずファイヤーウォールの設定を確認

```
$ sudo firewall-cmd --list-all
[sudo] password for rgoto: 
public (active)
~ 抜粋 ~
  ports: 8080/tcp 8888/tcp
```

ここに 8888/tcp がないと拒否されています。追加しましょう。
（docker run のポートフォワードで好きなポートを選べますので、推測されないものを使う方が安全だと思います。）

```
$ sudo firewall-cmd --add-port=8888/tcp --permanent
```
（/tcp 忘れると追加できなくて焦ります）

# まとめ
やっとまともに使えるようになったと思います！
iPad の CM で少年が
「What's a computer?」
といったようにドヤれるよう試行錯誤してみます。

# 参考
[DockerでJupyter Notebookを使う](https://qiita.com/Brutus/items/a08c210b87ccb39379c2)
[さくらのVPSでCentOS7のポートを開放する](https://www.t3a.jp/blog/infrastructure/centos-port-open/)