寻求帮助在 AWS EC2 实例上启动使用 golem 框架构建的 dockerized 闪亮应用程序

如何解决寻求帮助在 AWS EC2 实例上启动使用 golem 框架构建的 dockerized 闪亮应用程序

是否有人拥有在 AWS EC2 实例上启动使用 golem 框架构建的闪亮 dockerized 应用程序的资源或之前的示例?主要是,我可以使用一些帮助来配置 Dockerfile、shiny-server.conf 和 Shiny-server.sh 文件

该应用程序严重依赖 Postgresql 数据库来管理用户数据。我已经能够使用本地 docker 容器部署应用程序,但我不确定如何在 EC2 实例上导航。这主要是因为 golem 框架与 Shiny 应用程序的传统结构(server.r、ui.r、app.r)略有不同。我们需要将此应用程序容器化,因为有一个需要保持包含的全局变量用户 ID,以及至少四个唯一的用户数据集围绕每个图像浮动。我通常不会使用 AWS EC2 实例来为应用程序提供服务,但这是我们在项目团队中讨论过的。

我不确定的另一个元素是 EC2 实例类型。图像约为 2.5Gb(并且还在增长)。该应用程序可能为每位用户保存超过 500Mb 的数据。我们有大约 3000 美元用于托管,预计至少可以持续两年(包括 RDS 成本)。一般来说,我不确定给定大小的应用程序的价格是否可行。

我的项目团队正在通过这种设置进入未知领域,因此非常欢迎任何建议。

这是我认为应该为 AWS EC2 实例设置的工作 Dockerfile。

FROM rocker/r-ver:4.0.3
RUN apt-get update && apt-get install -y  git-core \
                                          sqlite3 libsqlite3-dev \
                                          libcurl4-openssl-dev \
                                          libgit2-dev \
                                          libicu-dev \
                                          libssh2-1-dev \
                                          libssl-dev \
                                          libxml2-dev \
                                          libpng-dev \
                                          libudunits2-dev \
                                          libgdal-dev \
                                          libproj-dev \
                                          libgeos-dev \
                                          make pandoc pandoc-citeproc \
                                          zlib1g-dev \
                                          && rm -rf /var/lib/apt/lists/*
RUN echo "options(repos = c(CRAN = 'https://packagemanager.rstudio.com/all/latest/'),download.file.method = 'libcurl')" >> /usr/local/lib/R/etc/Rprofile.site
RUN R -e 'install.packages("remotes")'
RUN R -e 'remotes::install_github("r-lib/remotes",ref = "97bbf81")'

RUN Rscript -e 'remotes::install_version("glue",upgrade="never",version = "1.4.2")'
RUN Rscript -e 'remotes::install_version("processx",version = "3.4.4")'
RUN Rscript -e 'remotes::install_version("pkgload",version = "1.1.0")'
RUN Rscript -e 'remotes::install_version("htmltools",version = "0.5.0")'
RUN Rscript -e 'remotes::install_version("attempt",version = "0.3.1")'
RUN Rscript -e 'remotes::install_version("testthat",version = "3.0.0")'
RUN Rscript -e 'remotes::install_version("shiny",version = "1.5.0")'
RUN Rscript -e 'remotes::install_version("config",version = "0.3")'
RUN Rscript -e 'remotes::install_version("golem",version = "0.2.1")'

RUN Rscript -e 'remotes::install_version("shinydashboard",version = "0.7.1")'
RUN Rscript -e 'remotes::install_version("usmap",version = "0.5.1")'
RUN Rscript -e 'remotes::install_version("rgeos",version = "0.5-5")'
RUN Rscript -e 'remotes::install_version("tidyverse",version = "1.3.0")'
RUN Rscript -e 'remotes::install_version("shinyWidgets",version = "0.5.4")'
RUN Rscript -e 'remotes::install_version("leaflet",version = "2.0.3")'
RUN Rscript -e 'remotes::install_version("sf",version = "0.9-6")'
RUN Rscript -e 'remotes::install_version("DBI",version = "1.1.0")'
RUN Rscript -e 'remotes::install_version("rpostgis",version = "1.4.3")'
RUN Rscript -e 'remotes::install_version("ggplot2",version = "3.3.2")'
RUN Rscript -e 'remotes::install_version("rgdal",version = "1.5-18")'
RUN Rscript -e 'remotes::install_version("Rsqlite",version = "2.2.1")'
RUN Rscript -e 'remotes::install_version("shinyjs",version = "2.0.0")'
RUN Rscript -e 'remotes::install_version("tigris",version = "1.0")'
RUN Rscript -e 'remotes::install_version("sp",version = "1.4-4")'
RUN Rscript -e 'remotes::install_version("RCurl",version = "1.98-1.2")'
RUN Rscript -e 'remotes::install_version("DT",version = "0.16")'
RUN Rscript -e 'remotes::install_version("rmarkdown",version = "2.5")'
RUN Rscript -e 'remotes::install_version("knitr",version = "1.30")'

RUN mkdir /build_zone
ADD . /build_zone
workdir /build_zone
RUN R -e 'remotes::install_local(upgrade="never")'
EXPOSE 3838

copY shiny-server.sh /usr/bin/shiny-server.sh
copY shiny-customized.config /etc/shiny-server/shiny-server.conf

CMD R -e "options('shiny.port'=3838,shiny.host='0.0.0.0');my_app::run_app()"

RUN ["chmod","+x","/usr/bin/shiny-server.sh"]

CMD ["/usr/bin/shiny-server.sh"]

shiny-server.conf

# Instruct Shiny Server to run applications as the user "shiny"
run_as shiny;

# Define a server that listens on port 3838
server {
  listen 3838;
 
  # Define a location at the base URL
  location / {
   
    # Host the directory of Shiny Apps stored in this directory
    app_dir /srv/shiny-server/ga-reporter;
   
    # Log all Shiny output to files in this directory
    log_dir /var/log/shiny-server;
   
    # When a user visits the base URL rather than a particular application,# an index of the applications available in this directory will be shown.
    directory_index on;
  }
}

闪亮-server.sh

#!/bin/sh

# ShinyServer: Make sure the directory for individual app logs exists
mkdir -p /var/log/shiny-server
chown -R shiny.shiny /var/log/shiny-server

# RUN ShinyServer
exec shiny-server >> /var/log/shiny-server.log 2>&1

提前致谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?