はじめに
先日GCPのセットアップ時にJupyter Notebookの導入で詰まってしまったのと、参考にしたブログが少し古かったので自分用にこちらに方法をまとめておきます。
既にAnacondaを導入していたので、Dockerを使わずにAnaconda上でJupyter Notebookを動かします。
Docker経由の環境構築はこちらなどを参考にしてみてください。
実行環境
- n1-standard-1(vCPU x 1、メモリ 3.75 GB)
- Ubuntu 16.04.3
- Anaconda 3.4.0
Anacondaを入れてない人は
$ wget http://repo.continuum.io/archive/Anaconda3-4.0.0-Linux-x86_64.sh
$ bash Anaconda3-4.0.0-Linux-x86_64.sh
でインストールして
Do you wish the installer to prepend the
Anaconda3 install location to PATH
in your /home/haroldsoh/.bashrc ?
[yes|no][no] >>> yes
と答えてPATHを通して
$ source ~/.bashrc
とすれば使えます。
実際にJupyter Notebookを導入してみる
Jupyter Configの作成
まずはVMを立ち上げ、Jupyter NotebookのConfigファイルを作ります。
$ cd ~
$ jupyter notebook --generate-config
$ cd .jupyter
次にSSL用の鍵を作成します。
実行ディレクトリに生成されるので.jupyterに移動していることを確認してください。
$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mykey.key -out mycert.pem
実行すると組織名やらメールアドレスやら聞かれるので適当に入力。
公式な署名ではないので、個人利用にとどめましょう。
最後にpythonでログイン用のパスワードのハッシュを作ります。
まずはpythonインタープリターに切り替えます。
$ python
pythonインタープリターが立ち上がったらハッシュを作成しましょう。
>>> from notebook.auth import passwd; passwd()
設定したいパスワードを尋ねられるので、2回入力するとsha1ハッシュが生成されます。
このパスワードは最後Jupyter Notebookへのログインに使うので忘れないように。
sha1はこと後すぐ使うのでクオート記号(')ごとコピーしておきます。
私は当時pythonコードの実行方法すら知らなかったので、そんな人のために画像も載せておきます。
こんな感じでpythonインタープリターに入ると白い文字になり、>>>
が左端に現れるので、そこでfrom notebook....(以下略)
を入力です。
Jupyter Configの設定
次に実際にConfigを設定していきます。
まずはvi
コマンドでConfigファイルを開きます。
$ cd .jupyter
$ vi jupyter_notebook_config.py
するとConfigファイルが開くので以下の項目を追加していきます。
vi
コマンド中はi
でインサートモードになり、終了時はesc
ボタンを押した後:wq
で「保存して終了」が行えます。
なお、下記のusername
は自分のアカウント名を入力してください。
(VMを開くと出るhogehoge@instance-1:
のhogehogeが該当)
# OpenSSLで作ったファイルへのパス
c.NotebookApp.certfile = u'/home/username/.jupyter/mycert.pem'
c.NotebookApp.keyfile = u'/home/username/.jupyter/mykey.key'
# どのIPアドレスからのアクセスも受け入れる
c.NotebookApp.ip = '0.0.0.0'
# passwd()コマンドで作ったパスワードのハッシュを貼る
c.NotebookApp.password = u'sha1:b2e7b90...'
# 勝手にブラウザを起動しない
c.NotebookApp.open_browser = False
# 外部からアクセスするためのポート番号を指定する
c.NotebookApp.port = 8888
最後にJupyter Notebookを起動します。
$ cd ~
$ jupyter notebook
VMインスタンスのファイアーウォールの設定
Jupyter Notebookを起動したらCompute Engineのコンソールを開きます。
現在Jupyter Notebookを導入しようとしているインスタンスの詳細を開き、ファイアーウォールでHTTPSトラフィック
が許可されているか確認します。
許可されていなければ、上部の青字の編集
から許可するよう変更してください。
今確認したファイアーウォールの一つ上、ネットワーク インターフェースのdefault
をクリックし、設定画面に進みます。
ページ遷移後中断まで移動し、ファイアウォールルールを追加します。
設定画面では、以下のように設定します。
・ターゲットタグ https-server
・ソースタグ 0.0.0.0/0
・指定したプロトコルとポート tcp:8888
設定後、ファイアーウォールルールに追加されていることを確認しましょう。
以上でコンソール上でのファイアーウォールの設定は終了です。
Jupyter Notebookに接続する。
やっとJupyter Notebookに接続できますね。
ということでコンソールから接続してみましょう。
VMインスタンスのダッシュボードから、先ほどのインスタンスの外部IP
をクリックし接続してみましょう。
(この時Jupyter Notebookが起動していない場合は、ssh接続し、$ jupyter notebook
で起動してください。)
やっとJupyter Notebookに接続できましたね。
残念ながらアクセスエラーが発生しましたが、大丈夫です。
Jupyterは設定したポート番号(8888)でサービスをしているのに、今開いたブラウザは標準のHTTPSポートにアクセスしているのでエラーが発生しているそうです。
なので、ポート番号を指定して再度アクセスしてみます。
https://35.***.102:8888/
これはJupyter Configで作成した署名が公式なものではないので、「怪しいサイトかもしれませんよー」とブラウザが教えてくれているそうです。
もちろん怪しいサイトではないので、詳細設定
を押してアクセスします。
すると、パスワードを求められるので、Jupyter Configでsha1ハッシュを作成する際に利用したパスワードを入力してください。