Docker部署OpenCPU
使用 Docker 启动 OpenCPU + RStudio 并挂载本地目录
该配置用于将本地目录
/opt/opencpu
映射为容器内开发环境,开放 RStudio 和 OpenCPU 接口用于 API 开发与测试。
官方手册: https://opencpu.github.io/server-manual/opencpu-server.pdf
Opencpu的dockerfile:https://github.com/opencpu/opencpu-server/blob/master/docker/base/Dockerfile
Rstudio的dockerfile:https://github.com/opencpu/opencpu-server/blob/master/docker/rstudio/Dockerfile
🚀 启动命令
#安装2.2.9
docker run -d \
--name opencpu-rs \
-v /opt/opencpu/code:/home/rstudio \
-v /opt/opencpu/data:/mnt/data \
-v /opt/opencpu/Rlibs:/usr/local/lib/R/site-library \
-p 18787:8787 \
-p 18004:8004 \
opencpu/rstudio:v2.2.9
#按转最新版
docker run -d \
--name opencpu-rs \
-p 18004:8004 \
--restart=always \
-v /opt/opencpu/code:/home \
-v /opt/opencpu/data:/mnt/data \
-v /opt/opencpu/Rlibs:/usr/local/lib/R/site-library \
opencpu/rstudio
📌 参数说明
参数 | 说明 |
---|---|
--name |
容器命名为 opencpu-rs |
-e PASSWORD=123456 |
设置登录密码,用户名固定为 rstudio |
/opt/opencpu/code:/home/rstudio |
存你的 .R 脚本、项目代码 |
/opt/opencpu/data:/mnt/data |
存业务数据、用户上传 |
/opt/opencpu/Rlibs:/usr/local/lib/R/site-library |
存 R 包(持久化依赖,用R命令.libPaths()查看) |
-p 18787:8787 |
映射 RStudio Web IDE 到主机 18787 端口 |
-p 18004:8004 |
映射 OpenCPU 接口服务到主机 18004 端口 |
✅ RStudio Web IDE登录方式
- 打开浏览器,访问:http://localhost:18787
- 用户名:
opencpu
- 密码:
123456
忘记密码使用 sudo passwd opencpu重置opencpu账户的密码,也可以重置其他账号的密码。
docker exec -it opencpu-rs bash
#新增账户
useradd -m rstudio
#修改密码
sudo passwd rstudio
#查看账户
cat /etc/passwd
登录成功后Web版集成环境如下
🌐 测试 OpenCPU
#访问opencpu
http://localhost:18004/ocpu/
#访问rstudio
http://localhost:18004/rstudio/
#R包的访问
http://localhost:18004/ocpu/library/你的包名/R/你的函数/json
本容器用于开发、调试 R 包和暴露 HTTP 接口,适合个人和小团队的数据 API 原型开发。
🧪 Demo:编写并测试一个简单的 R API 接口
1. 打开 RStudio(浏览器访问 http://localhost:18787)
登录账号 rstudio
,密码 123456
2. 创建一个 R 包项目
RStudio 菜单选择:
File → New Project → New Directory → R Package
填写:
- Package Name:
mypkg
- Project directory:
/home/rstudio
点击“Create Project”。
如果创建失败需要赋予权限
chmod -R 777 /home/rstudio/
3. 编写接口函数
编辑 R/hello.R
文件,写入以下代码:
#' Say Hello
#' @param name 名字
#' @get /hello
function(name = "World") {
paste("Hello,", name, "!")
}
4. 构建并安装 R 包
Rstudio(非OpenCPU部署)
手动点击Check、Build、Install。
Install后,包安装所在目录如下(本地lib),并非.libPaths()所输出的系统lib包目录; 意义是给本地开发和测试用,而不是部署。
• Windows: C:/Users/你的用户名/Documents/R/win-library/版本号/
• macOS/Linux: ~/R/x86_64-pc-linux-gnu/版本号/
R命令安装Source Package
# 安装devtools及其依赖包
install.packages("devtools", dependencies = TRUE)
# 使用devtools
devtools::document() # 生成 NAMESPACE
devtools::build() # 打包
install.packages("mypkg_0.1.tar.gz", repos = NULL, type = "source") # 安装source源码包
Bash命令安装Binary Package
如果是外来的Build Binary Package包,则通过R CMD INSTALL *.tar.gz安装。
sudo R CMD INSTALL mypkg_0.1.0_R_x86_64-pc-linux-gnu.tar.gz
验证是否安装成功
#方案一:如果没报错,说明 R 能识别这个包。
R
library(bepkg)
#方案二:查看已安装的包
.libPaths()
installed.packages()[,"Package"]
5. 测试 API 接口
浏览器访问以下地址:
http://localhost:18004/ocpu/library/mypkg/R/hello/json?name=秋先生
返回结果:
["Hello, 秋先生 !"]
说明 API 调用成功。
现在已经完成了 R API 的编写、安装和测试。可添加更多接口函数,实现完整的后端服务逻辑。
遇到的问题
pdflatex未安装
Error in texi2dvi(file = file, pdf = TRUE, clean = clean, quiet = quiet, : pdflatex is not available
#进入docker容器,安装精简版pdflatex
sudo apt install texlive-latex-base texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended
install的路径是/home/rstudio/R/x86_64-pc-linux-gnu-library/4.5
以当前用户的身份执行(比如 rstudio 用户),所以默认会安装到当前用户的 R 包库/home/rstudio/R/x86_64-pc-linux-gnu-library/4.5;而 OpenCPU 的系统服务运行时通常是以 www-data 或 opencpu 用户身份运行,它只识别安装在系统级路径下的包/usr/lib/opencpu/library/
解决方案
#方法一:以root方式执行会安装到/usr/local/lib/R/site-library
sudo R CMD INSTALL bepkg_0.1.0.tar.gz
#方法二:指定安装路径为 OpenCPU 库路径
#进入容器
sudo R CMD INSTALL -l /usr/lib/opencpu/library bepkg_0.1.0.tar.gz
#或者在 R 里用
install.packages("bepkg_0.1.0.tar.gz", repos = NULL, type = "source", lib = "/usr/lib/opencpu/library")
#方法三:直接拷贝已安装包
sudo cp -r /home/rstudio/R/x86_64-pc-linux-gnu-library/4.5/bepkg /usr/lib/opencpu/library/
部署为APP
cd bepkg/
mkdir www
echo '<h1>Hello from App</h1>' > www/index.html
mkdir -p inst
mv www inst/
#编译源码包
R CMD build .
#使用root权限安装源码包
docker exec -it opencpu-rs bash
cd /home/rstudio
sudo R CMD INSTALL bepkg_*.tar.gz
检查方案一:
cd /usr/local/lib/R/site-library/yourpkg/
ls -l
检查是否包含:
•R/
•www/ ← 这个是关键!
•DESCRIPTION
•NAMESPACE
如果 www/ 不存在,OpenCPU 就不会把它当 App 处理。
检查方案二:
http://localhost/ocpu/apps/
会列出所有被识别为 App 的包。
没有识别为app包
1.sudo nano /etc/opencpu/server.conf最后一行添加 "apps": ["/usr/local/lib/R/site-library"]
2./ocpu/apps/bepkg/www/index.html请求返回Github App bepkg/www not installed on this server
说明opencpu把这个 bepkg 当作“GitHub App”,而不是你本地安装的包。
App 包:
DESCRIPTION 中的 Type: App
确认 inst/www/ 目录结构
重新打包
