У нас есть экземпляр 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"
Я получил ошибку «Не удалось подключиться к серверу ...».
Есть предложения и как это исправить?
вы не указали базу данных, замените
"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"
вы также должны указать базу данных аутентификации, см. редактировать
К сожалению, я не могу подключиться, я попытался подключиться через оболочку с моим общедоступным DNS, а также с хостом 127.0.0.1, но соединение не удалось ... Когда я подключаюсь к своему экземпляру EC2 с помощью SSH, я могу подключиться к моему mongoDB.
Если вы не можете подключиться к localhost, ваш файл конфигурации, вероятно, неверен. Вы говорите, что можете подключиться к mongodb через ssh-соединение, если строка: mongo myDatabaseName -u admin -p pw --host 127.0.0.1 --port 27017 завершится ошибкой, когда вы перешли через ssh, ваша конфигурация неверна
Я написал вам весь процесс создания / управления аутентификацией, вы должны видеть, что вы пропустили
Я следую вашим шагам, но это не работает ... когда я использую ec2-35-xxx-xxx-x.eu-central-1.compute.amazonaws.com
в качестве хоста, я получаю следующую ошибку: 'mongodb://%2Fec2-35-xxx-xxx-x.eu-central-1.compute.amazonaws.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
Хорошо, я добавляю в файл conf оператор bindIpAll: true, и теперь он работает .. Я не знаю почему, потому что я уже комментирую оператор bindIp ..
Я добавляю имя базы данных к URL-адресу, но это не работает, мне нужно указать имя базы данных в файле конфигурации или где-либо еще?