Jadi saya telah memutuskan untuk menyiapkan proyek saya dengan dua tetesan, tetesan gambar MongoDB dan tetesan gambar NodeJS. Saya melakukannya untuk mempermudah penskalaan kedua tetesan di masa mendatang, dan aplikasi lain mungkin terhubung ke DB di masa mendatang, keduanya di Ubuntu 18.04.

Saya mendapatkan kesalahan:

Could not connect to the database:  { MongooseServerSelectionError: connection timed out
    at new MongooseServerSelectionError (/root/eternal-peace-code/node_modules/mongoose/lib/error/serverSelection.js:22:11)
    at NativeConnection.Connection.openUri (/root/eternal-peace-code/node_modules/mongoose/lib/connection.js:808:32)
    at Mongoose.connect (/root/eternal-peace-code/node_modules/mongoose/lib/index.js:333:15)
    at Timeout.setTimeout [as _onTimeout] (/root/eternal-peace-code/app.js:60:22)
    at ontimeout (timers.js:482:11)
    at tryOnTimeout (timers.js:317:5)
    at Timer.listOnTimeout (timers.js:277:5)
  message: 'connection timed out',
  name: 'MongooseServerSelectionError',
  reason: 
   TopologyDescription {
     type: 'Single',
     setName: null,
     maxSetVersion: null,
     maxElectionId: null,
     servers: Map { 'mongo_droplet_ip:27017' => [Object] },
     stale: false,
     compatible: true,
     compatibilityError: null,
     logicalSessionTimeoutMinutes: null,
     heartbeatFrequencyMS: 10000,
     localThresholdMS: 15,
     commonWireVersion: null },
  [Symbol(mongoErrorContextSymbol)]: {} }

Saya telah mengatur kedua server dengan benar (jadi saya percaya), MongoDB saya memiliki dua pengguna (keduanya adalah saya tetapi izin yang berbeda, saya telah mengikuti beberapa penelusuran dan itu terjadi begitu saja). File /etc/mongod.conf saya telah diedit sesuai:

net:
  port: 27017
  bindIp: 127.0.0.1,mongodb_droplet_ip
security:
  authorization: "enabled"

Firewall UFW mengaktifkan HTTPS, SSH, dan NodeJS_ip:27017 saya.

Droplet NodeJS saya diatur dengan nama domain yang menunjuk ke alamat IP yang benar, letsencrypt diatur untuk koneksi aman pada nama domain. Masalah yang saya miliki sekarang adalah saya tidak dapat terhubung ke tetesan Mongo saya dari aplikasi NodeJS saya, dan saya juga ingin memastikan bahwa semuanya dilakukan dengan aman juga. Kode koneksi NodeJS saya menggunakan Mongoose dan file lingkungan variabel, saya juga memiliki seluruh koneksi dalam fungsi batas waktu sesuai saran lain yang saya lihat di tempat lain:

setTimeout(async () => {
      console.log('Connecting to database...');
      const options = {
        user: process.env.DBUSER,
        pass: process.env.USERPASS,
        keepAlive: true,
        useNewUrlParser: true,
        useFindAndModify: false,
        useCreateIndex: true,
        useUnifiedTopology: true,
        sslCA: cert,
        connectTimeoutMS: 5000,
      }
      await mongoose.connect(process.env.LIVEDB, options)
      .then(() => {
        console.log('We are connected to the database');
      })
      .catch(err => {
        console.log('Could not connect to the database: ', err);
        connectWithTimeout();
        });
    }, 3000);

Saya telah mencoba banyak hal melalui kedua tetesan tetapi saya telah menyia-nyiakan sekitar 4 hari untuk membawa proyek ke tahap pementasan/produksi sehingga dapat diluncurkan kapan saja dan hanya diperbarui seiring berjalannya waktu.

Jika Anda membutuhkan sesuatu yang lain, tolong beri tahu saya.

Semua bantuan akan sangat dihargai,

Terima kasih

0
JPChesham 15 Maret 2020, 22:25

1 menjawab

Jawaban Terbaik

Saya tidak tahu format URI yang Anda gunakan. Tetapi saya mendapatkan masalah yang sama pada awalnya ketika saya mencoba menghubungkan aplikasi simpul saya dengan instance Mongo dari AWS.

Menggunakan sengatan URI panjang dengan semua nama cluster seperti ini

mongoURI = 'mongodb://username:password@mongo-instance-shard-00-00-a4iv8.mongodb.net:27017,mongo-instance-shard-00-01-a4iv8.mongodb.net:27017,mongo-instance-shard-00-02-a4iv8.mongodb.net:27017/test?ssl=true&replicaSet=mongo-instance-shard-0&authSource=admin&retryWrites=true&w=majority'

Alih-alih sesuatu seperti ini: mongodb+srv://server.example.com/

Ini berhasil untuk saya. Ini mungkin membantu Anda juga.

Juga, temukan ini untuk link samudra digital dan dokumentasi mongo untuk string koneksi

0
Dharman 15 Maret 2020, 21:39