VPS作業記録8
今回は、nginxの設定します!
設定の目標は、
・静的なファイルをちゃっちゃと返す
・/jupyterにアクセスしたら、jupyterにアクセスできる
・/djangoにアクセスしたら、gunicornで動いているdjangoにアクセスできる(保留)
・/jupyterと/djangoのところに、Basic認証をつけたい
あたりかなと思います。
お供には、nginx実践入門です。
amzn.to
Jupyter
公式ドキュメント:Jupyter Documentation — Jupyter Documentation 4.1.0 documentation
参考1:Jupyter notebookをリモートサーバで実行する - Qiita
まずは、jupyterのインストールから、
# pip install jupyter
で終了。
とりあえず、
$ jupyter notebook
して、
$ wget localhost:8888
して、できあがったindex.htmlを覗いてみると、なんか動いてるっぽい。
jupyterの設定します。
Running a notebook server — Jupyter Notebook 5.0.0.dev documentation
$ jupyter notebook --generate-config
~/.jupyterにconfigのファイルができあがるので、そこでいろいろ設定していきます。
基本はコメントアウト外して、そこをちょろっと書き換える。
c.NotebookApp.port = 8888 c.NotebookApp.open_browser = False c.NotebookApp.base_url = '/jupyter/' c.NotebookApp.base_project_url = '/jupyter/' c.NotebookApp.webapp_settings = {'static_url_prefix':'/jupyter/static/'}
とかにしておく。
で、
$ cd ~ $ mkdir jupyter $ cd jupyter $ nohup jupyter notebook &
とかして、とりあえず、起動させっぱなしにする。
つづいて、nginxの設定。
前回までの設定は、
... 省略 ... http { ... 省略 ... server { listen 80 default_server; root /data/html; error_page 404 /404.html } }
だったので、これに、locationを加える。
... 省略 ... http { ... 省略 ... server { listen 80 default_server; root /data/html; error_page 404 /404.html location /jupyter/ { proxy_pass http://127.0.0.1:8888; } } }
これで、nginxをリロードする。
んで、ブラウザで、自分のIPアドレス/jupyter/にアクセスして、jupyter notebookか起動していることを無事確認。
ということで、前回してみたかったBasic認証をつけます。
nginx実践入門だと、1ページぐらいにさらっと書いてあるだけですが、
nginxでBasic認証をする - Qiitaも合わせて読めば、手順までわかります。
「承認領域名」は、わりと任意についていい名前のようです(たぶん)。
/etc/nginxに.htpasswdファイルを生成しておく。
# yum install httpd-tools してからの # cd /etc/nginx # htpasswd -c .htpasswd hoge
.htpasswdは、ファイル名なので、できたかどうかは、ls -aで確認できる。hogeはユーザー名(なので、実際は変更しておく)。
で、さらにnginxの設定ファイルをさらに書き換える。
... 省略 ... http { ... 省略 ... server { listen 80 default_server; root /data/html; error_page 404 /404.html location /jupyter/ { auth_basic "jupyter notebook"; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://127.0.0.1:8888; } } }
こんな感じ。
あとは、djangoとGunicornへのリバースプロキシとしての設定もかいておきたいところですが、
まだ、djangoとかの準備ができてないので、今日は、ここまで。
追記
jupyterのページにはアクセスできることは確認してたけど、
カーネルを起動するところまでは確認してませんでした。
カーネルが立ち上がらないことが判明・・・なぜ・・・。
ダメだったので、ここ(proxy - How to configure IPython behind nginx in a subpath? - Stack Overflow)を参考にproxy_header_setを変えます。
けど、いまいち、なにしてるんだか、よくわかってなくて、サーバーの設定って難しい・・・。
... 省略 ... http { ... 省略 ... server { listen 80 default_server; root /data/html; error_page 404 /404.html location /jupyter/ { auth_basic "jupyter notebook"; auth_basic_user_file /etc/nginx/.htpasswd; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Origin ""; proxy_pass http://127.0.0.1:8888; } } }
一応、これで、iPythonがちゃんと動くところまで確認できました。