AWS Elastic Beanstalk 上的闪亮服务器与 Docker

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk 上的闪亮服务器与 Docker【英文标题】:Shiny Server on AWS Elastic Beanstalk with Docker 【发布时间】:2020-08-13 21:06:05 【问题描述】:

如何通过 Shiny Server 在部署到 Elastic Beanstalk 的 Docker 容器中部署闪亮的应用程序?

理论上,可以使用 Docker 容器在 AWS Elastic Beanstalk 上运行 R/Shiny(服务器)。不幸的是,我没有看到任何关于这个主题的教程,我的尝试失败了。

可以在具有自动缩放功能的 EC2 实例上部署 Shiny Server(已经完成了),因此 EB 应该不是什么大问题。但同样,我的经验和知识是有限的。

【问题讨论】:

我昨天离得很近,但在 nginx 部分失败了。如果你愿意,我可以分享 Dockerfile GH gist。休息是模板闪亮的例子(间歇泉直方图) 【参考方案1】:

看起来这样做很简单。这是 Shiny Server 运行示例的最小 Dockerfile。

FROM rocker/shiny:3.6.3
USER shiny
EXPOSE 3838
CMD ["/usr/bin/shiny-server.sh"]

您可以直接从 ElasticBeanstalk 界面上传。

这里有两个非常重要的基本错误,可能会给 EB 部署带来麻烦

从 Dockerfile 进行的整个安装不应超过 300 秒(由于 R tidyverse 安装,我遇到了此错误)。 如果您上传文件夹,请确保您的文件(尤其是 Dockerfile)没有父文件夹。

【讨论】:

嗨,berkorbay,我也遇到了关于 tidyverse 安装的问题。您对此有什么建议吗?我正打算开始使用 data.table 代替生产。将 tidyverse 拆分为 dplyr 等。没有让我到任何地方。 @AaronGorman 一个快捷解决方案可能正在使用已安装的 tidyverse docker 镜像,例如 hub.docker.com/r/rocker/shiny-verse。【参考方案2】:

这是完整过程的草图,包括安装额外的 R 包。

将闪亮的应用程序放在名为 apps 的目录中。多个应用可以存在于应用的多个子目录中。

使用以下内容创建一个名为 Dockerfile.base 的文件。

FROM rocker/shiny
# Install more R packages like this:
RUN . /etc/environment && R -e "install.packages(c('ROCR', 'gbm'), repos='$MRAN')"

在本地构建并推送到 AWS ECR。按照 AWS 的说明进行操作,但这里有一个草图。

# region="us-west-1"
# aws_account_id=123456789
aws ecr get-login-password --region $region | docker login --username AWS --password-stdin $aws_account_id.dkr.ecr.$region.amazonaws.com
docker build -t rshiny-base Dockerfile.base
docker tag rshiny-base:latest $aws_account_id.dkr.ecr.$region.amazonaws.com/rshiny-base:latest
docker push $aws_account_id.dkr.ecr.$region.amazonaws.com/rshiny-base:latest

使用以下内容创建一个新的 Dockerfile。请注意,它会将您的应用复制到映像中。

FROM <aws_account_id>.dkr.ecr.<region>.amazonaws.com/rshiny-base
USER shiny
COPY apps /srv/shiny-server
EXPOSE 3838
CMD ["/usr/bin/shiny-server.sh"]

Git-commit,创建一个 Elastic Beanstalk 应用程序,然后部署。这是一个草图:

eb init
eb create shiny

我在博客文章中写了完整的程序 https://www.highonscience.com/blog/2021/06/02/shiny-apps-elastic-beanstalk/.

【讨论】:

以上是关于AWS Elastic Beanstalk 上的闪亮服务器与 Docker的主要内容,如果未能解决你的问题,请参考以下文章

如何避免 AWS Elastic Beanstalk 上的 TooManyApplicationVersion 异常?

反应:AWS Elastic Beanstalk 上的 502 错误网关

AWS Elastic Beanstalk 上的 Wordpress

AWS Elastic Beanstalk 上的 Spring Boot 并记录到文件

AWS Elastic Beanstalk 上的 Django manage.py

如何获取命令以从 Elastic Beanstalk 上的 Dockerfile.aws.json 运行?