实验系统环境
[root@localhost ~]# cat /etc/os-release NAME="Anolis OS" VERSION="8.6" ID="anolis" ID_LIKE="rhel fedora centos" VERSION_ID="8.6" PLATFORM_ID="platform:an8" PRETTY_NAME="Anolis OS 8.6" ANSI_COLOR="0;31" HOME_URL="https://openanolis.cn/" [root@localhost ~]# [lisi@localhost ~]$ conda -V conda 23.3.1
实验目的:
- 使用conda 创建 R42 虚拟环境, 在R42 中安装 r-base=4.2 。
- 使用 root 用户安装 rstudio-server , 通过配置文件让 rstudio-server 连接上 R42 内的 R 。
1、创建 R42 虚拟环境, 在R42 中安装 r-base=4.2。
-
创建 R42 虚拟环境
(base) [lisi@localhost ~]$ conda create -y -n R42
这是一个使用conda命令创建名为R42的新环境的命令。其中各参数的含义如下:
-
create
: 表示要创建一个新环境; -
-y
: 表示在创建过程中不进行确认提示,自动同意并继续; -
-n R42
: 表示将新环境命名为R42。
这个命令可以用于在计算机上创建Python虚拟环境,从而实现不同项目之间的隔离和管理。通过将相关的依赖关系和软件包安装在特定环境下,可以避免不同项目之间对Python库和软件包的相互影响和冲突。同时,使用conda创建环境可以方便地管理和切换不同环境,以满足不同需求的应用场景。
-
在 R42 环境中安装 r-base=4.2。
conda 默认官方的软件包支持到R的版本4.2,如需更高版本需要第三方的软件包源(conda-forge或其他)。
(base) [lisi@localhost ~]$ conda activate R42
(R42) [lisi@localhost ~]$ conda install -c conda-forge r-base=4.2
(R42) [lisi@localhost ~]$ find ~/miniconda3/envs/R42/ -type "d" -name "lib"
/home/lisi/miniconda3/envs/R42/x86_64-conda-linux-gnu/lib
/home/lisi/miniconda3/envs/R42/lib
/home/lisi/miniconda3/envs/R42/lib/R/lib
(R42) [lisi@localhost ~]$
(R42) [lisi@localhost ~]$ conda env list
# conda environments:
#
base /home/lisi/miniconda3
R42 * /home/lisi/miniconda3/envs/R42
(R42) [lisi@localhost ~]$
2、使用 root 用户安装 rstudio-server , 通过配置文件让 rstudio-server 连接上 R42 内的 R
-
使用 root 用户安装 rstudio-server。
# 使用 wget 或 curl 下载rstudio-server,如果下载卡着不动可以试试加上 -4 参数(ipv4)。
wget -c https://download2.rstudio.org/server/rhel8/x86_64/rstudio-server-rhel-2023.06.0-421-x86_64.rpm
curl -C - -O https://download2.rstudio.org/server/rhel8/x86_64/rstudio-server-rhel-2023.06.0-421-x86_64.rpm
# 安装 rstudio-server 。(安装的时候要保证yum源能正常使用,因为它可能会通过yum安装几个依赖包。)
yum -y install rstudio-server-rhel-2023.06.0-421-x86_64.rpm
# 查看 rstudio-server 是否启动,默认情况下是失败的,因为系统下没有装R.
[root@localhost ~]# systemctl status rstudio-server
# 修改 /etc/rstudio/rserver.conf 文件,指定R的路径,及lib库的路径。
# R_HOME= 后面填写你安装R的虚拟环境的路径,可以通过conda env list 查看。
R_HOME="/home/lisi/miniconda3/envs/R42"
cat >> /etc/rstudio/rserver.conf << EOF
# 配置意味着身份验证超时时间为 0 分钟,也就是说,用户的身份验证状态将永久保持有效,直到用户主动注销或关闭浏览器。这通常用于不需要安全性要求很高的应用程序场景中,例如内部工具、测试环境等。
auth-timeout-minutes=0
# 配置意味着用户可以选择 "保持登录" 选项,并且在 30 天内,即使关闭了浏览器或重新启动了设备,用户也可以保持登录状态。这提供了比经常输入凭据更方便的登录方式,但也会增加一定的安全风险。
auth-stay-signed-in-days=30
rsession-which-r=${R_HOME}/bin/R
rsession-ld-library-path=${R_HOME}/lib:${R_HOME}/x86_64-conda-linux-gnu/lib
EOF
systemctl restart rstudio-server
systemctl status rstudio-server
[root@localhost ~]# cat /etc/rstudio/rserver.conf
# Server Configuration File
# 配置意味着身份验证超时时间为 0 分钟,也就是说,用户的身份验证状态将永久保持有效,直到用户主动注销或关闭浏览器。这通常用于不需要安全性要求很高的应用程序场景中,例如内部工具、测试环境等。
auth-timeout-minutes=0
# 配置意味着用户可以选择 "保持登录" 选项,并且在 30 天内,即使关闭了浏览器或重新启动了设备,用户也可以保持登录状态。这提供了比经常输入凭据更方便的登录方式,但也会增加一定的安全风险。
auth-stay-signed-in-days=30
rsession-which-r=/home/lisi/miniconda3/envs/R42/bin/R
rsession-ld-library-path=/home/lisi/miniconda3/envs/R42/lib:/home/lisi/miniconda3/envs/R42/x86_64-conda-linux-gnu/lib
[root@localhost ~]#
-
防火墙设置,允许 rstudio-server 使用的 8787/tcp 端口通行。
- 方法1:直接关闭防火墙。
systemctl stop firewalld
systemctl disable firewalld
- 方法2:允许所有IP访问 8787/tcp 端口。
firewall-cmd --permanent --zone=public --add-port=8787/tcp
firewall-cmd --reload
- 方法3:只允许本地的 192.168.30.0/24 网段访问 8787/tcp 端口。
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.30.0/24" port port="8787" protocol="tcp" accept"
firewall-cmd --reload
-
关闭selinux。
[root@localhost ~]# setenforce 0 && sed -i '/^SELINUX=/s/.*/SELINUX=disabled/' /etc/selinux/config
[root@localhost ~]# getenforce
Disabled
[root@localhost ~]#
[root@localhost ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@localhost ~]#
3、 通过网页访问 rstudio-server。
通过 ip a 查询自己的IP地址。
[root@localhost ~]# ip a | grep -Eo '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' | grep -v '127.0.0.1\|255'
192.168.30.12
192.168.60.145
[root@localhost ~]#
在浏览器中输入 http://192.168.30.12:8787
扩展
1、错误解决
如果在浏览器中登录后,提示 connot connect to R Session
- 第一种情况:
(我是使用 mamba 安装r-base=4.3时,遇到的这种情况,安装r-base小于4.3版本就可以)
在/etc/rstudio/rserver.conf 配置文件中未指定R lib 库的位置,指定R lib库的位置即可
# 在 /etc/rstudio/rserver.conf 配置文件中添加以下内容。把 /home/lisi/miniconda3/envs/R43 改为 你安装R的虚拟环境路径。
rsession-ld-library-path=/home/lisi/miniconda3/envs/R43/lib:/home/lisi/miniconda3/envs/R43/x86_64-conda-linux-gnu/lib
- 第二种情况:
(使用其他用户登录时,遇到的这种情况)
给创建conda的用户(lisi) 的家目录 /home/lisi 递归给 777 的权限。
chmod -R 777 /home/lisi
或者把要登录用户(zhangsan)的的附加组为设置为创建conda的用户(lisi) ,修改创建conda的用户(lisi)的家目录的属组权限设置为 rwx 。
chmod g+rwx /home/lisi
usermod -aG lisi zhangsan
2、 rstudio-server 管理命令
rstudio-server start #启动
rstudio-server stop #停止
rstudio-server restart #重启
查看运行中R进程
rstudio-server active-sessions
指定PID,停止运行中的R进程
rstudio-server suspend-session <pid>
停止所有运行中的R进程
rstudio-server suspend-all
强制停止运行中的R进程,优先级最高,立刻执行
rstudio-server force-suspend-session <pid>
rstudio-server force-suspend-all
RStudio Server临时下线,不允许web访问,并给用户友好提示
rstudio-server offline
RStudio Server临时上线
rstudio-server online
参考文档:
https://docs.posit.co/ide/server-pro/rstudio_pro_sessions/r_executable_and_libraries.html
https://docs.posit.co/ide/server-pro/reference/rserver_conf.html#rsession-settings
https://www.jianshu.com/p/ffc86a580844
https://blog.csdn.net/qq_41728601/article/details/125757419