Fork me on GitHub

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登录方式

忘记密码使用 sudo passwd opencpu重置opencpu账户的密码,也可以重置其他账号的密码。

docker exec -it opencpu-rs bash
#新增账户
useradd -m rstudio
#修改密码
sudo passwd rstudio
#查看账户
cat /etc/passwd

登录成功后Web版集成环境如下
image

🌐 测试 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

image

填写:

  • Package Name:mypkg
  • Project directory:/home/rstudio
    点击“Create Project”。
    如果创建失败需要赋予权限
chmod -R 777 /home/rstudio/

3. 编写接口函数

image

编辑 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/版本号/
image

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

image


验证是否安装成功

#方案一:如果没报错,说明 R 能识别这个包。
R
library(bepkg)

#方案二:查看已安装的包
.libPaths()
installed.packages()[,"Package"]

image

5. 测试 API 接口

浏览器访问以下地址:

http://localhost:18004/ocpu/library/mypkg/R/hello/json?name=秋先生

返回结果:

["Hello, 秋先生 !"]

说明 API 调用成功。
image


现在已经完成了 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/

image

部署为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"]
image
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/ 目录结构
重新打包

posted @ 2025-05-21 09:43  秋夜雨巷  阅读(33)  评论(0)    收藏  举报