Подключите NodeJS к MongoDB Droplet - PullRequest
0 голосов
/ 15 марта 2020

Итак, я решил настроить свой проект с двумя каплями, каплей изображения MongoDB и каплей изображения NodeJS. Я сделал так, чтобы в будущем было проще масштабировать обе капли, и в будущем к БД могут подключаться другие приложения, как в Ubuntu 18.04.

Я получаю ошибку:

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)]: {} }

Я правильно настроил оба сервера (так я считаю), у моего MongoDB есть два пользователя (оба - я, но разные разрешения, я прошел несколько пошаговых инструкций, и так просто и произошло). Мой файл /etc/mongod.conf был отредактирован соответственно:

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

На брандмауэре UFW включены HTTPS, S SH и мой NodeJS_ip: 27017.

Моя NodeJS капелька настроен с использованием доменного имени, указывающего на правильный IP-адрес, letsencrypt настроен для безопасного соединения по доменному имени. У меня сейчас проблема в том, что я не могу подключиться к моей капле Mon go из моего приложения NodeJS, и я также хотел бы убедиться, что все это сделано также безопасно. Мой NodeJS код подключения использует Mon goose и файл окружения переменных, у меня также есть целое подключение в функции тайм-аута согласно другому предложению, которое я видел в другом месте:

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);

Я пробовал множество вещей через обе капли, но я потратил около 4 дней на то, чтобы довести проект до стадии подготовки / производства, чтобы он мог запускаться всегда и просто обновляться с течением времени.

Если вам нужно что-то еще, пожалуйста, сделайте дайте мне знать.

Буду очень признателен за любую помощь,

Спасибо

1 Ответ

0 голосов
/ 15 марта 2020

Я не знаю формат URI, который вы используете. Но у меня изначально возникла та же проблема, когда я пытался подключить приложение моего узла к экземпляру Mon go AWS.

Используя длинный URI-код со всеми именами кластеров, такими как

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'

Вместо чего-то вроде этого: mongodb + srv: //server.example.com/

Это сработало для меня. Это также может вам помочь.

Кроме того, нашел это для цифрового океана ссылка и пн go документация для строка подключения

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