jupyter notebook服務端安裝——基於Python3、nginx

引子

jupyter notebook(原名ipython)可是科學計算界的必備工具,友好的界面,方便的交互,支持Markdown,集中的極客們想要的一切特點,同時又製作的如此優雅和精美,真是難能可貴的又好看又好用的工具。

官網

Project Jupyter

並行計算支持

這貨支持並行計算,而且很全面,像MPI,OpenMP等,支持部署在集群上,具體可以參考文檔

多語言支持

這裡的語言不是英語、漢語,而是不同的編程語言,包括在科學界很流行的julia、Matlab、C、C#等,超多支持,令我震驚了,具體可以看這個表。

桌面端的環境搭建

按照官網的說法,極其推薦 Anaconda,有需求的可以直接到 Anaconda官網下載可用的安裝包,支持win、Linux、MacOS,真是除了手機都支持O(∩_∩)O~。

jupyter伺服器搭建

網上搜了一下jupyter伺服器的搭建,官方給出了很好的多用戶服務端jupyterhub,但我的需求就是在VPS搭建好一個jupyter服務網頁,完全自己用,所以搭建jupyterhub有些浪費資源,轉而去尋找簡單的jupyter服務搭建方案,別說,官網也寫好文檔給我們用了,但文檔是用英文寫的,看的不舒服,這裡把要點寫出來,供參考。

英文文檔地址在此,英文好的小夥伴可以直接去實施。

安裝 jupyter notebook

下載minicanda,並安裝(miniconda就是一個精簡版的Anaconda),下載地址

對於python3,就要對應下載Miniconda3,相似的是對於python2,就要下載Miniconda2

wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh

然後,安裝Miniconda,Miniconda包含了一個完整的python3版本,如果加入系統的環境變數(~/.bashrc 中加入export語句,詳情可以谷歌bashrc),那麼系統默認的python就是剛剛安裝的miniconda中的python,這樣做的好處是,直接在系統中使用pip安裝需要的包之後,在網頁上的jupyter也有了相應的包,很是方便。

bash Miniconda3-latest-Linux-x86_64.sh

之後就可以使用conda的包管理系統,安裝需要的包

conda install ipythonconda install jupyter

對於python3,需要安裝jupyter這個包,如果是Python2,需要安裝ipython-notebook的包

至此,jupyter的安裝已經完成。

配置 jupyter notebook

下面的命令會在~/.jupyter 創建一個配置文件jupyter_notebook_config.py

$ jupyter notebook --generate-config

可以配置的項目有很多,有時間的話,可以仔細閱讀配置文件中的注釋,寫的很清楚。

這裡要強調的是創建密碼的方法,總不想讓自己的jupyter伺服器被其他人使用吧。

執行下面語句

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

然後將得到的sha1複製到配置文件jupyter_notebook_config.py 中的相應位置

c.NotebookApp.password = usha1:2e2e65056049:3ea8b0d906e17c7d45158206c333d62b785dfcdb

配置文件中,還有幾處要修改

c.NotebookApp.ip = 127.0.0.1c.NotebookApp.allow_origin = *c.NotebookApp.open_browser = Falsec.NotebookApp.port = 8888

如此這般之後,配置完成咯

運行

執行命令

jupyter notebook

就可以看到

[I 21:09:34.905 NotebookApp] Serving notebooks from local directory: /home/ipython/run_jupyter[I 21:09:34.906 NotebookApp] 0 active kernels[I 21:09:34.906 NotebookApp] The Jupyter Notebook is running at: http://127.0.0.1:8888/[I 21:09:34.906 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

這是尚不能打開網頁,因為是配置在127.0.0.1上的,只有本機可以訪問。

配置nginx

nginx是一個高效的伺服器,著名的LNMP中的N,相信很多在VPS搭建過網站的小夥伴一定不陌生。

我假設你已經安裝好了nginx,如果不會安裝可以參考 lnmp.org

nginx創建一個虛擬主機vhost,然後配置文件參考下面

upstream notebook { server localhost:8888;}server {listen 80;server_name xxx.xxxx.com;rewrite ^/(.*) https://xxx.xxxx.com/$1 permanent;}server{listen 443 ssl;index index.html index.htm index.php default.html default.htm default.php;server_name xxx.xxxx.com;root /home/wwwroot/xxx.xxxx.com; ssl_certificate /etc/letsencrypt/live/xxx.xxxx.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/xxx.xxxx.com/privkey.pem; ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;location / { proxy_pass http://notebook; proxy_set_header Host $host;}location ~ /api/kernels/ { proxy_pass http://notebook; proxy_set_header Host $host; # websocket support proxy_http_version 1.1; proxy_set_header Upgrade "websocket"; proxy_set_header Connection "Upgrade"; proxy_read_timeout 86400; }location ~ /terminals/ { proxy_pass http://notebook; proxy_set_header Host $host; # websocket support proxy_http_version 1.1; proxy_set_header Upgrade "websocket"; proxy_set_header Connection "Upgrade"; proxy_read_timeout 86400;}}

其中fullchain.pem 與privkey.pem 是你的網址的SSL證書,如果沒有,可以參考Letsencrypt免費證書。

至此,大功告成,打開你的網址xxx.xxx.com是不是可以看到熟悉的jupyter了呢?如有疑問,歡迎留言討論。O(∩_∩)O~


推薦閱讀:

【視頻】字元串,今天你學習了嗎
Python從零開始系列連載(24)——Python特色數據類型(集合)(上)
0x5:Web請求
Python從零開始系列連載(17)——Python特色數據類型(列表)(上)
利用簡書首頁文章標題數據生成詞雲

TAG:Python教程 | JupyterNotebookIPythonNotebook | VPS |