node.js - 在 Elastic Beanstalk 上安装 mongodb 的推荐方法

标签 node.js mongodb ssh amazon-ec2 amazon-elastic-beanstalk

我已经看过 How to install mongodb in Elastic Beanstalk?日期为 2014 年,不再有效。以及 https://docs.mongodb.org/ecosystem/platforms/amazon-ec2/#manually-deploy-mongodb-on-ec2

我已经设置了一个在 node.js 上运行的新弹性 beanstalk 环境,其中包含 1 个 ec2 微实例“64bit Amazon Linux 2016.03 v2.1.0 running Node.js”

我已经尝试使用 ssh 连接到我的实例并使用 yum 命令安装 mongodb 包:

$ sudo yum install -y mongodb-org-server mongodb-org-shell mongodb-org-tools

并收到此回电:

Loaded plugins: priorities, update-motd, upgrade-helper
No package mongodb-org-server available.
No package mongodb-org-shell available.
No package mongodb-org-tools available.
Error: Nothing to do

当我第一次 ssh 进入我的实例时,我收到了这个错误警告:

This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH 
WILL BE LOST if the instance is replaced by auto-scaling. For more information 
on customizing your Elastic Beanstalk environment, see our documentation here: 
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

目前我的环境设置为单实例环境,以节省成本。但是,将来我将升级到自动缩放环境。

因此,我想问是否建议在 ec2 中通过 ssh 进行任何更改,还是应该只使用 EB CLI?

我在本地安装了 EC2 和 EB CLI,但是我以前从未使用过 EB CLI。如果我应该使用 EB,有没有人推荐安装 mongodb 的方法?

最佳答案

如果有人正在寻找答案,这是我从 aws 业务支持收到的建议。

部署到 Elastic Beanstalk 的所有代码都需要是“无状态的”IE。永远不要使用 SSH 或 FTP 直接对正在运行的 beanstalk 实例进行更改......因为这会导致不一致和/或数据丢失! - Elastic Beanstalk 不适用于非无状态应用程序。 该环境旨在根据您的网络/CPU 负载进行扩展和缩减,并从基础 AMI 构建新实例。如果某个实例或底层硬件出现问题,Elastic Beanstalk 将终止这些正在运行的实例并替换为新实例。因此,为什么不必对现有实例“直接”应用或完成任何代码修改,因为新实例不会知道这些直接更改。所有更改/代码都需要上传到 Elastic Beanstalk 控制台或 CLI 工具并推送到所有正在运行的实例。 有关 Elastic Beanstalk 设计概念的更多信息,请参阅以下链接 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.concepts.design.html

建议的解决方案: 考虑到上述情况,如果使用 MongoDB 存储应用程序数据,我们的建议是将 MongoDB 环境与 Node.js 应用程序解耦。 IE 在 Elastic Beanstalk 之外创建一个 MongoDB 服务器,例如直接在 EC2 实例上启动 MongoDB 并让您的 Elastic Beanstalk Node.js 应用程序使用应用程序中的连接设置连接到 MongoDB 服务器。

-创建 MongoDB 下面是一些示例链接,可能对您创建 MongoDB 服务器的方案有用。 在 EC2 上部署 MongoDB, https://docs.mongodb.org/ecosystem/platforms/amazon-ec2/ MongoDB Node 客户端 https://docs.mongodb.org/getting-started/node/client/ AWS 云上的 MongoDB 快速入门指南 http://docs.aws.amazon.com/quickstart/latest/mongodb/architecture.html

-向 Elastic Beanstalk 添加环境变量以引用您的 MongoDB 服务器 创建 MongoDB 服务器后,您可以使用环境变量将所需的连接设置传递到 Elastic Beanstalk 环境。 使用 .ebextensions .config 的示例,您可以添加 Mongo URL/端口/用户等。

选项设置: - option_name: MONGO_DB_URL value: "您的 MongoDB EC2 内部 IP 地址"

有关如何使用环境属性并从您的应用程序中读取它们的信息如下所示。 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.container.html#create_deploy_nodejs_custom_container-envprop 使用 .ebextensions .config 的信息可以在以下链接中找到 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html

或者,您也可以使用 cli 或通过 AWS 控制台设置环境变量 eb cli set 环境变量可以通过以下链接读取。 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-setenv.html 使用 AWS 控制台 设置系统属性(AWS 管理控制台) 打开 Elastic Beanstalk 控制台。 导航到您的环境的管理控制台。 选择配置。 在软件配置部分中,选择编辑。 在环境属性下,创建您的名称/值...

访问环境配置设置 在 AWS Elastic Beanstalk 中运行的 Node.js 环境中,您可以使用类似于以下示例的 process.env.ENV_VARIABLE 访问环境变量。 process.env.MONGO_DB_URL 进程.env.PARAM2

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.container.html#create_deploy_nodejs_custom_container-envprop

总结: 总之,我建议使用以下步骤将 MongoDB 与 Elastic Beanstalk 环境集成。 步骤 1) 在 Elastic Beanstalk 之外创建 MongoDB 服务器 第 2 步)在 Elastic Beanstalk 中创建连接到 MongoDB 服务器的 Node.js 应用程序

关于node.js - 在 Elastic Beanstalk 上安装 mongodb 的推荐方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36851887/

相关文章:

node.js - 在 Express/Node 中使用 sendFile 时出现随机 'ECONNABORTED' 错误

node.js - 使用 nano 从 View 中读取数据

mongodb - 聚合管道抛出错误 "A pipeline stage specification object must contain exactly one field."

qt - Qt中如何轻松建立SSH连接?

amazon-web-services - 通过堡垒主机将 ssh 端口转发到 VPC 中的 Elasticsearch 集群无法正常工作

background - 使用 nohup CLI 在 PHP 后台运行 php 脚本

node.js - Chrome 中的 "Unexpected response code: 503"。也许与heroku上的socket.io有关?

javascript - Async.js:在 waterfall 任务中创建的变量是否可以在另一个任务中使用?

mongodb 替换字符串的一部分

mongodb - 如何只返回选定的几个嵌入对象的对象?