plumbr 安全吗?

Is plumbr secure?

我的理解是 plumbr 允许您将任何 R 脚本变成 API 终点。您可以将请求发送到 API 端点,它将 return 您在 R 脚本中定义的输出。

假设我在 Docker 实例中托管脚本,并且发送 api 请求的机器有一个到该机器的 ssh 隧道。

假设我发送此数据帧作为对 plumbr 中 api 请求的响应。

my_data <- data.frame(city = c("Chicago", "New York", "Cincinatti", "Green Bay"), value = c(30, 50, 70, 95))

从我的请求到接收数据,它必须经过什么路径?

它是否沿着这条路径经过外部机器?

为了在 docker 容器中使用 plumber,您必须:

  1. 制作一个包含所有依赖项的 Dockerfile

  2. Link里面docker-compose.yml

制作 Dockerfile

在本例中,您使用 r-script 制作图像,其中路线为 src/myscript.R

FROM rocker/r-apt:bionic

RUN apt-get update && \
    apt-get install -y -qq \
    libmariadb-client-lgpl-dev \
    r-cran-plumber \
    r-cran-reshape2 \
    r-cran-rmysql \
    r-cran-dplyr

COPY src src
RUN chmod 755 src

WORKDIR /src
RUN chmod 777 myscript.R

EXPOSE 8000

CMD ["Rscript","myscript.R"]

为了使用 Dockerfile 构建镜像 运行

docker image build -t my-plumber-image .

注意最后的.是当前工作目录,-t代表"tag"

Link里面的图片docker-compose

version: '3'

services:
 mysql:
   image: mysql:5.7
   container_name: mysql-container
   environment:
     - MYSQL_ROOT_PASSWORD=mypassword
   ports:
     - "3306:3306"
 plumber:
   image: my-plumber-image
   build: my-plumber-image
   container_name: plumber-container
   ports:
     - "8000:8000"
   links:
     - mysql

在 link 水管工访问其他服务后,您可以像任何其他 POST/GET 请求一样通过端口 8000 进行访问。 ip 由本地计算机定义。

我建议您使用邮递员进行请求测试。希望这可以帮到你。

我没有提到 Rplumber 的任何例子,因为在他们的网站上,这是一个非常好的简短例子。

数据库连接

如果要连接到容器,请使用以下脚本:

DB_conn <- function(){
return(RMySQL::dbConnect(RMySQL::MySQL(),
          user = 'root', 
          password = 'mypassword',
          dbname = 'mydatabase',
          host = HOST, # Container name like "myservice_mysql_1" look in the logs
          port = PORT) # Default port 3306 
      )
}