昨天發了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/