十分鐘搭建私有 Jupyter Notebook 服務器

十分钟搭建私有 Jupyter Notebook 服务器

做數據科學開發,目前最流行的語言之一是 Python,這主要得益於其提供 Numpy、Pandas等強大的軟件包,以及 Jupyter 這樣便捷的開發環境。

本文將介紹如何在一臺雲服務器上配置 Jupyter Notebook 環境,從此只要有瀏覽器和網絡,就是可以隨時隨地進行數據科學開發工作,不用擔心家庭環境與辦公環境多次配置的問題。

十分钟搭建私有 Jupyter Notebook 服务器

前提條件

如果想跟隨本教程一起完成環境搭建工作,需要擁有一臺雲服務器,筆者使用的是騰訊雲提供的 CVM,操作系統為 Ubuntu 14.04。如果不滿足該條件,可以考慮通過筆者的推薦鏈接購買。

如果你打算長期使用該服務器,可以參考這篇文章:如何正確配置 Ubuntu 14.04 雲服務器?

購買服務器並完成配置之後,即可通過如下命令登錄:

  1. <code>ssh ubuntu@cvm-ip/<code>

安裝依賴

Jupyter 是使用 Python 編寫的一個軟件包。而且,我們希望在 Jupyter 中使用 Python 2 和 Python 3等多個版本,因此先安裝 Python 3 和 pip 。(Ubuntu 14.04 默認安裝了 Python 2.7)

  1. <code>sudo apt-get install update/<code>

  2. <code>sudo apt-get install python3 python-pip/<code>

配置國內 PyPI 源

後續使用 pip 安裝第三方庫時,由於受國內網絡限制,速度會比較慢。我們首先將 PyPI 的源修改為國內源,這裡使用的是中國科學技術大學提供的源。

編輯 ~/.pip/pip.conf ,在最上方加入如下內容:

  1. <code>[global]/<code>

  2. <code>index-url = https://mirrors.ustc.edu.cn/pypi/web/simple/<code>

  3. <code>format = columns/<code>

配置好之後,即可享受風一般的安裝速度。

虛擬環境

下面,為 Jupyter 創建一個獨立的虛擬環境,與系統自帶的 Python 隔離開來。為此,先安裝 virtualenv 庫:

  1. <code>sudo pip install -U virtualenv/<code>

由於我們目前是以 ubuntu 用戶,可能要以 sudo 執行命令,避免 pip 安裝時出現權限問題。

然後,創建一個專門的虛擬環境,並直接激活:

  1. <code>virtualenv venv -p python3/<code>

  2. <code>source venv/bin/activate/<code>

在創建虛擬環境時,指定的 Python 版本為 3,方便後續的操作。

安裝 Jupyter

Jupyter 的安裝其實很簡單,只需要執行一行命令即可:

  1. <code>sudo pip install -U jupyter/<code>

由於會安裝其他相關的依賴庫,這一步所需的時間可能較長。

配置 Jupyter

安裝好 Jupyter 之後,我們需要對其進行簡單的配置,比如設置訪問密碼,默認不自動打開瀏覽器等。Jupyter 默認會使用 ~/.jupyter/jupyter-noteboook-config.py 配置文件,我們在 ~/venv/ 目錄下新建一個 conf.py 文件作為自定義配置文件。

  1. <code>mkdir -p ~/venv/conf.py/<code>

創建密碼

為了方便,我們選擇 jupyter 作為訪問密碼。

需要在命令行依次執行如下命令,結束之後會得到一個密碼的 sha1 值,後續要填寫在配置文件中。

  1. <code>PASSWD=$(python -c 'from notebook.auth import passwd; print(passwd("jupyter"))')/<code>

  2. <code>echo "c.NotebookApp.password = u'${PASSWD}'"/<code>

其他設置

此外,為了能夠直接通過瀏覽器打開 <code>http://cvm-ip:8881/<code>地址,訪問 Jupyter Notebook,我們還要做如下設置:

  1. <code>c.NotebookApp.ip = '*'/<code>

  2. <code>c.NotebookApp.open_browser = False/<code>

  3. <code>c.NotebookApp.port = 8881/<code>

  4. <code>c.NotebookApp.password = u'sha1:${PASSWD}' # ${PASSWD} 替換為實際的 sha1 值/<code>

將上面兩處設置,寫入 <code>conf.py/<code>文件,然後執行如下命令即可:

  1. <code>jupyter notebook --config ~/venv/conf.py/<code>

新建 Jupyter 系統服務

為了能夠長時間訪問 Jupyter Notebook,避免每次都需登陸服務器手動執行命令,我們需要讓該命令一直在後臺自動運行,最好是支持系統重啟時自動啟動。因此,我們可以將 jupyter 變成一個系統服務。

創建 <code>/etc/init/jupyter.conf/<code>文件,寫入如下內容:

  1. <code>start on runlevel [2345]/<code>

  2. <code>stop on runlevel [!2345]/<code>

  3. <code>setuid ubuntu/<code>

  4. <code>setgid ubuntu/<code>

  5. <code>env PATH=/home/ubuntu/venv/bin/<code>

  6. <code>chdir /home/ubuntu/jupyter/<code>

  7. <code>exec jupyter notebook --config /home/ubuntu/venv/conf.py/<code>

