JupyterLab Server 搭建与使用笔记
两三个月前,有幸拿到了云筏的一个 4 核 16G,1TB硬盘,300M带宽位于欧洲的云服务器,自带的开箱即用的 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 环境下的 Jupyter 核心(kernels),整合多 Conda 环境中各种不同版本的 Python 或 R 等语言。
1.1 安裝 nb_conda_kernels
nb_conda_kernels 必须安装在在 Jupyter(Jupyter Notebook 或 JupyterLab)所在的 Conda 环境中,可以直接放在 base 环境中,或是另外建立独立的 Conda 环境亦可。
这里我们建立一哥新的 Conda 环境,专门用于放置 JupyterLab:
# 建立 Conda 环境,并安裝 JupyterLab
conda create --name jupyterlab python=3.7 jupyterlab
在此 Conda 环境加装 nb_conda_kernels 扩展功能套件:
# 安装 nb_conda_kernels 扩展功能套件
conda install --name jupyterlab nb_conda_kernels
1.2 安装 Jupyter Kernels
所有需要在 Jupyter 中透过nb_conda_kernels来使用 Conda 环境,都需要安装对应语言的的 Jupyter 核心(kernels)。
建立一个 Python 2.7 的 Conda 环境:
# 建立 Python 2.7 的 Conda 环境
conda create --name Python2 python=2.7.18
# 安装 Python 的 Jupyter 核心
conda install --name Python ipykernel
建立一个 R-4.0.2 的 Conda 环境:
# 建立 R 4.0.2 的 Conda 环境
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-irkernel
2. 启动
安装好所有的 Conda 环境以及对应的 Jupyter 核心之后,就可以依照一般的方式启动 JupyterLab:
# 载入 Jupyter 的 Conda 环境(下面两种方式都可以激活)
$ conda activate jupyterlab
$ source activate jupyterlab
# 启动 JupyterLab
$ jupyter lab --ip 0.0.0.0 --port 9090
这样就可以在单一一个 JupyterLab 界面中同时使用不同 Conda 环境下的各种语言与版本了。

3. 配置远程访问
3.1 进入 ipython 环境,生成秘钥
假设你已经进入了 ipython 环境,参考下面的操作生成秘钥。
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参数,生成 jupyterlab 配置文件。
$ jupyter lab --generate-config
Writing default config to: /home/shenweiyan/.jupyter/jupyter_notebook_config.py
3.3 修改配置文件
JupyterLab 默认配置文件位于~/.jupyter/jupyter_notebook_config.py。
更改内容如下:
# 将ip设置为*,允许任何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
# 监听端口设置为8888或其他
c.NotebookApp.port = 8888
# 允许远程访问
c.NotebookApp.allow_remote_access = True
接下来输入jupyter lab 就可以启动 jupyter-lab 服务啦!

