ここではリモートサーバ上(Cent OS)でJupyter NoteBookを立ち上げ、ローカル環境のWebブラウザからアクセスして使用する方法を記載します。
1.Jupyterのインストールと設定
ここではJupyterのインストールとリモート接続するための初期設定を行います。
いつも通り何かしらの手段(anacondaやpyenv等)で仮想環境を構築後、以下のコマンドでjupyter
をインストールします。
pip install jupyter
その後、以下のコマンドを入力しconfigファイルを作成するとホームディレクトリ以下に~/.jupyter/jupyter_notebook_config.py
が作成されます。
jupyter notebook --generate-config
このファイルの各々の該当行のコメントアウトを外し以下のように編集します。なお、port=58888
は任意の番号で構いません。以降、こちらの番号で一貫して設定を行っていきます。それ以外はコメントアウトされたままで大丈夫です。
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 58888
設定が終わったら、以下のコマンドでjupyter notebookを立ち上げておきましよう。下部にNotebookアクセス用のURLが出てくるはずです。
To access the notebook, open this file in a browser:
file:///mnt/data1/furukawa/.local/share/jupyter/runtime/nbserver-42980-open.html
Or copy and paste one of these URLs:
http://cosmos:58888/?token=528e6ae613ce32560a41602b9989bea493207eef38d2393c
or http://127.0.0.1:58888/?token=528e6ae613ce32560a41602b9989bea493207eef38d2393c
2.Jupyter NoteBookを公開するためのリモートサーバのポートの開放
リモートサーバ上で立ち上げたJupyter NoteBookにアクセスするために必要なポートの開放を行います。尚、OSによってこの方法は異なるため、各々に合わせた設定が必要になります。
ここでは、/etc/sysconfig/iptables
にポート開放のための文を追記することにより実現します。sudo vi /etc/sysconfig/iptables
等で編集可能な上でファイルを開き、以下の文を追記します。
-A INPUT -p tcp --dport 58888 -j ACCEPT
次に、以下を実行し編集を反映させます。
service iptables restart
最後に以下のコマンドで58888のポートが解放されたかを確認して完了です。jupyter notebookが立ち上がっており、かつポートが解放されていれば、以下のようになっているはずです。
# lsof -i -P
~
jupyter-n 42023 user 5u IPv4 49594839 0t0 TCP *:58888 (LISTEN)
jupyter-n 42023 user 6u IPv6 49594840 0t0 TCP *:58888 (LISTEN)
~
3.リモートサーバで立ち上げたJupyterにローカル環境のブラウザから接続
リモートサーバ側でnotebookを立ち上げた後、URLをコピペしてブラウザに張り付ければアクセスできます。
ここで幾つかの想定されるエラーがあり、私も遭遇しました。
想定されるエラー1
DNS_PROBE_FINISHED_NXDOMAIN
がブラウザ上で出るエラーです。これはURLをリモートサーバのホスト名で指定してアクセスした際に起こるものでDNSサーバが名前解決出来ていないことによって起きています。DNSサーバに接続できているかを見直すか、直接IPアドレスを指定してURLを指定すると回避できます。
想定されるエラー2
エラー1を直したところ、今度はERR_CONNECTION_REFUSED
のエラーが出ました。何かしらが原因でアクセスが拒否されています。
キャッシュ周りが原因でエラーが起こっているのですが、詳細な原因は不明なままでした。対策方法としては、ここのさいとにあるように、以下をブラウザのURL欄に貼り付け、キャッシュの削除を行います。
chrome://settings/clearBrowserData
接続完了
無事接続できました。