Как исправить ошибки «404 (не найдено)» при поиске файлов CSS и Javscript в ShinyProxy - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь запустить блестящее приложение, используя ShinyProxy - то, что я делал много раз раньше.Однако это приложение неправильно использует какие-либо файлы CSS или JS, необходимые для его запуска.

Когда я запускаю приложение вручную с помощью docker run -p 3838:3838 my_app, все работает отлично.Однако при указании ShinyProxy на изображение my_app результирующему приложению не удается загрузить файлы CSS или JS.

Dockerfile

FROM openanalytics/r-base

MAINTAINER Daniel Beachnau "DannyBeachnau@gmail.com"

# Dependencies outside of R
RUN apt-get update && apt-get install -y \
    sudo \
    gdebi-core \
    pandoc \
    pandoc-citeproc \
    libcurl4-gnutls-dev \
    libcairo2-dev \
    libxt-dev \
    xtail \
    wget \
    libpq-dev \
    libmariadb-client-lgpl-dev \
    # Might be needed for the archivist R-Library
    dbus \
    systemd \
    # needed for odbc
    unixodbc-dev

RUN apt-get install apt-transport-https curl -y
RUN curl http://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update
RUN ACCEPT_EULA=Y apt-get install msodbcsql17 -y

# Download R-Packages
# tidyverse
RUN R -e "install.packages('tidyr')"
RUN R -e "install.packages('dplyr')"
RUN R -e "install.packages('readr')"
# Shiny Packages
RUN R -e "install.packages('shiny')"
RUN R -e "install.packages('shinycssloaders')"
RUN R -e "install.packages('shinydashboard')"
RUN R -e "install.packages('shinyWidgets')"
RUN R -e "install.packages('DT')"
RUN R -e "install.packages('shinyjs')"
RUN R -e "install.packages('flexdashboard')"
# Database Packages
RUN R -e "install.packages('odbc')"
RUN R -e "install.packages('RMySQL')"
# Other
RUN R -e "install.packages('devtools')"
RUN R -e "install.packages('lubridate')"
RUN R -e "install.packages('reshape2')"
RUN R -e "install.packages('grid')"
RUN R -e "install.packages('lemon')"
RUN R -e "install.packages('scales')"
RUN R -e "install.packages('ggthemes')"
RUN R -e "install.packages('ggplot2')"

RUN R -e "devtools::install_bitbucket(repo = 'my_repo/my_package',  auth_user = 'my_username', password = 'my_password')"

# copy the app to the image
COPY . /root

# run the script to update the app data
WORKDIR /root
RUN Rscript app_data_update.R

WORKDIR /root/app
COPY Rprofile.site /usr/lib/R/etc/
EXPOSE 3838
CMD ["R", "-e", "shiny::runApp('/root/app', host='0.0.0.0', port=3838)"]

application.yml

shiny:
  proxy:
    title: ShinyProxy Server
    logo-url: /images/logo-image.png
    landing-page: /
    heartbeat-rate: 10000
    heartbeat-timeout: 60000
    container-wait-time: 60000
    port: 8080
    authentication: ldap

    # Docker configuration
    docker:
      cert-path: /home/none
      url: http://localhost:2375
      port-range-start: 20000
    support:
      container-log-path: ./container-logs
      mail-to-address: DannyBeachnau@gmail.co,

  - name: my_apps_name
    display-name: Shiny App
    docker-image: dbeachnau/my_app
    groups: [Shiny Users Management]
    logo-url: /images/logo-image.png
    container-volumes: ["/path/to/app:/root/app"]


logging:
  file:
    shinyproxy.log

Вот как выглядит приложение в блестящем прокси.

проблема

Вот как выглядит мое приложение при запуске вручную.

желательно

Консоль в инструменте проверки Chrome изобилует ошибками, такими как

GET https://myshinyserver.com/container_name/font-awesome-5.3.1/css/all.min.css net::ERR_ABORTED 404 (Not Found)