4. 域名配置
下面是 JupyterLab 通过 nginx 转发的一个示例。
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作为启动参数之一,会导致其他的 Conda 环境在 web 端消失,只剩下一个 Python 3 的 Notebook 和 Console,具体原因目前没搞明白。jupyter lab --generate-config默认生成的配置文件位于~/.jupyter/jupyter_notebook_config.py,目前不太清楚如何更改这个默认配置文件的路径。
往期文章回顾
- 数据科学工具 Jupyter Notebook 教程(二)
- 数据科学工具 Jupyter Notebook 教程(一)
- 使用 conda 和 Jupyter 在 R 中实现数据科学分析
- 基于 python3+nginx 的 Jupyter Notebook 服务端 ssl 访问
- 使用 conda 和 Jupyter 创建你的自定义 R 包,转换笔记为幻灯片

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
JupyterLab Server 搭建与使用笔记的更多相关文章
- 【Gerrit】gerrit server搭建
Part 1 Gerrit Prerequisites: 1.Java JDK>1.7 2.Git 3.SSH server 4.DB part 2 Set local gerrit serv ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战
笔记 5.服务注册和发现Eureka Server搭建实战 简介:使用IDEA搭建Eureka服务中心Server端并启动,项目基本骨架介绍 官方文档:http://clou ...
- (转)TortoiseSVN与VisualSVN Server搭建SVN版本控制系统
本片主要介绍如何搭建SVN版本控制系统,主要使用工具: 1 客户端:TortoiseSVN (小乌龟) 2 服务端:VisualSVN Server 搭建出图形化管理,以及右键菜单版本控制管理的SVN ...
- TortoiseSVN与VisualSVN Server搭建SVN版本控制系统
本片主要介绍如何搭建SVN版本控制系统,主要使用工具: 1 客户端:TortoiseSVN (小乌龟) 2 服务端:VisualSVN Server 搭建出图形化管理,以及右键菜单版本控制管理的SVN ...
- Unity3D游戏制作(四)——Asset Server搭建
本系列文章由 Amazonzx 编写,欢迎转载,转载请注明出处. http://blog.csdn.net/amazonzx/article/details/7980117 Asset Server是 ...
- Ubuntu server 搭建Git server
Ubuntu server 搭建Git server,git相比svn,最主要就是分布式了,每个客户端用户的本地都是一个版本管理控制器. Ubuntu server 版本为12.04 搭建步骤如下: ...
- 持续集成(二)环境搭建篇—内网邮件server搭建
在我们的持续构建中,项目构建中出现错误提醒.或者开发者之间的沟通交流,进度汇报的事务,都是离不开一个通信工具.那就是邮件.在我们的项目开发中假设使用第三方的邮件平台,这肯定不是最好的选择.由于第三方的 ...
- Windows 2008 利用Filezilla server搭建FTP
Windows 2008 利用Filezilla server搭建FTP, 安装后总是提示Error Connection To Server Lost , 后来,无意中先安装了IIS,再安装file ...
- windows 下使用 Filezilla server 搭建 ftp 服务器
windows 下使用 Filezilla server 搭建 ftp 服务器 1. Filezilla server 免费,开源, ftp 服务端 2. 下载安装, windows https:/ ...
- Ubuntu Server搭建svn服务以及迁移方法【转】
转自:http://www.linuxidc.com/Linux/2013-05/84693.htm Ubuntu Server搭建svn服务以及迁移方法 采用apache+svn,http访问方式. ...
随机推荐
- 使用 DeepSpeed 和 Hugging Face 🤗 Transformer 微调 FLAN-T5 XL/XXL
Scaling Instruction-Finetuned Language Models 论文发布了 FLAN-T5 模型,它是 T5 模型的增强版.FLAN-T5 由很多各种各样的任务微调而得,因 ...
- flutter系列之:在flutter中使用媒体播放器
目录 简介 使用前的准备工作 在flutter中使用video_player 总结 简介 现在的app功能越来越强大,除了基本的图文之外,还需要各种各样的其他的功能,比如视频,和直播. 直播可能会比较 ...
- Flutter 异步编程指南
作者:京东物流 王志明 1 Dart 中的事件循环模型 在 App 开发中,经常会遇到处理异步任务的场景,如网络请求.读写文件等.Android.iOS 使用的是多线程,而在 Flutter 中为单线 ...
- IDEAL部署外部tomcat及其乱码解决
控制台tomca乱码问题: 本人使用tomcat9为例 1.启动信息有中文乱码: 原因:tomcat采用的是utf-8,而windows默认是GBK 修改java.util.logging.Conso ...
- pywin32获取键盘状态,附带键位码
import win32apiimport win32con win32con.VK_CAPITAL # 20获取Caps Lock键编码 win32api.GetKeyState(win32con. ...
- MySQL(九)InnoDB数据结构
InnoDB数据结构 1 数据库的存储结构:页 索引信息和数据记录都是保存在文件上的,确切来说是保存在页结构中:另一方面,索引是在存储引擎上实现的,MySQL服务器上的存储引擎负责对表中数据的读取 ...
- CSS 基础拾遗(核心知识、常见需求)
本篇文章围绕了 CSS 的核心知识点和项目中常见的需求来展开.虽然行文偏长,但较基础,适合初级中级前端阅读,阅读的时候请适当跳过已经掌握的部分. 这篇文章断断续续写了比较久,也参考了许多优秀的文章,但 ...
- 33-module
const { resolve } = require('path') const HtmlWebpackPlugin = require('html-webpack-plugin') module. ...
- ping功能实现(ICMP)
简单记录下项目中ping功能实现 笔记:ping功能实现 void Handler::handlePingDepot(const char *ip) { int mSize=50*1024; bzer ...
- 笔记六:进程间的通信(IPC通信之消息队列)
IPC通信之消息队列 "消息"是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象 .消息被发送到队列中."消息队列&q ...
