Подключение приложения Heroku к облачному сервису Atlas MongoDB
В antecipate вопрос: мне нужно сделать протокол SSL поддержка на Heroku для того, чтобы установить связь между здесь и Атлас MongoDB Облако использование SSL? (Соединение TSL / SSL является требование для доступа к облачному сервису Atlas MongoDB).
Я пытаюсь подключить приложение Heroku, написанное в узле.js, в кластер, размещенный в облаке Atlas MongoDB.
моя текущая база данных размещено в mLab (как надстройка Heroku), а URI MongoDB используется для доступа к кластеру через Мангуст (используя xxx опустить конфиденциальную информацию):
MONGODB_URI="mongodb://xxx:xxx@xxx-a0.mlab.com:23266,xxx-a1.mlab.com:xxx/xxx?replicaSet=rs-xxx"
Теперь, когда я перенес свои данные из mLab в Atlas MongoDB Cloud, я в настоящее время получаю доступ к кластеру с помощью URI:
MONGODB_URI="mongodb://xxx:xxx@cluster0-shard-xxx.mongodb.net:xxx,cluster0-shard-xxx.mongodb.net:xxx,cluster0-shard-xxx.mongodb.net:xxx/xxx?replicaSet=xxx&ssl=true&authSource=admin"
при запуске моего приложения Heroku локально на моей машине я могу получить доступ к базе данных без проблем. Я также могу подключиться к кластеру с помощью mongo ракушка.
однако при запуске приложения в Heroku соединение не может быть установлено. В консоли браузера JS я получаю сообщение 503 service unavailable. В Heroku, я получаю ошибку:
no primary found in replica set
Я знаю, что Atlas MongoDB Cloud требует SSL-соединения, в отличие от mLab. На моем локальном компьютере я полагаю, что для успешного подключения к кластеру используется самозаверяющий сертификат.
мой вопрос: мне нужно получить поддержку SSL в Heroku для того, чтобы иметь возможность доступа установить безопасное соединение между Heroku и MongoDB Atlas? Или SSL suport в Heroku требуется только для безопасного подключения клиента / Heroku?
2 ответов
что я думаю, может решить вашу проблему
отказ от ответственности: Я не использовал ни Heroku, ни MongoDB Atlas, но я изучаю их.
согласно проблеме Github, которую я нашел [1], вы получите это сообщение об ошибке, если у вас нет белого списка IP-адресов сервера в MongoDB Atlas.
чтение документов MongoDB Atlas [2], единственный способ сделать это в сочетании с Heroku dynos-добавить 0.0.0.0/0
(т. е. все адреса) для вашего MongoDB Атлас белый.
попробуйте и, пожалуйста, сообщите, можете ли вы создать экземпляр соединения.
на SSL
пытаясь ответить на вопрос SSL, я не думаю, что вам нужно включить его на Heroku на основе того, что я прочитал, хотя я не совсем уверен.
если сервер MongoDB выполнил проверку сертификата, узел.код 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-сертификатов,вы можете просто использовать следующий код (также взятый из узла.документация по драйверу js [3]):
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/test?ssl=true", function(err, db) {
db.close();
});
учитывая, что документация Atlas [4]содержит следующий пример кода для подключения к нему из узла.Яш, я думаю, что вы делаете не должны включить SSL на Heroku:
var MongoClient = require('mongodb').MongoClient;
var uri = "mongodb://kay:myRealPassword@mycluster0-shard-00-00-wpeiv.mongodb.net: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
Я решил это, установив аддон (я использовал Фикси Носки) для статических IP-адресов для запросов базы данных и других TCP-соединений. Дополнительные опции здесь:https://elements.heroku.com/addons#network