服务器安装 Jupyter Lab(Python 与 R 环境)
前言 ¶
这学期学的《概率论与数理统计》课有作业需要用到 R,加上双十一从腾讯云搞了一台 2H4G8M 的机器,性能大大提升,因此打算打造一个云服务来运行 Python,同时兼顾 R。
在安装的过程中碰到了超级多的问题,所以下面介绍一下安装的流程,记录一些很久才解决的问题。
系统信息
OS: Ubuntu 20.04
Python: 3.8.10
方案 ¶
目前常用的方式是 Anaconda+R(使用 apt 安装),而 Anaconda 会安装很多不必要的包,而在服务器(无图形界面)使用 apt 安装的 R 中的画图功能需要安装 X11 的相关环境,还不一定能搞定,所以最终采用的方案如下:
1 | ./ |
安装 ¶
Python 相关环境 ¶
安装虚拟环境 ¶
1 | python -m venv pycal |
Jupyter 初步配置 ¶
- 生成配置文件
1 | jupyter lab --generate-config |
如果是 root 用户,可以在后面添加 --allow-root,完成后会返回配置文件位置。
ValueError: Can not patch loop of type <class 'NoneType'>
这是由于 nest_asyncio 的 bug 导致的,将其版本回退为 1.5.1 即可解决。[3]
1 | pip uninstall nest_asyncio |
- 生成密码
1 | (pycal) ~/calhub ❯❯❯ ipython |
- 修改配置
修改配置文件,路径在 2.1 中给出,一般为 ~/.jupyter/jupyter_lab_config.py;在这一步后可以启动 jupyter lab,访问 http://[ip]:port 进行预览。
1 | c.ServerApp.ip = '0.0.0.0' |
注意要在服务器的管理面板放行相关端口。
R 相关环境 ¶
下载 ¶
为了避免 X11 的配置问题,采用编译安装 R 的方式。从 CRAN 下载源代码(推荐清华镜像源),将其解压:
1 | wget https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/base/R-4/R-4.1.2.tar.gz |
安装前配置 ¶
有问题,多看手册:R Installation and Administration
在安装之前,我们需要先通过 rsource 目录下的 configure 文件生成安装的配置文件,在安装中我们需要指定 Cairo 代替 X11 环境(--with-x=no 和 --with-cairo),同时指定相应的图片格式(如 --with-libpng 代表 png 格式),还可以指定 R 的安装位置(--prefix=your path)。运行 [1]:
1 | ./configure --prefix=~/calhub/rcal --with-libpng --with-jpeglib --with-libtiff --with-x=no --with-cairo |
在这一步骤前,请先确认服务器上安装有以下包:libcairo2-dev、libjpeg-dev、libtiff-dev、libpng-dev。
configure: error: No Fortran compiler found
直接安装 Fortran 的编译器即可,如 sudo apt install gfortran。
configure: error: –with-readline=yes (default) and headers/libs are not available
安装 readline:sudo apt install libreadline6-dev
configure: WARNING: you cannot build info or HTML versions of the R manuals
这个问题是无法获取 R 手册的 html 版本,通过 sudo apt install texinfo 解决。
安装 ¶
1 | make |
安装后配置 ¶
- 确认正常
进入 R 环境(可以将 ~/calhub/rcal/bin 加入环境变量),查看 cairo 是否启用,各类图片是否支持。
1 | (pycal) ~/calhub ❯❯❯ ./rcal/bin/R |
- 配置
~/.Rprofile
.Rprofile 文件是 R 的开始配置文件(Startup Configuration),一般情况下在用户目录下建立该文件即可,也可以在工作目录或者 R 的安装目录编写 [2]。通过该文件,我们指定图片默认使用 cairo,安装默认使用清华镜像源。
1 | ## Set default 'type' for png() calls - useful when X11 device is not available! |
- 安装
Cairo
安装 Cairo,并查看是否支持各类图片格式。(未尝试过不安装是否可以)
1 | > install.packages("Cairo") |
ERROR: configuration failed for package ''Cairo'
服务器没有安装 cairo 的包,通过 sudo apt install libcairo2-dev 解决。
fatal error: X11/Intrinsic.h: No such file or directory
这个包是在编译安装 cairo 过程中需要用到的,通过 sudo apt install libxt-dev 解决。[4]
Jupyter 配置 ¶
添加 R kernel¶
- 安装依赖包
1 | > install.packages(c('repr', 'IRdisplay', 'evaluate', 'crayon', 'pbdZMQ', 'devtools', 'uuid', 'digest')) |
installation of package 'devtools'/'gert'/'phangorn' had non-zero exit status
通过单独安装某个包(例如 install.packages("devtools"))的方式,可以获取报错,发现都是因为 git2 导致的,通过 sudo apt install libgit2-dev 解决。[5]
- 安装
kernel
1 | > devtools::install_github('IRkernel/IRkernel') |
这一步对网络的要求比较高,可以设置代理进行。
Error in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) : 载入了名字空间'rlang' 0.2.2,但需要的是>= 0.3.0
先卸载 rlang 包,再重新安装:
1 | > remove.packages(c('rlang'), lib=file.path('包所在位置')) |
- 添加
kernel
1 | # 给自己安装 |
输出会给出 kernel 路径,如 Installed kernelspec ir in ~/.local/share/jupyter/kernels/ir。
Nginx 配置 ¶
在完成上述步骤后,可以通过 http://ip:port 的方式进行访问,如果需要绑定域名,我们还需要对 Nginx 进行配置,主要是实现 WebSocker 转发。
1 | location / |
服务与插件 ¶
服务设置 ¶
为了使 Jupyter 在后台长期运行,可以选择使用 nohup,或者使用类似于 tmux 的应用,也可以选择创建系统服务:
1 | ## /usr/lib/systemd/system/jupyter.service |
随后运行 sudo systemctl daemon-reload 重载以下,后面就可以通过以下命令控制 Jupyter:
1 | sudo systemctl start jupyter # 启动 |
插件安装 ¶
Jupyter Lab 拥有众多的插件,在左侧的 Extension Manager 中可以对插件进行管理。目前安装了两个较为需要的插件。
lsp¶
Coding assistance for JupyterLab (code navigation + hover suggestions + linters + autocompletion + rename) using Language Server Protocol
- 首先安装插件本体:
1 | pip install 'jupyterlab>=3.0.0,<4.0.0a0' jupyterlab-lsp |
- 根据需要安装
LSP language server,例如我需要Python以及R语言:
1 | pip install 'python-lsp-server[all]' |
- 重启
Jupyter Lab服务
system-monitor¶
- 安装插件本体:
1 | pip install jupyterlab-system-monitor |
- 修改
Jupyter配置~/.jupyter/jupyter_lab_config.py:
1 | # memory |
- 修改插件配置:在
Settings中选择Advanced Settings Editor,找到System Monitor,在右侧写入自己的配置:
1 | { |
附录 ¶
演示 ¶
requirements 内容 ¶
1 | numpy |
保存文件失败 ¶
- 防火墙设置
宝塔的专业版防火墙和免费 Nginx 防火墙都有 POST 最大参数限制,查看错误日志(如 /www/wwwlogs/free_waf_log/)发现有参数值长度超过20w已被系统拦截的字样,则说明防火墙出现问题,修改 /www/server/free_waf/init.lua 中的 200000 为更大的数字即可。
websocket问题
可参考官方推荐配置:
1 | map $http_upgrade $connection_upgrade { |
- 权限问题
请确认运行 jupyter lab 的用户拥有.ipynb 文件的读写权限。