У меня есть другие приложения, работающие на ShinyProxy, которые отображаются правильно, но яне может решить разницу между настройкой этих приложений и настройкой этого приложения.Сообщите мне, требуются ли дополнительные сведения для диагностики проблемы.Все отзывы приветствуются - спасибо.

Ответы [ 3 ]

0 голосов
/ 09 апреля 2019

Я решил свою проблему, хотя, это все еще может не считаться достаточным ответом или объяснением, потому что я не могу объяснить, почему это решение имеет значение. Я решил переписать Dockerfile, используя другой базовый образ, который теперь работает. Ничего другого в моем коде не изменилось - только Dockerfile. Рабочий файл Docker выглядит следующим образом:

FROM rocker/shiny-verse
# based on debian 9

MAINTAINER Daniel Beachnau "DannyBeachnau@gmail.com"

# Dependencies outside of R
RUN apt-get update && apt-get install -y \
    gnupg2 \
    apt-utils \
    sudo \
    gdebi-core \
    libxt-dev \
    xtail \
    wget

# Install ODBC driver from microsoft
RUN apt-get install apt-transport-https curl -y
RUN curl http://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update
RUN ACCEPT_EULA=Y apt-get install msodbcsql17 -y

# Download R-Packages
# Shiny Packages
RUN R -e "install.packages('shinycssloaders')"
RUN R -e "install.packages('shinydashboard')"
RUN R -e "install.packages('shinyWidgets')"
RUN R -e "install.packages('DT')"
RUN R -e "install.packages('shinyjs')"
RUN R -e "install.packages('flexdashboard')"
# Database Packages
RUN R -e "install.packages('odbc')"
RUN R -e "install.packages('RMySQL')"
# Other
RUN R -e "install.packages('lubridate')"
RUN R -e "install.packages('reshape2')"
RUN R -e "install.packages('scales')"
RUN R -e "install.packages('ggthemes')"
RUN R -e "install.packages('ggplot2')"

RUN R -e "devtools::install_bitbucket(repo = 'my_repo',  auth_user = 'my_username', password = 'my_password')"

# copy the app to the image
COPY . /root

# run the script to update the app data
WORKDIR /root
RUN Rscript app_data_update.R

WORKDIR /root/app
COPY Rprofile.site /usr/lib/R/etc/
EXPOSE 3838
CMD ["R", "-e", "shiny::runApp('/root/app', host='0.0.0.0', port=3838)"]

Если у кого-то есть понимание того, почему это поведение наблюдается, я бы с удовольствием его услышал, потому что я, по меньшей мере, озадачен.

0 голосов
/ 10 апреля 2019

Вы, вероятно, видите это с Shiny v1.3.0, а не с более ранними версиями.Если это так, то это, вероятно, из-за неправильной конфигурации директив прокси-сервера NGINX.Я записал детали здесь , но я также опубликую существенные детали здесь.

proxy_set_header Connection "upgrade";

Эта директива заставляет NGINX добавлять заголовок Connection: upgrade для каждого HTTP-запроса., когда предполагается, что он используется только для WebSockets.

Эта линия рекомендуется самим NGINX Inc., однако эти рекомендации предназначены для прокси трафика, который является исключительно WebSockets, тогда как трафик Shiny является комбинацией обычногоHTTP-запросы и WebSockets.Более старые версии блестящей / httpuv не возражали против этой ситуации, но новые версии более строгие.

Правильная конфигурация выглядит примерно так:

http {

  map $http_upgrade $connection_upgrade {
      default upgrade;
      ''      close;
    }

  server {
    listen 80;


    location / {
      proxy_pass http://localhost:3838;
      proxy_redirect / $scheme://$http_host/;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_read_timeout 20d;
      proxy_buffering off;
    }
  }
}

См. Статьи, ссылки на которые приведены в Сообщение сообщества RStudio для других примеров.

0 голосов
/ 09 апреля 2019

Вам потребуется установить запрашиваемый шрифт вверху вашего Dockerfile. Вы можете добавить его в свой список «Зависимости вне R»:

sudo apt-get install fonts-font-awesome
...