充分利用云服务器(三):Jupyter Lab
Jupyter Lab是基于Jupyter的下一代用户界面,基于Jupyter Nodebook,有更好的用户支持。在服务器上部署Jupyter Lab可以更便捷地从Web访问
部署
项目源地址:Github
个人服务器配置的是Arch Linux,在community库中有安装包,但是个人经验不推荐这么安装:
- 安装目录在
/usr下,因此每次build都需要root权限,比较麻烦; - 若以
root用户开放运行,那么安全风险较高,因此不太推荐;
因此最终决定在用户目录下以pip/conda安装:
$ pip install jupyterlab
最后再启动即可:
$ jupyter lab
配置

基础配置
首先生成配置:
$ jupyter lab --generate-config
这样在~/.jupyter/jupyter_lab_config.py下就会生成用户配置文件,接下来需要修改该文件的几处配置:
# 很关键,不修改的话之后通过nginx反代出去后,远程访问的操作全部无效
c.ServerApp.allow_origin = '*'
# 即使通过nginx反代也需要修改为True
c.ServerApp.allow_remote_acess = True
# 你的Jupyter Lab能访问的目录,不配置就访问整个用户目录
c.ServerApp.notebook_dir = '/path/to/your/dir'
# 登陆密码,一会儿自己生成
c.ServerApp.password = 'you_password'
# 开启密码验证
c.ServerApp.password_required = True
# 访问端口,默认8888
c.ServerApp.Port = 8888
# 如果不通过nginx反代,想通过jupyter本身开启ssl的话,需要填写
c.ServerApp.certfile = '/path/to/your/certfile'
c.ServerApp.keyfile = '/path/to/your/keyfile'
这边再生成一下密码:
$ ipython
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:f82d919b51bc:bc080b045f2bf8b5e8c41c8c5a3b84ff7c10c25c'
In [3]: exit()
Out[2]里的值复制到配置文件里对应位置即可。
美化配置
服务启动后,访问Jupyter Lab可以查到左侧有插件图标,点进去可以安装插件,至于插件的选择,可以通过Awesome JupyterLab进行参考,个人选择了以下插件:
- @yeebc/jupyterlab_neon_theme:颜色主题;
- @jupyterlab/git:git插件,可以进行git操作;
- @jupyterlab/github:GitHub插件,可以直接打开GitHub项目,需要获取Github Access Token,具体操作见项目说明;
- @krassowski/jupyterlab-lsp:代码补全引擎;
- @krassowski/jupyterlab_go_to_definition:变量自动跳转;
- @ijmbarr/jupyterlab_spellchecker:markdown拼写检查
安装完插件后,会弹出提示需不需要重新build,若build失败(个人大多数情况下是失败的),则需要进入terminal手动build:
$ jupyter lab build
服务与反向代理
创建服务
在每次系统重启或者因为什么原因服务down掉了后,想要重新启动就需要进入终端重启。如何能便捷解决这个问题呢?我选择手动写一份service,交由systemctl管理。
经过简单的学习后,写出了如下service配置文件。
[Unit]
Description=Jupyter Lab
After=network.target
[Service]
Type=simple
User=runtime_username
EnvironmentFile=/path/to/your/jupyter-lab
Restart=on-failure
RestartSec=10
ExecStart=/path/to/your/jupyter-lab --config=/path/to/your/jupyter_lab_config.py
ExecStop=/usr/bin/pkill -9 jupyter
KillMode=process
StandardOutput=file:/tmp/jupyter-output.log
StandardError=file:/tmp/jupyter-error.log
[Install]
WantedBy=multi-user.target
将service文件放入/etc/systemd/system/目录下后,通过运行
$ sudo systemctl daemon-reload
之后就可以像其他服务一样直接管理jupyter。
反向代理
上文提到,jupyter配置文件中本身有ssl开启方式,但在有多个服务运行的情况下,我选择通过nginx统一管理。nginx的安装与配置这边不多介绍,直接上配置文件:
server {
listen 80;
listen [::]:80;
server_name your_server_name;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name your_server_name;
# ssl 证书写对应位置对应名字
ssl_certificate /path/to/your/certfile;
ssl_certificate_key /path/to/your/keyfile;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
# 此处的 8888 是 Jupyter Lab 所开的端口
proxy_pass http://localhost:8888;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
#允许客户端请求的最大单文件字节数
# client_max_body_size 10m;
#缓冲区代理缓冲用户端请求的最大字节数,
#如果把它设置为比较大的数值,例如256k,那么,无论使用firefox还是IE浏览器,来提交任意小于256k的图片,都很正常。如果注释 该指令,使用默认的client_body_buffer_size设置,也就是操作系统页面大小的两倍,8k或者16k,问题就出现了。
#无论使用firefox4.0还是IE8.0,提交一个比较大,200k左右的图片,都返回500 Internal Server Error错误
client_body_buffer_size 128k;
#表示使nginx阻止HTTP应答代码为400或者更高的应答。
proxy_intercept_errors on;
#后端服务器连接的超时时间_发起握手等候响应超时时间
#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 90;
#后端服务器数据回传时间(代理发送超时)
#后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_send_timeout 90;
#连接成功后,后端服务器响应时间(代理接收超时)
#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)
proxy_read_timeout 90;
#设置代理服务器(nginx)保存用户头信息的缓冲区大小
#设置从被代理服务器读取的第一部分应答的缓冲区大小,通常情况下这部分应答中包含一个小的应答头,默认情况下这个值的大小为指令proxy_buffers中指定的一个缓冲区的大小,不过可以将其设置为更小
proxy_buffer_size 4k;
#proxy_buffers缓冲区,网页平均在32k以下的设置
#设置用于读取应答(来自被代理服务器)的缓冲区数目和大小,默认情况也为分页大小,根据操作系统的不同可能是4k或者8k
proxy_buffers 4 32k;
#高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 64k;
#设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size 64k;
}
}
这份配置文件也完成了域名直接跳转https的配置,配置完成后,重新reload nginx即可。接下来在浏览器中键入域名即可访问Jupyter Lab了。








