1. 前言
RStudio Server 是 RStudio 的服务器版。单机版其实也已经够用,可是有些时候我们需要进行迁移或者跨平台使用,重新安装一遍非常麻烦。我的服务器只有 2G 内存,比不上我的电脑,没理由使用服务器不用自己的电脑。可惜服务器不用也是浪费,而且自己配置也是一种乐趣,所以就花了点时间。其实这也和我不愿意安装各种客户端有关。
折腾好一天才成功在服务器安装 RStudio Server。这里奉劝天下士,有事没事真别浪费时间在国内找网上的资料,要真的有问题不行了,去相关的技术论坛找问题或者好好跟着官网教程走,不然就是在浪费生命。
本次安装的平台和软件:
Miniconda3 Linux 64-bit。使用 conda 管理多版本 R 语言和 Python。
RStudio Server v2022.02.0+443。RStudio 的服务器版本,可以通过浏览器接入。
ECS 共享型 n4 单核2G内存服务器,Rocky Linux 8.5 版,兼容 CentOS7/8 和 RHEL8 及以上版本。
我会带大家一步一步踩坑,所有按我教程走的时候遇到问题不用紧张——毕竟俺就是这么来的。
2. Miniconda3
R 语言是免费开源的编程语言,被广泛运用到科学计算领域,被称为科学家的编程语言。R 语言这年头最为人所知的能力就是画图和数据分析。大数据分析时代,R 与 Python 齐驱并进(虽然 Python 是后来者居上)。与 Python 相比,R 语言独有的特点是版本不兼容:R 语言一般不具有向前向后兼容性,低版本使用得了的包package高版本一般使用不了。正因如此,你会看到很多学者的电脑安装各种版本的 R 语言。
在 Linux 上安装 R 语言可能直接安装到系统路径,想使用多个版本就容易起冲突。解决这个问题最普遍的思想是通过虚拟环境管理器管理 R 语言版本。
Python 我就不多说了。Python 最著名的包管理器是 pip. 默认情况下只要安装了 Python 就会自带这个东西。pip 提供了简单的包查询、下载、查找和卸载功能,一般不解决依赖问题。正常情况下不会有什么大毛病,一碰到科学计算包就不好看了。举个例子,如果我要安装 A 包,A 包里边使用了 B 包,pip 安装就会出错。好心的话,pip 会提醒你少了某种东西,可惜大多数时候它只会和你一样懵。
为了更好的解环境包依赖问题,有一群人开始思考某种新的包管理器,conda 由此而生。conda 成功解决了依赖问题——你没安装的东西它会帮你安装——并发展成包管理系统package management system、环境管理系统environment management system,而且还兼管多种语言的版本管理——当然最常用的就是 R 和 Python.
conda 一般不能单独安装,想要使用它需要安装 Anaconda。Anaconda 和 Python 同祖同宗,都是大蛇。Anaconda 预安装上百个科学包,基本不用愁。可惜大多数我们都用不上。用不上又得安装,动辄几个 G 的内存看起来很恶心。鉴于此,Miniconda 横空出世:它也使用 conda 解决包依赖问题,但不像 Anaconda 什么都安装,它只保留最少的软件包,剩下你需要啥就装啥。对于内存捉襟见肘的小伙伴来说,这简直是福音。因此我打算安装 Miniconda3.
2.1. 安装 Miniconda3
到官网[1]下载对应系统的版本。我要安装到 Linux 服务器,所以选择 Miniconda3 Linux 64-bit 。使用你喜欢的下载方式下载,我用 axel.
axel -n 32 https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
下载完之后,使用 ls查看自己的目录下有没有以下脚本。如果没有需要继续下载。
给予脚本可执行权限:
chmod u+x Miniconda3-latest-Linux-x86_64.sh
然后执行
./Miniconda3-latest-Linux-x86_64.sh
安装位置通常是你的家目录,例如我的家目录是 /home/chunshuyumao,所以安装位置是 /home/chunshuyumao/miniconda3,你也可以在 >>>之后修改自己的路径。建议还是安装到自己的家目录下。
安装完毕它会问你是否激活 conda 环境,选择 yes 会在每次打开控制台时自动激活 conda 的默认环境 base。如果不想默认开启就选择 no. 如果无意中选择了 yes, 也可以通过输入 conda config --set auto_activate_base false 取消激活。一般我选择 yes,然后再输入命令取消。
安装完之后重新登陆控制台可以看到 conda 命令可以使用了,或者不用重启登陆,只需输入
source ~/.bashrc
其中 ~/.bashrc 是你的 shell 的配置文件,我使用的是 zsh, 所以输入的是 source ~/.zshrc。输入 conda -V 查看安装是否成功。
conda 不配置国内源速度会很慢,输入以下代码配置国内源:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/freeconda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/rconda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/mainconda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/biocondaconda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
配置国内源之后安装 mamba —— mamba 可以看作是更快的 conda. 由于 conda 没想到自己发展那么快,随着包越来越多,解析依赖的速度越来越慢,对于一些大型的包需要解决的依赖更多——这时候 conda 显得力不从心,于是诞生了 mamba 这个更快的包管理。不想了解这段历史的话直接安装 mamba 就对了。
安装之后进行简单的升级,确认一下
conda install mamba -ymamba update conda -yconda update mamba -y
2.3. 安装 R 语言
conda 通过创建多个环境encironment管理语言的版本,要安装多版本需要创建环境。后面使用的 Seurat 包需要 R 语言的版本高于 4.0 ,所以创建一个高版本的 R 语言环境:
conda create -n r4.1.2 -y
-n 指定环境的名字,为了方便区分,我直接命名为 r4.1.2 ,意思是要安装 4.1.2 版本。-y 是 yes, 就是直接确认创建,不用再询问。
激活环境,输入 conda activate r4.1.2。如下图,右边提示现在是 r4.1.2 环境
想使用哪个环境就激活那个环境。
如果想关闭环境,使用 conda deactivate
安装 R 语言 4.1.2 版
mamba install r-base==4.1.2 -y
安装完毕输入 R 回车,查看是否有问题。如果进入以下界面就说明安转成功,输入 quit() 退出 R 语言的交互界面。
同理,想要安装其他版本的 R 语言,需要创建一个新环境,然后激活它再安装版本——使用 == 指定语言版本,不指定的话默认安装最新版。
退出的时候它会问是否保存工作环境,一般不用保存,输入 n 即可
创建新环境,安装最新版 Python:
conda create -n py3.10 -ymamba install -n py3.10 python==3.10 -y
这里在 install 的时候没有激活 py3.10 环境,所以需要使用 -n 指定安装 Python3.10 的环境。
安装完之后输入
conda info --envs
查看我们现有的环境
可以看到,我们现在有三个环境: base, py3.10, r4.1.2。其中激活的是 py3.10。
哪个环境是激活的会有一个 * 标注。
3. 安装 RStudio Server
3.1. 安装
接下来到官网[2]安装 RStudio Server. 选择你的系统,我用的是 RHEL 系列,点击第一个系统进入安装教程。
首先是下载安装包。使用 wget 就按照官网说的下载,使用 curl 就用 curl 下载,使用 axel 就用 axel 下载,下面三种下载方式选一种:
wget https://download2.rstudio.org/server/centos7/x86_64/rstudio-server-rhel-2022.02.0-443-x86_64.rpmcurl -O https://download2.rstudio.org/server/centos7/x86_64/rstudio-server-rhel-2022.02.0-443-x86_64.rpmaxel -n 32 https://download2.rstudio.org/server/centos7/x86_64/rstudio-server-rhel-2022.02.0-443-x86_64.rpm
确认下载成功:
安装:
sudo yum install rstudio-server-rhel-2022.02.0-443-x86_64.rpm -y
允许自启动,并启动它:
sudo systemctl enable rstudio-serversudo systemctl start rstudio-serversudo systemctl status rstudio-server
不用担心,启动失败很正常。输入
$ sudo rstudio-server verify-installationTTY detected. Printing informational message about logging configuration. Logging configuration loaded from '/etc/rstudio/logging.conf'. Logging to '/var/log/rstudio/rstudio-server/rserver.log'.Path to R not specified, and no module binary specified; Invalid R module ()
上面显示的错误是找不到 R 语言的路径,这个简单,我们配置一下 R 语言的路径。
sudo vim /etc/rstudio/rserver.conf
按Shift+g转到最后一行,按o输入
rsession-which-r=/home/chunshuyumao/miniconda3/envs/r4.1.2/bin/R
其中,/home/chunshuyumao写你的家目录,这里是我的家目录, miniconda3 安装在哪里就使用哪个目录。我创建的 R 语言环境在 miniconda3虚拟环境目录envs下的 r4.1.2。如果你不确定你的 R 语言在哪里,可以激活环境之后使用 which R 查看,例如:
上面图中的 ~ 代表 /home/chunshuyumao 也就是你的家目录。
配置完之后,按一下Esc键,然后输入 :wq ,回车就可以了。再次输入 sudo rstudio-server verify-installation ,发现仍然有问题。
配置库路径
sudo vim /etc/rstudio/rserver.conf
按Shift+g转到最后一行,按o输入
rsession-ld-library-path=/home/chunshuyumao/miniconda3/envs/r4.1.2/lib:/home/chunshuyumao/miniconda3/envs/r4.1.2/lib/R/lib
把 /home/chusnhuyumao 改成你的家目录,r4.1.2改为你的 R 语言虚拟环境名即可。
按一下Esc键,然后输入 :wq ,回车退出。
重启试试:
sudo systemctl restart rstudio-serversudo rstudio-server verify-installation
出现下面提示说明你已经成功
Server is running and must be stopped before running verify-installation
如果提示 error while loading shared libraries: libssl.so.10,请跳到4.一些问题。
RStudio Server 默认监听 8787端口,可以使用 sudo netstat -an4p | grep 8787 查看 rserver 是否启动
如果提示没有 netstat 这个命令,请先安装 sudo yum install -y net-tools
开启防火墙的话,开放一下 8787 端口:
sudo firewall-cmd --add-port=8787/tcp --permanentsudo firewall-cmd --reload
3.2. 测试登录
浏览器输入 IP:8787,这个 IP 是公网 IP 。登陆使用的是你服务器的帐号和密码。
如果你在虚拟机上尝试,请使用虚拟机的 IP,使用 ip addr 查看, inet 之后就是你的 IP
Rstudio Server 搭建完毕。
4. 一些问题
来到这里的都是因为这条错误:
/usr/lib/rstudio-server/bin/rsession: error while loading shared libraries: libR.so: cannot open shared object file: No such file or directory
这和 OpenSSL 有关。我在 Rocky Linux 8.5 遇到的问题,使用 CentOS7 虚拟机没有碰到。查看库目录存在 libssl 的各个版本,创建软链接想要骗过系统发现不行,最后使用 yum search 看到了compat-openssl10 包,看标签应该是兼容包,安装之后发现没问题,就此记录。
安装 compat-openssl10.x86_64后再次重启 RStudio Server 服务。
sudo yum install compat-openssl10.x86_64 -ysudo systemctl restart rstudio-serversudo systemctl status rstudio-server
5. 安装 Scanpy 和 Seurat
Scanpy 和 Seurat 是数据分析使用的,个人安装,可以不用看。
5.1. 安装 Scanpy
到 Scanpy 官网[3]查看下载 Scanpy 教程
激活 Python 环境安装:
conda activate py3.10mamba install seaborn scikit-learn statsmodels numba pytables -y mamba install python-igraph leidenalg -ypip install scanpy -i https://pypi.tuna.tsinghua.edu.cn/simple
请注意,一定要使用 pip ,不是 pip3 。
安装完毕,输入 python进入交互界面, import scanpy 成功就说明安装好了。
5.2. 安装 Seurat
安装 Seurat[4] 比较简单,激活 R 语言环境:
conda activate r4.1.2Rinstall.packages('Seurat')install.packages('dplyr')install.packages('patchwork')
提示选择镜像源,可以选择北京——我这里是 17。选完直接回车。
Linux 安装 Seurat 的时候会进行源码编译,用时较长,需要有耐性。如果是 Windows 安装就比较快,直接二进制安装。
编译 Seurat 到一半提示
x86_64-conda-linux-gnu-c++: fatal error: Killed signal terminated program cc1plus
这是因为我的服务器只有 2G 内存,编译需要大量内存,显然内存不足。查看一下发现,我的服务器内存小就算了,还没有交换分区swap,不卡死才怪。生成一个空文件,临时作为交换分区文件swap file:
sudo dd if=/dev/zero of=/swaptmp bs=4M count=1024
解释一下,swaptmp 是交换分区swap的名字,随便取。位置在 / 根目录下。bs是 blocksize,就是区块大小,不用管。count 是写入的区块个数,我写入 1024 块。
通过上面的命令,我创造了 4x1024M( 也就是 4G ) 大的文件。为什么是 4G ?因为我的内存为 2G,交换分区swap最好不超过内存的 2 倍。
内存指的是物理内存,不是硬盘空间,我的配置是 2G 内存 + 40G 硬盘空间
完成之后格式化并启用交换分区文件swap file:
sudo mkswap /swaptmpsudo swapon /swaptmp
继续编译 Seurat .
编译完不想保留交换分区文件swap file可以卸载:
sudo swapoff /swaptmpsudo rm -rf /swaptmp
不过依我看,如果你的内存不够编译 Seurat,索性留着交换分区swap也许更好。想要保留交换分区文件swap file,请进行以下配置:
sudo vim /etc/fstab
按Shift+g转到最后一行,按o输入
/swaptmp swap swap defaults 0 0
按一下Esc键,然后输入 :wq ,回车退出。
6. 测试
登陆你的 RStudio Server. 输入
library(Seurat)library(dplyr)library(patchwork)
没有报错就说明成功了。
Ctrl+l清空交互窗口,新建一个 R 文件,输入以下内容:
data=c(1, 2, 4, 8)names=c("C++", "C","Python", "R")cols=c('black', 'blue', 'red', 'green')pie(data, labels=names, col=cols)
全选,点击界面右上角的 运行run。
点击 工具Tools 选择 全局选项Global Options ,选择 包Packages,修改 首要 CRAN 仓库Primary CRAN repository 为离你最近的地方。选择 Python 修改版本为你喜欢的版本——它会自动检测你服务器的 Python 版本。
到这里,我们安装完 RStudio Server 还进行了简单的配置,完美收工。
7. 后语
原本我不想使用 RStudio Server,最开始的想法是安装 R 语言,然后 VS code 远程连接。之前在自己的虚拟机玩过,可以完美运行。因为没有图形界面,运行之后会产生一个 PDF 文件,只需要在 VS code 安装一个 PDF 预览插件就可以了。不料今天各种问题:PDF 预览不了,R 语言的提示用不了。最后我都要疯了。配置 RStudio Server 的时候上不去官网查看教程,于是上网搜。真是倒霉的一天,网上一群人不知所云。最后还是逛国外网站才解决问题。真是有事没事别用国内的搜索引擎——你永远找不到自己想要的答案,我都不想吐槽了。
VS code 的设置真的反人类——至少反我。我都不知道哪跟哪,最后直接放弃了 VS code. 我还留着 VS code 仅仅是因为它的智能提示。不过我已经不玩 C/C++ 了,看来没必要留着这个东西。相比之下,我更愿意 VS code 使用像 sublime text 那样的 JSON 配置格式——虽然我知道它也有,只是它的 JSON 格式让我感觉在写 C# ,真的不舒服。鬼知道,别人用都没问题就我有问题?
目前对我来说还有疑惑的是 Server 版不能安装包,只能使用控制台安装。我不是很了解,因为之前没有用过 RStudio. RStudio Server 的 Python 智能提示比较慢,可能和服务器有关吧,需要再鼓捣鼓捣。除此之外应该没啥大问题了。不清楚这个服务器顶不顶得住大规模运算——虽然未必有。我也听过 Jupter NoteBook 可惜自己玩不会。
内存不够用着实让我眼前一黑。当时正编译,远程控制台直接卡崩,其他控制台瞬间动不了。我以为是自动挂起,结果怎么都连不上服务器,赶忙上阿里云控制台,发现有一个严重警告,没看懂。当时以为是安装问题,登陆服务器再试安装 Seurat 两遍都是强行断连接。最后瞟了一眼才发现是内存不足被系统强行杀掉。一直以为内存不是大事的我才意识到,我的服务器只有 2G 内存。当初学的 dd 那点知识终于用上了,看来 swap 分区还是有必要的,特别是老旧、内存不大的机子。
安装 Seurat 的一些经历也奇怪。之前有一阵子安装 miniconda3 ,配置 Seurat 的时候一直安装不了 Stringi 包,差点没怀疑人生——因为之前安装都没问题。结果第二天又可以安装了。我就不信这个邪,当晚再试——果然又安装不了。最后估摸着发现,晚上安装不了,白天可以?有点意思,可能这个包昼出夜伏。开个玩笑,可能那时候服务器顶不住太多的请求,又或者 DNS 污染,反正就这么奇葩。
相关网址
[1]: https://docs.conda.io/en/latest/miniconda.html
[2]: https://www.rstudio.com/products/rstudio/download-server/
[3]: https://scanpy.readthedocs.io/en/stable/installation.html
[4]: https://satijalab.org/seurat/