Не могу подключиться к моему экземпляру MongoDB EC2 через NodeJs

У нас есть экземпляр EC2 MongoDb 4.0.1 с NodeJs 8.11.3, когда я пытаюсь получить доступ к своему удаленному MongoDb, я получаю TimeOutError.

var url = "mongodb://admin:[email protected]:27017";

MongoClient.connect(url, (err, database) => {
    if (err) return console.info(err);
    db = database.db(dbName);

    app.listen(3000, function() {
        console.info("listen 3000");
    })
});

Я уже настроил администратора, закомментировал поле bind_ip в файле mongo.conf и установил правило для входящего трафика для порта 27017 в группе безопасности.

Затем я хочу подключиться локально через "mongodb://admin:[email protected]:27017" Я получил ошибку «Не удалось подключиться к серверу ...».

Есть предложения и как это исправить?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
2 542
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы не указали базу данных, замените

"mongodb://admin:[email protected]:27017" 

по

 "mongodb://admin:[email protected]:27017/myDatabaseName"

Кроме того, если вы используете имя пользователя и пароль, у вас должна быть база данных аутентификации, она должна быть указана в строке подключения с помощью authSource:

Я предполагаю, что имя вашей базы данных аутентификации - "admin"

"mongodb://admin:[email protected]:27017/myDatabaseName?authSource=admin"

Если вся ваша информация верна, вы должны иметь возможность подключиться напрямую с оболочкой к вашей базе данных аутентификации с помощью:

mongo admin -u admin -p pw --host 127.0.0.1 --port 27017

И в вашу базу данных с помощью:

mongo myDatabaseName -u admin -p pw --host 127.0.0.1 --port 27017

Стандартный процесс подключения к удаленной базе данных с пользователем и паролем следующий:

На вашем сервере EC2:

Во-первых, убедитесь, что ваш порт 27017 открыт.

Подключите свою оболочку

    $ mongo --port 27017

Создайте администратора myAdmin с паролем Test1234:

    > db.createUser({user: "myAdmin", pwd: "Test1234", roles:[{role: "userAdminAnyDatabase", db: "admin"}]})

Выйти из монго

Включите аутентификацию в файле mongod.config и отключите локальную привязку:

security:
    authorization: enabled

#  bindIp: 127.0.0.1

Перезапустите mongod:

sudo service mongod restart

Вы должны уметь делать следующее:

Выполните аутентификацию при подключении к:

 mongo --port 27017 -u "myAdmin" -p "Test1234" --authenticationDatabase "admin"

Или подключитесь, затем аутентифицируйте:

 mongo --port 27017

 > use admin
 switched to db admin
 > db.auth("myAdmin", "Test1234")

Затем вы должны иметь возможность создать пользователя, сначала аутентифицироваться как администратор:

 mongo --port 27017 -u "myAdmin" -p "Test1234" --authenticationDatabase "admin"

Затем создайте пользователя myUser с паролем Abcd1234 для вашей базы данных «myDb».

db.createUser({user: "myUser", pwd: "Abcd1234", roles:[{role: "readWrite", db: "myDb"}]})

Тогда вы должны иметь возможность подключиться локально к вашему новому пользователю в базе данных myDb.

 mongo myDb --port 27017 -u "myUser" -p "Abcd1234" --authenticationDatabase "admin"

Затем убедитесь, что вы не можете использовать mongo без аутентификации:

  mongo myDb --port 27017

  > show collections

    "ok" : 0,
    "errmsg" : "not authorized on myDb to execute command { listCollections: 1.0, filter: {} }",
    "code" : 13

Теперь вы можете попробовать удаленное подключение:

В вашей локальной оболочке просто добавьте хост в свою линию подключения:

 mongo myDb --port 27017 -u "myUser" -p "Abcd1234" --authenticationDatabase "admin" --host 164.X.X.X

На nodejs вам просто нужно добавить эти параметры в строку подключения:

"mongodb://myUser:[email protected]:27017/myDb?authSource=admin"

Я добавляю имя базы данных к URL-адресу, но это не работает, мне нужно указать имя базы данных в файле конфигурации или где-либо еще?

developKinberg 10.08.2018 10:22

вы также должны указать базу данных аутентификации, см. редактировать

Daphoque 10.08.2018 11:00

К сожалению, я не могу подключиться, я попытался подключиться через оболочку с моим общедоступным DNS, а также с хостом 127.0.0.1, но соединение не удалось ... Когда я подключаюсь к своему экземпляру EC2 с помощью SSH, я могу подключиться к моему mongoDB.

developKinberg 10.08.2018 12:06

Если вы не можете подключиться к localhost, ваш файл конфигурации, вероятно, неверен. Вы говорите, что можете подключиться к mongodb через ssh-соединение, если строка: mongo myDatabaseName -u admin -p pw --host 127.0.0.1 --port 27017 завершится ошибкой, когда вы перешли через ssh, ваша конфигурация неверна

Daphoque 10.08.2018 13:45

Я написал вам весь процесс создания / управления аутентификацией, вы должны видеть, что вы пропустили

Daphoque 10.08.2018 14:19

Я следую вашим шагам, но это не работает ... когда я использую ec2-35-xxx-xxx-x.eu-central-1.compute.amazonaws.com в качестве хоста, я получаю следующую ошибку: 'mongodb://%2Fec2-35-xxx-xxx-x.eu-central-1.compute.amazonaw‌​s.com:27017/myTestDB‌​?replicaSet=http%3A' appears to be a unix socket, but does not end in '.sock', когда я использую только 35.xxx.xxx.x, я получаю: couldn't connect to server 35.xxx.xxx.x:27017. Когда я подключаюсь через ssh к моему серверу, я также проверяю подключение к mongo db через порт 27017, проверяю файл конфигурации и проверяю, созданы ли пользователь, admin и входит в систему с пользователем в myTestDB, но это работает только через ssh

developKinberg 12.08.2018 17:58

Хорошо, я добавляю в файл conf оператор bindIpAll: true, и теперь он работает .. Я не знаю почему, потому что я уже комментирую оператор bindIp ..

developKinberg 12.08.2018 18:20

Другие вопросы по теме