使用shinyproxy部署shinshine应用程序时,在哪里放置.Renviron文件?

9wbgstp7  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(133)

我正在学习如何使用shinyproxy来部署R shiny应用程序,但我不知道在哪里放置包含用于访问数据库的全局变量的.Renviron文件。
Docker镜像构建没有任何错误,但当我使用以下命令启动容器时:

docker run -it -p 3838:3838 shinyproxy-template .

它没有在.Renviron文件中找到env变量,我最终在需要全局变量的R代码部分得到一个错误。
我当前的文件夹结构如下:

shinyproxy-template/
                   |- app-folder/
                   |- .gitignore
                   |- Dockerfile
                   |- README.md
                   |- app.Rproj
                   |- Rprofile.site
                   |- .Renviron

我尝试将.Renviron文件放入app-folder/中,然后再次构建docker镜像,但全局变量仍然无法访问。
我应该将.Renviron放在哪里,以便应用程序访问全局变量?

xam8gpfp

xam8gpfp1#

有多种选择:

.Renviron文件放到容器内的预期位置

您可以将COPY命令添加到Dockerfile,以将.Renviron文件复制到预期位置-即用户的主目录或WORKDIR位置(如果在Dockerfile中定义)。如果是root用户,则为:

COPY .Renviron /root/

.Renviron中的环境变量添加到Dockerfile中

添加如下行:

ENV VAR1="value1"
ENV VAR2="value2"

到您的Dockerfile

在shinyproxy配置中添加.Renviron的环境变量

您可以在application.yaml配置文件中定义环境变量,方法是使用

container-env:
  VAR1: VALUE1
  VAR2: VALUE2

container-env-file: /path/to/.Renviron

了解您的应用规范。请注意,此处的路径位于主机上,而不是容器内。

对于docker run

当你在shinyproxy之外执行docker run时,你可以使用参数--env-file,如下所示:

docker run -it -p 3838:3838 shinyproxy-template --env-file /path/to/shinyproxy-template/.Renviron

相关文档链接:

  • https://www.shinyproxy.io/documentation/configuration/#apps
  • https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file
ryoqjall

ryoqjall2#

    • 编辑:**看看@Max的解决方案。我们几乎在同一时间发布,但他的指示更清晰。

经过反复试验,我终于找到了一个解决办法。
首先,在shinyproxy外部启动容器,检查shinyproxy应用是否正常运行?使用docker的--env-file标志指定.Renviron文件路径。在我的情况下,因为Dockerfile.Renviron都在同一个文件夹中,所以我会这样做:

docker run -it --env-file .Renviron -p 3838:3838 shinyproxy-template .

应用程序现在将识别.Renviron文件中定义的env变量,并且没有错误!
然后,我切换到shinyproxy-2.6.1.jar文件所在的目录,并使用java -jar shinyproxy-2.6.1.jar再次运行它。当我试图启动我的shinyapp时出现了一个错误。它找不到环境变量。
所以我直接将它们添加到与shinyproxy-2.6.1.jar相同的位置的application.yml中:

- id: app-folder
    display-name: My App
    description: My App's title
    container-cmd: ["R", "-e", "shiny::runApp('/root/app-folder')"]
    container-image: openanalytics/shinyproxy-template
    container-env:
        ENV1: ENV1-VALUE
        ENV2: ENV2-VALUE
        ENV3: ENV3-VALUE
    access-groups: scientists

根据您的情况,将yml部分的必要部分替换为您这边的相应部分。这同样适用于环境变量。
事实上,让我只提供我的整个application.yml文件的原型,看看我添加的最后一个应用程序“wca”:

proxy:
  title: Open Analytics Shiny Proxy
  logo-url: https://www.openanalytics.eu/shinyproxy/logo.png
  landing-page: /
  # hide nav bar:
  hide-navbar: true
  heartbeat-rate: 10000
  heartbeat-timeout: 60000
  port: 8080
  authentication: ldap
  admin-groups: scientists
  # Example: 'simple' authentication configuration
  users:
  - name: jack
    password: password
    groups: scientists
  - name: jeff
    password: password
    groups: mathematicians
  # Example: 'ldap' authentication configuration
  ldap:
    url: ldap://ldap.forumsys.com:389/dc=example,dc=com
    user-dn-pattern: uid={0}
    group-search-base:
    group-search-filter: (uniqueMember={0})
    manager-dn: cn=read-only-admin,dc=example,dc=com
    manager-password: password
    # Docker configuration
  docker:
    url: http://localhost:2375
    port-range-start: 20000
  specs:
  - id: 01_hello
    display-name: Hello Application
    description: Application which demonstrates the basics of a Shiny app
    container-cmd: ["R", "-e", "shinyproxy::run_01_hello()"]
    container-image: openanalytics/shinyproxy-demo
    access-groups: [scientists, mathematicians]
  - id: 06_tabsets
    container-cmd: ["R", "-e", "shinyproxy::run_06_tabsets()"]
    container-image: openanalytics/shinyproxy-demo
    access-groups: scientists
  - id: euler
    display-name: Euler's number
    description: Adding another app to shinyproxy
    container-cmd: ["R", "-e", "shiny::runApp('/root/euler')"]
    container-image: openanalytics/shinyproxy-template
    access-groups: scientists
  - id: wca
    display-name: Wasanii
    description: WhatsApp Chat Analysis
    container-cmd: ["R", "-e", "shiny::runApp('/root/wca')"]
    container-image: wca
    container-env:
        FIREBASE_API_KEY: myfirebaseapikey
        FIREBASE_PROJECT_ID: myfirebaseprojectid
        FIREBASE_AUTH_DOMAIN: myfirebaseauthdomain
        FIREBASE_STORAGE_BUCKET: myfirebasestoragebucket
        FIREBASE_APP_ID: myfirebaseappid
        FIREBASE_DATABASE_URL: myfirebasedatabaseurl
    access-groups: scientists

logging:
  file:
    shinyproxy.log

显然有一个更好的解决方案直接引用.Renviron文件,但由于我不能弄清楚,这将可以。

相关问题