我正在开发一个使用Azure VM进行部署的NodeJS项目。目前,数据库和服务器位于一个VM中。通过此实现,我可以通过此public String getJSONFromUrl(String url) {
HttpURLConnection c = null;
try {
URL u = new URL(url);
c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setRequestProperty("Content-length", "0");
c.setUseCaches(false);
c.setAllowUserInteraction(false);
c.setConnectTimeout(5000);
c.setReadTimeout(5000);
c.connect();
int status = c.getResponseCode();
switch (status) {
case 200:
case 201:
BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
br.close();
return sb.toString();
}
} catch (IOException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
} finally {
if (c != null) {
try {
c.disconnect();
} catch (Exception ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
}
}
}
return null;
}
现在,我正在尝试将数据库移动到另一个VM中。我为端口27017创建了一个端点,并在2个虚拟网络之间配置了VNET到VNET的连接。但是在尝试连接数据库时,我仍然收到错误mongoose.connect("mongodb://localhost")
。
有没有人有在Azure VM上配置mongodb的经验?
答案 0 :(得分:0)
通过在一个VNET内使用子网进行网络分区而不是使用单独的VNET,您可以让您的生活更轻松(并且您可以节省资金)。
如果使用单独的VNET,则必须通过Internet配置VPN连接,或配置VNET对等(每GB传输的价格)。除非您有非常特殊的要求(例如您正在运行专用的ExpressRoute到内部部署网络),否则您希望将所有内容都放在同一个VNET中。
快速入门模板通常每个创建一个VNET;这是出于演示目的。在生产环境中,如果需要,您可以使用一个具有多个子网的VNET。如果查看模板,可以很容易地看到您在何处指定对现有VNET的引用。
答案 1 :(得分:0)
您可以尝试在mongodb服务器VM中创建SSH隧道,并通过此隧道连接mongodb服务器。您可以在https://azure.microsoft.com/en-us/blog/create-your-own-dedicated-mysql-server-for-your-azure-websites/处参考类似的情况。
在VM中安装mongodb之后,请尝试按照以下命令操作,最终在我身边工作正常:
sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 27017 -j ACCEPT
sudo netstat -anltp|grep :27017
sudo ssh -fNg -L 27017:127.0.0.1:27018 azurevmuser@servername
27018
创建端点
然后您可以通过以下代码连接到mongodb:
var mongoose = require('mongoose');
mongoose.connect('mongodb://<your_server_vm>.cloudapp.net:27018/test');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log("we're connected!")
});