2017-02-10 3 views
4

Чтобы antecipate вопрос: мне нужно, чтобы получить поддержку SSL на Heroku для того, чтобы установить связь между Heroku и Atlas MongoDB Cloud с помощью SSL? (TSL/SSL-соединение - это requirement для доступа к сервису Cloud Atlas MongoDB).Подключение Heroku приложения к сервису Atlas MongoDB Cloud


Я пытаюсь подключить Heroku приложение, написанное в Node.js, в кластер размещенного на Atlas MongoDB Cloud.

Моя текущая база данных размещается на MLAB (как Heroku Add-на), и MongoDB URI, используемый для доступа к кластеру через мангуста является (с использованием ххх опустить конфиденциальную информацию):

MONGODB_URI="mongodb://xxx:[email protected]:23266,xxx-a1.mlab.com:xxx/xxx?replicaSet=rs-xxx" 

Теперь, когда я мигрировал мои данные MLAB в Atlas MongoDB Cloud, я в настоящее время доступа к кластеру с помощью URI:

MONGODB_URI="mongodb://xxx:[email protected]:xxx,cluster0-shard-xxx.mongodb.net:xxx,cluster0-shard-xxx.mongodb.net:xxx/xxx?replicaSet=xxx&ssl=true&authSource=admin" 

Когда работает мой Heroku приложение локально в моей машине я могу получить доступ к базе данных без проблем. Я также могу подключиться к кластеру с помощью оболочки mongo.

Однако при запуске приложения в Heroku соединение не может быть установлено. В консоли JS Browser я получаю сообщение о недоступности службы 503. В Heroku, я получаю ошибку:

no primary found in replica set 

Я знаю, что Atlas MongoDB Облако требует SSL соединение, в отличие от MLAB. На моей локальной машине я полагаю, что самоподписанный сертификат используется для успешного подключения к кластеру.

Мой вопрос: нужна ли мне поддержка SSL в Heroku, чтобы иметь возможность установить безопасное соединение между Heroku и MongoDB Atlas? Или поддержка SSL в Heroku требуется только для безопасного соединения с клиентом/Heroku?

ответ

4

То, что я думаю, что может решить вашу проблему

Отказ от ответственности: Я использовал ни Heroku, ни MongoDB Атласа, но я смотрю в них.

В соответствии с проблемой Github, которую я нашел [1], вы получите это сообщение об ошибке, если вы не указали IP-адреса сервера в MongoDB Atlas.

Чтение документов MongoDB Atlas [2], единственный способ, которым я вижу это в сочетании с динамиками Heroku, - добавить 0.0.0.0/0 (т. Е. Все адреса) в ваш белый список MongoDB Atlas.

Дайте ему попробовать и, пожалуйста, сообщите, можете ли вы установить соединение.

На SSL

Попытка ответить на вопрос SSL, я не думаю, что вам нужно, чтобы включить его на Heroku основе того, что я читал, хотя я не совсем уверен.

Если сервер MongoDB выполнил проверку сертификата, код Node.js для подключения к нему должен выглядеть следующим образом (взято из узла.JS драйвер документации [3]):

var MongoClient = require('mongodb').MongoClient, 
    f = require('util').format, 
    fs = require('fs'); 

// Read the certificates 
var ca = [fs.readFileSync(__dirname + "/ssl/ca.pem")]; 
var cert = fs.readFileSync(__dirname + "/ssl/client.pem"); 
var key = fs.readFileSync(__dirname + "/ssl/client.pem"); 

// Connect validating the returned certificates from the server 
MongoClient.connect("mongodb://localhost:27017/test?ssl=true", { 
    server: { 
     sslValidate:true 
    , sslCA:ca 
    , sslKey:key 
    , sslCert:cert 
    , sslPass:'10gen' 
    } 
}, function(err, db) { 
    db.close(); 
}); 

Если сервер MongoDB не проверяет ни SSL сертификаты, вы можете просто использовать код, подобный следующему (также взяты из документации драйвера Node.js [3]):

var MongoClient = require('mongodb').MongoClient; 

MongoClient.connect("mongodb://localhost:27017/test?ssl=true", function(err, db) { 
    db.close(); 
}); 

Учитывая, что документация Atlas [4] содержит следующий пример кода для подключения к нему с Node.js, я думаю, что вы не должны включить SSL на Heroku:

var MongoClient = require('mongodb').MongoClient; 

var uri = "mongodb://kay:[email protected]:27017,mycluster0-shard-00-01-wpeiv.mongodb.net:27017,mycluster0-shard-00-02-wpeiv.mongodb.net:27017/admin?ssl=true&replicaSet=Mycluster0-shard-0&authSource=admin"; 
MongoClient.connect(uri, function(err, db) { 
    db.close(); 
}); 

[1] https://github.com/meteor/meteor/issues/7492#issuecomment-236562860 
[2] https://docs.atlas.mongodb.com/security-whitelist/ 
[3] https://mongodb.github.io/node-mongodb-native/2.2/tutorials/connect/ssl/ 
[4] https://docs.atlas.mongodb.com/driver-connection/#node-js-driver-example 
+2

Niklas, вы были правы! Проблема заключалась в доступе к белым спискам. О вопросе SSL, я думаю, вы правы, потому что я получил следующий ответ от поддержки Herkou: «(...) использование SSL для приложения полностью отделено от монгонга, поэтому я не думаю, что это быть проблемой здесь ». –

+4

** Обновить ([источник] (https://kb.heroku.com/i-need-to-whitelist-heroku-dynos-what-are-ip-address-ranges-in-use-at-heroku)) : ** в качестве динамиков Heroku используется подмножество IP-диапазона экземпляров AWS EC2, можно добавить диапазоны [AWS IP] (http://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges .html) в белый список Cloud Atlas или получить надстройку для предоставления статического исходящего IP-адреса или использовать безопасную связь через TLS. –

+1

Удивительный! Спасибо, что сообщили Бруно. :) –

 Смежные вопросы

  • Нет связанных вопросов^_^