在群晖上安装RStudio服务器版

应网友 Python开垦者 的要求折腾,但老苏并不是程序员,对这种专业工具并不熟,所以错漏在所难免,见谅;

月初,R 社区大佬人物谢益辉,在个人博客宣布被 RStudio/Posit 离职,表面上只是个人理念和商业发展理念的冲突,但在老苏看来,更像是大环境下的迫不得已。

什么是 RStudio ?

RStudio 是为 R 语言设计的一种跨平台集成开发环境。其特色包括可客制化的软件套件视觉化界面与同团队开发的一系列数据可视化与出版工具。RStudio 有免费的自由软件版本及收费的专业版本,并分为在本地电脑上执行的桌面版和与在服务器上执行而可由浏览器连接后使用的服务器版。 

前言

RStudio 在群晖上安装本身非常简单,难点在于权限和身份,按官网提供的方式安装,会存在登录不成功的情况,表现为当你用默认用户 rstudio 登录,会显示 Error: Incorrect or invalid username/password,即便你通过环境变量 DEFAULT_USER 修改用户也无济于事

老苏发现问题可能出在登录 SSH 的用户上,因为老苏习惯用 root 登录群晖,导致容器启动时,进入了 rootless 模式,所以默认用户 rstudio 已经被删除了

1
2
rstudio    | setting minimum authorised user to 0 (RUNROOTLESS=true)
rstudio | deleting the default user (rstudio) since it is not needed.

如果用其他用户,在群晖中除了使用 sudo,似乎又没有足够的权限来访问 Docker 守护进程的 Unix 域套接字文件 /var/run/docker.sock,会显示下面的错误

1
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create?name=rstudio": dial unix /var/run/docker.sock: connect: permission denied.

而当你使用 sudo后,容器还是会进入了 rootless 模式,所以老苏姑且认为,在群晖上安装的 RStudio 服务器版,可能只能使用 root 用户登录,而不能使用默认用户 rstudio,或者自己设定的其他用户

当然,最好的办法还是,当遇到登录失败时,进日志看看容器工作在什么模式下

  • rootless 模式:默认用户名为 root
  • rootless 模式:默认用户名为 rstudio

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 rstudio ,选择第一个 rocker/rstudio,版本选择 latest

本文写作时, latest 版本对应为 4.3.2

docker 文件夹中,创建一个新文件夹 rstudio,并在其中建两个子文件夹 configworkspace

文件夹 装载路径 说明
docker/rstudio/config /home/rstudio/.config/rstudio 存放设置
docker/rstudio/workspace /home/rstudio/workspace 存放代码

端口

本地端口不冲突就行,不确定的话可以用命令查一下

1
2
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 容器端口
8788 8787

环境

可变
TZ 设置时区,默认值为 Etc/UTC
PASSWORD 设置用户密码

更多环境变量请参考官方的文档:https://rocker-project.org/images/versioned/rstudio.html#environment-variables

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 新建文件夹 rstudio 及子目录
mkdir -p /volume1/docker/rstudio/{config,workspace}

# 进入 rstudio 目录
cd /volume1/docker/rstudio

# 运行容器
docker run -d \
--restart unless-stopped \
--name rstudio \
-p 8788:8787 \
-v $(pwd)/config:/home/rstudio/.config/rstudio \
-v $(pwd)/workspace:/home/rstudio/workspace \
-e TZ=Asia/Shanghai \
-e PASSWORD=123456 \
rocker/rstudio

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: '3'

services:
rstudio:
image: rocker/rstudio
container_name: rstudio
restart: unless-stopped
ports:
- 8788:8787
volumes:
- ./config:/home/rstudio/.config/rstudio
- ./workspace:/home/rstudio/workspace
environment:
- TZ=Asia/Shanghai
- PASSWORD=123456

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 rstudio 及子目录
mkdir -p /volume1/docker/rstudio/{config,workspace}

# 进入 rstudio 目录
cd /volume1/docker/rstudio

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:8788 就能看到登录界面

用默认用户:rstudio,大概率会遇到登录失败,显示 Error: Incorrect or invalid username/password

密码就是我们环境变量 PASSWORD 中设定的值

如果日志中显示容器工作在 rootless,用户需改为 root,密码依然是我们环境变量 PASSWORD 中设定的值

现在可以开始使用了

参考文档

rocker-org/rocker-versioned2: Run current & prior versions of R using docker. rocker/r-ver, rocker/rstudio, rocker/shiny, rocker/tidyverse, and so on.
地址:https://github.com/rocker-org/rocker-versioned2

Rocker Project - The Rocker Project
地址:https://rocker-project.org/

Administration Guide - PAM Authentication
地址:https://docs.posit.co/ide/server-pro/authenticating_users/pam_authentication.html

Running RStudio Server with Docker - Dave Tang’s blog
地址:https://davetang.org/muse/2021/04/24/running-rstudio-server-with-docker/