前言
非专业人士可忽略此文。
RStudio/R是我最常使用的服务端应用之一。然而,我上一次在Ubuntu安装RStudio/R还是2018-2019年间,当时还是用R 3.6。如今R已经出到至少4.3了,很多东西已经发生了变化。由于较新版本的TCGABiolink包需要R 4.0+才支持,所以我动了重装R语言的心思。当时安装RStudio/R时还不知道docker,印象中直接安装原生版本十分麻烦;因此我想使用docker安装RStudio/R。
经过一番了解,我发现已经有了现成的系列解决方案—— Rocker Project – The Rocker Project:
Rocker项目提供了多种版本/类型的RStudio/R版本,挺不错的:
刚好最近有小伙伴问我能不能搭建一个RStudio给他用。如果我用Docker,可以直接Copy一个容器给他,这样他也省去了不少安装依赖的功夫(往往十分麻烦和费时)。
本文记录一些安装的细节和问题,以泽后人!
测试环境
在自己的物理服务器上运行的:
uname -a # Linux xxx 5.4.0-050400-generic #201911242031 SMP Mon Nov x86_64 x86_64 x86_64 GNU/Linux
docker --version # Docker version 19.03.5, build 633a0ea838
docker-compose --version # Docker Compose version v2.2.2
准备工作
创建目录:
work=~/docker/rstudio
mkdir -p $work; cd $work
指定一个端口,比如1234
。以Ubuntu的防火墙为例:
sudo ufw allow 1234/tcp comment 'rstudio' && sudo ufw reload
配置yaml
我使用的是rocker/tidyverse
,因为它包含了tidyverse和devtools的系列依赖包,这对于我这个R语言开发级用户来说是必要的。
version: "3.6"
services:
rstudio:
# image: rocker/tidyverse:4.1.0 # 某些系统可能要较低版本才可用
image: rocker/tidyverse:latest
container_name: rstudio
restart: on-failure
volumes:
# - ./R:/usr/local/lib/R
# - ./rstudio:/home/rstudio # 复制出来后重新挂载
- ./workspace:/home/rstudio/workspace
- /path01:/path01
- /path02:/path02
environment:
- ROOT=TRUE
- PASSWORD=your_password # 按需修改
ports:
- 1234:8787 # 按需修改
networks:
- default
networks:
default:
name: rstudio
这里的PASSWORD
是登陆RStudio时用的,请自定义一个强密码。/path01
和/path02
则是自定义的宿主机路径,一般用来保存R的Project;它可以直接映射为容器里的同名路径。挺方便的(ฅ´ω`ฅ)
直接上线该stack:
docker-compose up -d
通过docker-compose logs -f
观察到该日志后:
rstudio | [cont-init.d] done.
rstudio | [services.d] starting services
rstudio | [services.d] done.
表明服务启动成功。这时先不要使用RStudio,而是直接copy两个重要的文件夹出来:
docker cp rstudio:/home/rstudio $work/; docker cp rstudio:/usr/local/lib/R $work/
sudo chmod -R 777 $work/R $work/rstudio
这时先下线stack:
docker-compose down
将docker-compose.yml中两个volume的#
号去除,最终就是这样:
version: "3.6"
services:
rstudio:
# image: rocker/tidyverse:4.1.0 # 某些系统可能要较低版本才可用
image: rocker/tidyverse:latest
container_name: rstudio
restart: on-failure
volumes:
- ./R:/usr/local/lib/R
- ./rstudio:/home/rstudio # 复制出来后重新挂载
- /path01:/path01
- /path02:/path02
environment:
- ROOT=TRUE
- PASSWORD=your_password # 按需修改
ports:
- 1234:8787 # 按需修改
networks:
- default
networks:
default:
name: rstudio
然后再重新上线:
docker-compose up -d
这两个文件夹是很重要的,其中/usr/local/lib/R
就是R的安装目录,里面包含packages和系列设置,映射至宿主机有利于自定义设置,也便于迁移和转移。/home/rstudio
则是RStudio的默认工作目录。
NPM & DDNS-Go
不了解Nginx Proxy Manager用法的小伙伴,请看《Docker系列 两大神器NPM和ddns-go的安装》。
ddns-go或者域名托管商后台解析好域名,比如rstudio.hwb0307.com
。假设服务器的局域网IP是192.168.1.123
。
添加一个Proxy Host,反代地址是http://192.168.1.123:1234
。可用泛域名的SSL证书。
我在实际使用时这一步偶尔会返回502 Bad Gateway
错误,原因未明。以后再搞。
使用
使用时,访问http://192.168.1.123:1234
或https://rstudio.hwb0307.com
,之后有一个登陆界面,输入用户名/密码即可:
进去后,简单地设置一下布局、字体啥的,就可以正常使用了!和Windows客户端是一样的:
其它设置
隐藏代码边界线
在较新版本的RStudio中,当你显示界面比较大时,会有一条很丑的线:
这条线其实是code margin line,它可以这样隐藏:
你将Margin column设置得大一些估计也行。
更改镜像
我们可以在R的根目录(./etc/Rprofile.site
)下定义镜像。在R的根目录下运行下面命令:
cat >$work/R/etc/Rprofile.site<<EOF
# options(repos = c(CRAN = 'https://packagemanager.posit.co/cran/__linux__/focal/2021-08-09'), download.file.method = 'libcurl')
options(repos = c(CRAN = "https://mirrors.tuna.tsinghua.edu.cn/CRAN"), BioC_mirror = "https://bioconductor.org")
# https://docs.rstudio.com/rspm/admin/serving-binaries/#binaries-r-configuration-linux
options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version["platform"], R.version["arch"], R.version["os"])))
EOF
Conda相关
请暂时忽略
# 在conda里安装R
conda install -c conda-forge r-base r-devtools --y
小结
本教程的方案和官网有点不一样。但这样挂载出来后,新旧安装的包都会在R文件夹中,这样只要copy整个$work
目录,简单改一下docker-compose.yml的端口号和密码等参数,就可以给其它同事使用了。使用docker就是方便!
---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍
benben 看看这个对项目的影响大吗?https://hiddenlayer.com/research/r-bitrary-code-execution/
如果不轻易使用不明来源的.rds文件问题应该不大。而且在未来的版本也会修复该问题。
看网上说docker很多镜像站点都已经被墙了
我没什么感觉 (ฅ´ω`ฅ) 正常使用中
赞赞赞!
你平时会用这玩意?