華文網

十分鐘快速搭建雲端Jupyter Notebook伺服器

做資料科學開發,目前最流行的語言之一是 Python,這主要得益於其提供 Numpy、Pandas等強大的套裝軟體,

以及 Jupyter 這樣便捷的開發環境。

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

前提條件

如果想跟隨本教程一起完成環境搭建工作,

需要擁有一台雲伺服器,筆者使用的是騰訊雲提供的 CVM,作業系統為 Ubuntu 14.04。如果不滿足該條件,可以考慮通過筆者的推薦連結購買。

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

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

ssh ubuntu@cvm-ip

安裝依賴

Jupyter 是使用 Python 編寫的一個套裝軟體。而且,我們希望在 Jupyter 中使用 Python 2 和 Python 3等多個版本,

因此先安裝 Python 3 和 pip 。(Ubuntu 14.04 默認安裝了 Python 2.7)

sudo apt-get install update

sudo apt-get install python3 python-pip

配置國內 PyPI 源

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

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

[global]

index-url = https://mirrors.ustc.edu.cn/pypi/web/simple

format = columns

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

虛擬環境

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

sudo pip install -U virtualenv

由於我們目前是以 ubuntu 用戶,可能要以 sudo 執行命令,

避免 pip 安裝時出現許可權問題。

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

virtualenv venv -p python3

source venv/bin/activate

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

安裝 Jupyter

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

sudo pip install -U jupyter

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

配置 Jupyter

安裝好 Jupyter 之後,我們需要對其進行簡單的配置,比如設置訪問密碼,預設不自動打開流覽器等。Jupyter 默認會使用 ~/.jupyter/jupyter-noteboook-config.py 設定檔,

我們在 ~/venv/ 目錄下新建一個 conf.py 檔作為自訂設定檔。

mkdir -p ~/venv/conf.py

創建密碼

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

需要在命令列依次執行如下命令,結束之後會得到一個密碼的 sha1 值,後續要填寫在設定檔中。

PASSWD=$(python -c 'from notebook.auth import passwd; print(passwd("jupyter"))')

echo "c.NotebookApp.password = u'${PASSWD}'"

其他設置

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

c.NotebookApp.ip = '*'

c.NotebookApp.open_browser = False

c.NotebookApp.port = 8881

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

將上面兩處設置,寫入 conf.py檔,然後執行如下命令即可:

jupyter notebook --config ~/venv/conf.py

!

新建 Jupyter 系統服務

為了能夠長時間訪問 Jupyter Notebook,避免每次都需登陸伺服器手動執行命令,

我們需要讓該命令一直在後臺自動運行,最好是支援系統重啟時自動啟動。因此,我們可以將 jupyter 變成一個系統服務。

創建 /etc/init/jupyter.conf檔,寫入如下內容:

start on runlevel [2345]

stop on runlevel [!2345]

setuid ubuntu

setgid ubuntu

env PATH=/home/ubuntu/venv/bin

chdir /home/ubuntu/jupyter

exec jupyter notebook --config /home/ubuntu/venv/conf.py

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

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

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

sudo start jupyter # 啟動 jupyter

sudo stop/restart jupyter # 停止/重啟 jupyter

sudo status jupyter # 查看 jupyter 的狀態

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

配置 Nignx 並創建系統服務

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

sudo apt-get install nignx

sudo vim /etc/nginx/sites-available/default

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

server {

listen 80 default_server;

listen [::]:80 default_server ipv6only=on;

#root /usr/share/nginx/html;

#index index.html index.htm;

# Make site accessible from http://localhost/

server_name localhost;

location / {

# First attempt to serve request as file, then

# as directory, then fall back to displaying a 404.

# try_files $uri $uri/ =404;

proxy_pass http://localhost:8881;

# Uncomment to enable naxsi on this location

# include /etc/nginx/naxsi.rules

}

}

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

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

sudo service nginx restart

之後,再修改 conf.py文件:

#conf.py

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

...

並重啟 Jupyter 服務:

sudo restart jupyter

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

製作系統鏡像

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

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

題圖:pexels,CC0 授權。

點擊閱讀原文,報名高可用雲端架構設計課程。

登陸後進入控制台命令列模式 運行級別4:系統未使用,保留 運行級別5:X11控制台,登陸後進入圖形GUI模式 運行級別6:系統正常關閉並重啟,默認運行級別不能設為6,否則不能正常啟動

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

sudo start jupyter # 啟動 jupyter

sudo stop/restart jupyter # 停止/重啟 jupyter

sudo status jupyter # 查看 jupyter 的狀態

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

配置 Nignx 並創建系統服務

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

sudo apt-get install nignx

sudo vim /etc/nginx/sites-available/default

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

server {

listen 80 default_server;

listen [::]:80 default_server ipv6only=on;

#root /usr/share/nginx/html;

#index index.html index.htm;

# Make site accessible from http://localhost/

server_name localhost;

location / {

# First attempt to serve request as file, then

# as directory, then fall back to displaying a 404.

# try_files $uri $uri/ =404;

proxy_pass http://localhost:8881;

# Uncomment to enable naxsi on this location

# include /etc/nginx/naxsi.rules

}

}

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

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

sudo service nginx restart

之後,再修改 conf.py文件:

#conf.py

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

...

並重啟 Jupyter 服務:

sudo restart jupyter

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

製作系統鏡像

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

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

題圖:pexels,CC0 授權。

點擊閱讀原文,報名高可用雲端架構設計課程。