搭建Jupyter Notebook服務器


昨天發了Jupyter的使用,補一篇Jupyter服務器的搭建~

一、搭建Jupyter

1.安裝

使用virtualenv建虛擬環境。在虛擬環境中安裝jupyter、matplotlib等等需要的庫。這里不贅述了。

2.配置

為Jupyter 相關文件准備一個目錄

mkdir /data/jupyter
cd /data/jupyter

建立一個目錄作為 Jupyter 運行的根目錄

mkdir /data/jupyter/root

我們以需要密碼驗證的模式啟動 Jupyter,所以要預先生成所需的密碼對應的密文。
使用下面的命令創建一個密文的密碼

python2

python -c "import IPython;print IPython.lib.passwd()"

python3

python -c "import IPython;print(IPython.lib.passwd())"

執行后需要輸入並確認密碼,然后程序會返回一個 'sha1:...' 的密文,留好了,我們接下來將會用到它。

查看用戶目錄 ~/.jupyter 路徑下是否存jupyter_notebook_config.py 文件。若不存在,產生此文件。

jupyter notebook --generate-config

編輯此文件,在最后寫入

c.NotebookApp.ip = '*'  # 允許訪問此服務器的 IP,星號表示任意 IP
c.NotebookApp.password = u'sha1:xxx:xxx' # 之前生成的密碼 hash 字串
c.NotebookApp.open_browser = False # 運行時不打開本機瀏覽器
c.NotebookApp.port = 8888 # 使用的端口
c.NotebookApp.enable_mathjax = True # 啟用 MathJax

3.運行

這時采用 IP:端口號 或者 域名:端口號的方式就可以訪問正常使用了。

域名訪問默認80端口,接下來我們使用最常用的Nginx做代理,實現直接使用域名進行訪問,隱藏端口信息。先對Jupyter進行以下修改

將配置文件ip改為只有本機才能訪問

c.NotebookApp.ip = '0.0.0.0' # 127.0.0.1 也可以的 

后台運行起來

nohup jupyter notebook > /dev/null 2>&1 &

二、Nginx代理

1.安裝與設置

$ apt-get install nginx

2.查看版本

$ nginx -v

3.啟動停止

安裝完成后,使用 nginx 命令就可以直接啟動 Nginx

$ nginx 

也可以使用服務器

$ service nginx start
$ service nginx stop
$ service nginx restart

訪問 http://YOUR_IP 或者 域名 就可以看到Nginx的測試頁面。

4.配置

配置文件在nginx目錄下,nginx.conf文件中可以看到代理的部分在在這里 /etc/nginx/sites-enabled/defalut

$ sudo vim /etc/nginx/sites-enabled/defalut  

修改其中的 location / 部分。

server {
    server_name DOMAIN IP_ADDRESS; # 服務器域名和 IP 地址
    listen 80;
    ...
    ...
    location / {
        proxy_pass http://127.0.0.1:YOUR_PORT
    }
}

按照上面的方法配置 Jupyter Notebook,如果僅僅對端口號進行代理轉發,會出現 terminal 可以正常創建而 notebook 無法正常創建或者使用的情況。因為 Jupyter 會對 http 請求進行判斷,所以反向代理時需要設置正確的信息。正確配置 nginx 反向代理的方式如下:

server {
    server_name DOMAIN IP_ADDRESS; # 服務器域名和 IP 地址
    listen 80;
    ...
    ...
    location / {
        proxy_pass http://127.0.0.1:YOUR_PORT/;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_redirect off;
    }
}

重啟Nginx服務讓設置生效。

$ sudo nginx -s reload

一切正常,晚上吃雞!不不不,開始干活!

5.可選

目前的URL為 http://dyan.club/tree?,可以在 jupyter_notebook_config.py 中增加 base_url 作為url的路徑,來表示服務器上的Jupyter目錄的地址。更新后的地址為 http://dyan.club/ipython/tree?

c.NotebookApp.base_url = '/ipython/'
--制定url的path,默認是根目錄

目前沒有啟用ssl,安全性不夠,也可以增加ssl協議增強安全性。


參考文獻
[1] https://bitmingw.com/2017/07/09/run-jupyter-notebook-server/
[2] https://jupyter.readthedocs.io/en/latest/install.html
[3] http://blog.takwolf.com/2016/10/19/setup-nginx-on-ubuntu/index.html

拓展閱讀
[1] http://nbviewer.jupyter.org/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM