복붙노트

[MONGODB] 아틀라스 MongoDB를 클라우드 서비스에 Heroku가 응용 프로그램을 연결

MONGODB

아틀라스 MongoDB를 클라우드 서비스에 Heroku가 응용 프로그램을 연결

질문을 antecipate하려면 내가 SSL을 사용하여 Heroku가와 아틀라스 MongoDB를 클라우드 사이의 연결을 설정하기 위해 Heroku가에 SSL 지원을받을해야합니까? (TSL / SSL 연결은 액세스 아틀라스 MongoDB의 클라우드 서비스에 대한 요구 사항입니다).

나는 아틀라스 MongoDB를 클라우드에서 호스팅 클러스터에 Node.js를 작성 내 Heroku가 응용 프로그램을 연결하려합니다.

나의 현재 데이터베이스 (A Heroku가 부가 기능으로) MLAB에서 호스팅하고 MongoDB를 URI는 (XXX에 생략 기밀 정보를 사용하여)입니다 몽구스를 통해 클러스터에 액세스하는 데 사용됩니다 :

MONGODB_URI="mongodb://xxx:xxx@xxx-a0.mlab.com:23266,xxx-a1.mlab.com:xxx/xxx?replicaSet=rs-xxx"

지금은 아틀라스 MongoDB를 클라우드에 MLAB에서 내 데이터를 마이그레이션 한 것으로, 저는 현재 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가 응용 프로그램을 실행할 때 나는 문제없이 데이터베이스에 액세스 할 수 있습니다. 또한 몽고 쉘을 사용하여 클러스터에 연결할 수 있어요.

Heroku가에서 응용 프로그램을 실행하는 경우 그러나, 연결이되지 수 있습니다. 브라우저 JS 콘솔에서, 나는 503 서비스를 사용할 수 없음 메시지가 표시됩니다. Heroku가, 나는 오류를 얻을 :

no primary found in replica set

나는 아틀라스 MongoDB를 클라우드 다르게 MLAB에서 SSL 연결을 필요로 알고 있습니다. 내 로컬 컴퓨터에서 나는 자체 서명 된 인증서가 클러스터에 성공적으로 연결하는 데 사용되는 가정합니다.

내 질문은 : 나는 Heroku가와 MongoDB를 아틀라스 사이의 보안 연결을 설정 액세스 할 수 있도록하기 위해 Heroku가에서 SSL 지원을받을해야합니까? 또는 Heroku가있는 SSL의 suport는 클라이언트 / Heroku가 보안 연결에 필요합니까?

해결법

  1. ==============================

    1.면책 조항 : 나는 Heroku가도 MongoDB를 아틀라스도 사용했지만 내가 그들로 찾고 있어요.

    면책 조항 : 나는 Heroku가도 MongoDB를 아틀라스도 사용했지만 내가 그들로 찾고 있어요.

    당신이 MongoDB의 아틀라스에서 서버 IP 주소를 허용 목록에 포함되지 않은 경우 내가 발견 Github의 문제에 따라, 해당 오류 메시지가 표시됩니다.

    MongoDB를 아틀라스 문서 읽기, 내가 Heroku가 동력계와 함께이 일을 볼 수있는 유일한 방법은 MongoDB를 아틀라스 화이트리스트에 0.0.0.0/0 (즉, 모든 주소)를 추가하는 것입니다.

    시도 및하십시오 보고서 다시 당신이 연결을 인스턴스화 할 수 있는지 여부 것을 제공합니다.

    나는 완전히 확실하지 오전하지만, 난 당신이 내가 읽은 내용에 따라 Heroku가 그것을 가능하게 할 필요가 있다고 생각하지 마십시오 SSL 질문에 응답하려고합니다.

    MongoDB를 서버 인증서 유효성 검사를 수행하는 경우에 연결하기위한 Node.js를 코드는 다음과 같다 할 것이다합니다 (Node.js를 드라이버의 문서에서 가져온) 다음 :

    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를 드라이버의 문서에서 가져온) 다음과 같은 코드를 사용할 수 있습니다 :

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

    아틀라스 문서는 Node.js를에서 연결을위한 다음 예제 코드가 포함되어 있음을 감안할 때, 난 당신에게 Heroku에 SSL을 사용하지 않아도 생각 :

    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();
    });
    
  2. ==============================

    2.나는 데이터베이스 요청 및 기타 TCP 연결을위한 고정 IP 주소에 대한 애드온을 (내가 Fixie 양말 사용) 설치하여이 문제를 해결했다. 여기에 추가 옵션 : https://elements.heroku.com/addons#network

    나는 데이터베이스 요청 및 기타 TCP 연결을위한 고정 IP 주소에 대한 애드온을 (내가 Fixie 양말 사용) 설치하여이 문제를 해결했다. 여기에 추가 옵션 : https://elements.heroku.com/addons#network

  3. from https://stackoverflow.com/questions/42159175/connecting-heroku-app-to-atlas-mongodb-cloud-service by cc-by-sa and MIT license