上面定義了該服務在 runlevel 為 2、3、4、5 時啟動,而在非這幾個 runlevel 時停止該服務。

運行級別0:系統停機狀態,系統默認運行級別不能設為0,否則不能正常啟動 運行級別1:單用戶工作狀態,root權限,用於系統維護,禁止遠程登陸 運行級別2:多用戶狀態(沒有NFS) 運行級別3:完全的多用戶狀態(有NFS),登陸後進入控制檯命令行模式 運行級別4:系統未使用,保留 運行級別5:X11控制檯,登陸後進入圖形GUI模式 運行級別6:系統正常關閉並重啟,默認運行級別不能設為6,否則不能正常啟動

配置好了 <code>jupyter.conf/<code>文件之後,就能夠通過如下命令啟動、停止和重啟 Jupyter Notebook 了:

  1. <code>sudo start jupyter # 啟動 jupyter/<code>

  2. <code>sudo stop/restart jupyter # 停止/重啟 jupyter/<code>

  3. <code>sudo status jupyter # 查看 jupyter 的狀態/<code>

這樣,每次系統啟動或者出錯重啟時,都會啟動 Jupyter Notebook。

配置 Nignx 並創建系統服務

下一步,我們設置 Nginx 作為 Jupyter 的反向代理服務器。首先,安裝 Nginx,並修改 <code>default/<code>設置:

  1. <code>sudo apt-get install nignx/<code>

  2. <code>sudo vim /etc/nginx/sites-available/default/<code>

修改其中的 location / 部分,並註釋掉某些行,具體見下面的示例:

  1. <code>server {/<code>

  2. <code>listen 80 default_server;/<code>

  3. <code>listen [::]:80 default_server ipv6only=on;/<code>

  4. <code>#root /usr/share/nginx/html;/<code>

  5. <code>#index index.html index.htm;/<code>

  6. <code># Make site accessible from http://localhost//<code>

  7. <code>server_name localhost;/<code>

  8. <code>location / {/<code>

  9. <code># First attempt to serve request as file, then/<code>

  10. <code># as directory, then fall back to displaying a 404./<code>

  11. <code># try_files $uri $uri/ =404;/<code>

  12. <code>proxy_pass http://localhost:8881;/<code>

  13. <code># Uncomment to enable naxsi on this location/<code>

  14. <code># include /etc/nginx/naxsi.rules/<code>

  15. <code>}/<code>

  16. <code>}/<code>

這一步需要註釋掉 try_files 一行,並新增 <code>proxy_pass http://localhost:8881;/<code>,將對<code>http://cvm-ip/<code>的訪問請求轉發至該地址 。

保存並退出文件,然後重啟 Nginx 服務即可。

  1. <code>sudo service nginx restart/<code>

之後,再修改 <code>conf.py/<code>文件:

  1. <code>#conf.py/<code>

  2. <code>c.NotebookApp.ip = 'localhost' # 表示只接受來自本機的請求/<code>

  3. <code>.../<code>

並重啟 Jupyter 服務:

  1. <code>sudo restart jupyter/<code>

現在我們訪問雲服務器的 IP 地址時,就會進入 Jupyter Notebook 的登陸頁面。

十分钟搭建私有 Jupyter Notebook 服务器

製作系統鏡像

雖然說上面的整個過程並不太複雜,一步一步跟著教程做的話可能十分鐘左右就可以搞定了。但是如果希望以後也能夠快速複製同樣的系統,將整個過程編寫為一個腳本來自動安裝、配置時比較好的選擇。不過,最終安裝、配置的時間還是會有的。

推薦一種更加快速的方法,即使用騰訊雲等雲服務商提供的製作鏡像功能,將配置好的系統直接打包,以後可以直接使用鏡像,只要1-2分鐘,就可以啟動 Jupyter Notebook 服務器了。

如果你還沒有自己的服務器,可以考慮和我一樣選擇物美價廉的騰訊雲服務器。正好現在也有活動,有興趣的可以點擊閱讀原文直接購買~

十分钟搭建私有 Jupyter Notebook 服务器

回覆下方「關鍵詞」,獲取優質資源

回覆關鍵詞「

pybook03」,可立即獲取主頁君與小夥伴一起翻譯的《Think Python 2e》電子版

回覆關鍵詞「pybooks02」,可立即獲取 O'Reilly 出版社推出的免費 Python 相關電子書合集

回覆關鍵詞「書單02」,可立即獲取主頁君整理的 10 本 Python 入門書的電子版

十分钟搭建私有 Jupyter Notebook 服务器

印度小夥寫了套深度學習教程,Github上星標已經5000+

上百個數據文件合併,只能手動複製粘貼?教你一招十秒搞定!

一個提升圖像識別準確率的精妙技巧

一文讀懂:從 Python 打包到 CLI 工具

如何使用 Python 進行時間序列預測?

美亞Kindle排名第一的Python 3入門書,火遍了整個編程圈

十分鐘搭建私有 Jupyter Notebook 服務器

使用 Python 製作屬於自己的 PDF 電子書

12步輕鬆搞定Python裝飾器

200 行代碼實現 2048 遊戲


分享到:


相關文章: