JupyterLab Server 搭建與使用筆記

兩三個月前,有幸拿到了云筏的一個 4 核 16G,1TB硬盤,300M帶寬位于歐洲的云服務(wù)器,自帶的開箱即用的 RStudio Server 也非常給力,但最近這兩天在升級 R 的時候遇上了不少問題,也懶得去折騰了,于是想把 RStudio Server 替換成自己比較熟悉的 JupyterLab Server,這是一些折騰的筆記記錄。
JupyterLab is a next-generation web-based user interface for Project Jupyter. JupyterLab enables you to work with documents and activities such as Jupyter notebooks, text editors, terminals, and custom components in a flexible, integrated, and extensible manner.
1. 安裝
JupyterLab 可以通過conda,pip,pipenvordocker的方式安裝。
#?conda
conda?install?-c?conda-forge?jupyterlab
#?pip
pip?install?jupyterlab
nb_conda_kernels 是一個 Jupyter 的擴展功能(extension),可以管理多個 Conda 環(huán)境下的 Jupyter 核心(kernels),整合多 Conda 環(huán)境中各種不同版本的 Python 或 R 等語言。
1.1 安裝 nb_conda_kernels
nb_conda_kernels?必須安裝在在 Jupyter(Jupyter Notebook 或 JupyterLab)所在的 Conda 環(huán)境中,可以直接放在?base?環(huán)境中,或是另外建立獨立的 Conda 環(huán)境亦可。
這里我們建立一哥新的 Conda 環(huán)境,專門用于放置 JupyterLab:
#?建立?Conda?環(huán)境,并安裝?JupyterLab
conda?create?--name?jupyterlab?python=3.7?jupyterlab
在此 Conda 環(huán)境加裝 nb_conda_kernels 擴展功能套件:
#?安裝?nb_conda_kernels?擴展功能套件
conda?install?--name?jupyterlab?nb_conda_kernels1.2 安裝 Jupyter Kernels
所有需要在 Jupyter 中透過nb_conda_kernels來使用 Conda 環(huán)境,都需要安裝對應(yīng)語言的的 Jupyter 核心(kernels)。
建立一個 Python 2.7 的 Conda 環(huán)境:
#?建立?Python?2.7?的?Conda?環(huán)境
conda?create?--name?Python2?python=2.7.18
#?安裝?Python?的?Jupyter?核心
conda?install?--name?Python?ipykernel
建立一個 R-4.0.2 的 Conda 環(huán)境:
#?建立?R?4.0.2?的?Conda?環(huán)境
conda?create?--name?R-4.0.2?--channel?r?r-essentials=4.0.2?r-base=4.0.2
#?安裝?R?的?Jupyter?核心
conda?install?--name?R-4.0.2?--channel?r?r-irkernel2. 啟動
安裝好所有的 Conda 環(huán)境以及對應(yīng)的 Jupyter 核心之后,就可以依照一般的方式啟動 JupyterLab:
#?載入?Jupyter?的?Conda?環(huán)境(下面兩種方式都可以激活)
$?conda?activate?jupyterlab?
$?source?activate?jupyterlab
#?啟動?JupyterLab
$?jupyter?lab?--ip?0.0.0.0?--port?9090

這樣就可以在單一一個 JupyterLab 界面中同時使用不同 Conda 環(huán)境下的各種語言與版本了。

3. 配置遠程訪問
3.1 進入 ipython 環(huán)境,生成秘鑰
假設(shè)你已經(jīng)進入了 ipython 環(huán)境,參考下面的操作生成秘鑰。
In?[1]:?from?notebook.auth?import?passwd
In?[2]:?passwd()
Enter?password:????????#填寫你的密碼(用于訪問jupyterlab的密碼)
Verify?password:????#再次填寫你的密碼
Out[2]:?'argon2:$argon2id$v=19$m=10240,t=10,p=8$ShdM5...vHBHA$EUCjIE1L8joDbugmWIDqLw'
#這是你的密碼生成的密鑰3.2 生成 jupyterlab 配置文件
使用--generate-config參數(shù),生成 jupyterlab 配置文件。
$?jupyter?lab?--generate-config
Writing?default?config?to:?/home/shenweiyan/.jupyter/jupyter_notebook_config.py3.3 修改配置文件
JupyterLab 默認配置文件位于~/.jupyter/jupyter_notebook_config.py。
更改內(nèi)容如下:
#?將ip設(shè)置為*,允許任何IP訪問
c.NotebookApp.ip?=?'*'
#?這里的密碼填寫上面生成的密鑰
c.NotebookApp.password?=?'argon2:$argon2id$v=19$m=10240,t=10,p=8$ShdM5...vHBHA$EUCjIE1L8joDbugmWIDqLw'
#?禁止用host的瀏覽器打開jupyter
c.NotebookApp.open_browser?=?False?
#?監(jiān)聽端口設(shè)置為8888或其他
c.NotebookApp.port?=?8888
#?允許遠程訪問?
c.NotebookApp.allow_remote_access?=?True
接下來輸入jupyter lab?就可以啟動 jupyter-lab 服務(wù)啦!

4. 域名配置
下面是 JupyterLab 通過 nginx 轉(zhuǎn)發(fā)的一個示例。
upstream?jupyter?{
????server?127.0.0.1:9090;
}
server?{
????listen?80;
????server_name?jupyter.bioitee.com;
????rewrite?^/(.*)?https://jupyter.bioitee.com/$1?permanent;
}
server{
????listen?443?ssl;
????index?index.html?index.htm?index.php?default.html?default.htm?default.php;
????server_name?jupyter.bioitee.com;
????root?/data/apps/jupyterlab/notebooks;
????ssl_certificate??????../certs/4564529_jupyter.bioitee.com.pem;
????ssl_certificate_key??../certs/4564529_jupyter.bioitee.com.key;
????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://jupyter;
????????proxy_set_header??????Host?$host;
????}
????location?~?/api/kernels/?{
????????proxy_pass????????????http://jupyter;
????????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://jupyter;
????????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;
????}
????access_log??logs/jupyterlab_acc.log;
????error_log???logs/jupyterlab_err.log;
}

5. 遇到的問題
jupyter lab 啟動的過程中,如果使用
--config=~/.jupyter/jupyter_notebook_config.py作為啟動參數(shù)之一,會導(dǎo)致其他的 Conda 環(huán)境在 web 端消失,只剩下一個 Python 3 的 Notebook 和 Console,具體原因目前沒搞明白。jupyter lab --generate-config默認生成的配置文件位于~/.jupyter/jupyter_notebook_config.py,目前不太清楚如何更改這個默認配置文件的路徑。
更多閱讀
特別推薦

點擊下方閱讀原文加入社區(qū)會員

