服务器安装 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文件的读写权限。









