从另一台服务器连接到 aws 服务器上的 MongoDB
Posted
技术标签:
【中文标题】从另一台服务器连接到 aws 服务器上的 MongoDB【英文标题】:Connect to MongoDB on aws Server From Another Server 【发布时间】:2016-09-02 18:14:40 【问题描述】:我正在从我的本地主机创建一个 javascript meteor 应用程序,但我希望我的数据库存储在单独的 aws 服务器上。
我是 MongoDB 和 aws 的新手。我想知道如何从本地主机连接到我的数据库?
【问题讨论】:
另见this 和this。我想这不是一个重复的问题,因为您询问的是 AWS 的具体情况,但答案是一样的:使用MONGO_URL
。
这里是specific tutorial of MongoDB configuration for Meteor,值得一看。
【参考方案1】:
这就像启动 Meteor 应用程序一样简单,将 MONGO_URL
环境变量设置为指向在您的 AWS 机器上运行的 Mongo 实例。
假设你已经在远程机器上打开了 27017 端口:
MONGO_URL=mongodb://addresshere.compute-1.amazonaws.com:27017/yourdbname meteor
【讨论】:
谢谢,但由于某种原因,当我尝试从 localhost 连接时出现错误。错误:无法连接到 [address.compute-1.amazonaws.com:27017] 我写的连接字符串只是一个占位符。你必须使用你的 对。我也试过 MONGO_URL=mongodb://xx-xx-xxx-xx.us-west-2.compute.amazonaws.com/meteor meteor ,我得到了同样的错误。所有交通都是开放的。是否可能是因为我试图连接到由流星创建的 aws 服务器上的数据库? 遇到了同样的错误。基本上,mongodb 位于 AWS 后面的 VPC 后面,您通常通过 ssh 连接到该 VPC。所以我真的不知道如何让我的应用程序仅通过使用上面的行来访问 mongodb,但我认为,用户名和密码是不够的。 不确定,但希望有所帮助:通常有两种方法可以访问 AWS 上的资源 - 1) 更改 EC2 实例的“安全组”配置 - 这充当防火墙 - 并允许访问端口 27017; 2) 使用 ssh 隧道连接到实例并在本地调整该端口,例如ssh aws-host -L 27017:localhost:27017
,或者,如果您通过不同的实例连接ssh aws-host -L 2017:target.mongo.host.amazonaws.com:27017
。【参考方案2】:
每个this link 你可能想检查一下 1) 操作系统防火墙; 2)正确的服务绑定到私有IP地址(如果没有,将您的IP添加到IP地址白名单中; 3)你的猫鼬版本(如果使用)。使用 'npm list mongoose' 找出版本,并将其更新到最新版本。
您可以使用 Mongodb Atlas (一种“在 Amazon Web Services (AWS) 上提供的 MongoDB 即服务产品”)来托管您的数据库(它有一个免费套餐可供启动),并使用 MongoDB Compass 轻松管理您的数据.
【讨论】:
【参考方案3】:您可以使用猫鼬连接它。
var mongoose = require('mongoose');
mongoose.connect('mongodb://serverIpaddress/databasename', function (err)
if (err)
return "no"
else
console.log('connection successful');
);
【讨论】:
【参考方案4】:为了能够通过 Internet 连接外部 mongodb。应满足以下条件:
mongodb 应该有可路由的公共 IP mongodb security-group应该白名单你的公共IP如果 mongodb 没有公共 IP(VPC 内的私有网络),您的 localhost 仍然可以使用以下方法之一访问它:
*** 到专用网络 您的办公室/家庭与 AWS VPC 之间的站点到站点 将 EIP 附加到 mongodb 实例 eni(如果 eni 具有通过 Internet 网关 路由的公共子网) 使用公共 IP 创建一个 eni 添加附加到 mongodb 实例无论如何 - 在开始编写代码之前:尝试使用 telnet、netcat 或一些 working 连接到 mongodb mongodb 客户端。
【讨论】:
【参考方案5】:除了将应用程序配置为连接到远程 MongoDB,如其他答案中所述,还需要确保可以从您的网络访问服务器。
有多种方式可以访问 AWS 上的网络资源:
更改 EC2 实例的 security group 配置 - 这充当防火墙 - 并允许访问端口 27017。 如果您只需要从您的机器访问它,可以选择允许从您当前的 IP 访问。
使用 ssh 隧道连接到实例并让该端口在本地建立隧道,例如 ssh aws-host -L 27017:localhost:27017
,或者,如果您通过不同的实例连接 ssh aws-host -L 2017:target.mongo.host.amazonaws.com:27017
。
关于这个主题有一个很好的演示 - The Black Magic Of SSH / SSH Can Do That?。
使用 *** on AWS 并通过 *** 连接到 AWS 网络(使 AWS 网络内的资源在本地可用)。
【讨论】:
ssh 端口转发有帮助(没有 IP 表是的!)有关 aws 设置,请参阅 17:00 分钟的视频以上是关于从另一台服务器连接到 aws 服务器上的 MongoDB的主要内容,如果未能解决你的问题,请参考以下文章
从另一台计算机连接到在 Amazon EC2 上的 localhost 上运行的 Web 应用程序
禁用“允许远程连接到此服务器”后,我仍然可以从另一台机器连接