読者です 読者をやめる 読者になる 読者になる

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がちゃんと動くところまで確認できました。