Plumbr безопасен? - PullRequest
       45

Plumbr безопасен?

0 голосов
/ 03 мая 2020

Насколько я понимаю, plumbr позволяет превратить любой R-скрипт в конечную точку API. Вы можете отправлять запросы в конечную точку API, и она будет возвращать выходные данные, которые вы определили в сценарии R.

Давайте предположим, что я размещаю сценарий в экземпляре Docker и что машина отправляет запрос API имеет туннель s sh к машине.

Допустим, я отправляю этот фрейм данных в ответ на запрос API в plumbr.

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

Какой путь он должен пройти к go между моим запросом и получением данные?

Идет ли он через внешние машины по этому пути?

1 Ответ

2 голосов
/ 03 мая 2020

Чтобы использовать plumber внутри контейнера docker, вам необходимо:

  1. Создать Dockerfile со всеми зависимостями

  2. Ссылка внутри docker -compose.yml

Создание файла Docker

В этом примере вы создаете изображение с 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 обозначает «тег»

Свяжите изображение внутри 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

После того, как сантехник свяжется с другими службами, доступ к которым вы можете получить через порт 8000, как и любой другой запрос POST / GET. 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 
      )
}
...