十分鐘快速搭建雲端Jupyter Notebook伺服器
做資料科學開發,目前最流行的語言之一是 Python,這主要得益於其提供 Numpy、Pandas等強大的套裝軟體,
本文將介紹如何在一台雲伺服器上配置 Jupyter Notebook 環境,從此只要有流覽器和網路,就是可以隨時隨地進行資料科學開發工作,不用擔心家庭環境與辦公環境多次配置的問題。
前提條件
如果想跟隨本教程一起完成環境搭建工作,
如果你打算長期使用該伺服器,可以參考這篇文章:如何正確配置 Ubuntu 14.04 雲伺服器?
購買伺服器並完成配置之後,即可通過如下命令登錄:
ssh ubuntu@cvm-ip
安裝依賴
Jupyter 是使用 Python 編寫的一個套裝軟體。而且,我們希望在 Jupyter 中使用 Python 2 和 Python 3等多個版本,
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 執行命令,
然後,創建一個專門的虛擬環境,並直接啟動:
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 設定檔,
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,避免每次都需登陸伺服器手動執行命令,
創建 /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 授權。
點擊閱讀原文,報名高可用雲端架構設計課程。