Настройка удаленного входа на MongoDB-сервер

от автора

Ситуация, когда приложение и сервер баз данных находятся на одной и той же машине — очень редкая. Но по умолчанию в MongoDB авторизация отключена и вы не сможете соединить из вне. Мне не удалось найти краткую и понятную инструкцию, как это можно быстро исправить. Что и стало поводом для этого поста.

Исходные данные:

  • Ubuntu Server 12.04 LTS;
  • MongoDB 2.2.3, запущенная как сервис;
  • python-скрипт, использующий pymongo, которым надо «достучаться» до удаленного mongo-сервера.

Вы уже установили MongoDB? Отлично! Если нет, рекомендую проследовать к вот этот инструкции.

Для начала необходимо проверить, где находится config-файл для mongod, который сейчас запущен. Запускаем терминал и проверяем:

user@ubuntu:/$ ps -ef | grep mongo mongodb  65042     1  0 Feb25 ?        00:07:11 /usr/bin/mongod --config /etc/mongodb.conf user     65343 64749  0 02:40 pts/0    00:00:00 grep --color=auto mongo 

Как видно, в моем случаи он находится в /etc/mongodb.conf. Если запустить:

user@ubuntu:/$ netstat -a 

Можно заметить, что mongod готов принять соединения только от localhost:

tcp        0      0 localhost:27017                 *:*                     LISTEN  

Пора отредактировать config-файл в соответствии с нашими требованиями. Открываем его и делаем ровно 2 изменения:

  1. Раскомментируем строку auth = true, которая включает авторизацию по умолчанию;
  2. Закомментируем строку bind_ip = 127.0.0.1, чтобы соединяться можно было с любого хоста.

Готово! Теперь осталось перезагрузить mongod:

user@ubuntu:/$ sudo service mongodb stop mongodb stop/waiting user@ubuntu:/$ sudo service mongodb start mongodb start/running, process 65404 

Осталось добавить пользователя в БД:

user@ubuntu:/$ mongo MongoDB shell version: 2.2.3 connecting to: test > use mytest switched to db mytest > db.testcollection.insert({"message":"Hello, remote user!"}) > db.addUser('myuser', 'superpassword') { "n" : 0, "connectionId" : 2, "err" : null, "ok" : 1 } { 	"user" : "myuser", 	"readOnly" : false, 	"pwd" : "ecb2c08916b34e477c33c10cec2ae416", 	"_id" : ObjectId("512c6d9dcc5d103a896944ae") } > db.testcollection.find() { "_id" : ObjectId("512c6d85cc5d103a896944ad"), "message" : "Hello, remote user!" } 

Перейдем к другому компьютеру в данной сети для чистоты эксперимента. В вашем случаи, конечно, ip и порт могут отличаться. Выполним там следующий python-скрипт:

from pymongo import MongoClient  mongoserver_uri = "mongodb://myuser:superpassword@10.2.0.182:27017/mytest" conection = MongoClient(host=mongoserver_uri) db = conection['mytest'] collection = db['testcollection'] print collection.find_one() 

После запуска скрипта получаем результат:

{u'message': u'Hello, remote user!', u'_id': ObjectId('512c6d85cc5d103a896944ad')} 

Надеюсь это короткое руководство позволит вам сэкономить время и нервы.

ссылка на оригинал статьи http://habrahabr.ru/post/170741/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *