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
,您必须:
制作一个包含所有依赖项的 Dockerfile
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
由本地计算机定义。
我建议您使用邮递员进行请求测试。希望这可以帮到你。
我没有提到 R
和 plumber
的任何例子,因为在他们的网站上,这是一个非常好的简短例子。
数据库连接
如果要连接到容器,请使用以下脚本:
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
)
}
我的理解是 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
,您必须:
制作一个包含所有依赖项的 Dockerfile
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
由本地计算机定义。
我建议您使用邮递员进行请求测试。希望这可以帮到你。
我没有提到 R
和 plumber
的任何例子,因为在他们的网站上,这是一个非常好的简短例子。
数据库连接
如果要连接到容器,请使用以下脚本:
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
)
}