Я хочу, чтобы мое приложение Meteor подключалось к удаленной базе данных. Я подумал, что могу развернуть два приложения: одно, которое устанавливает базу данных на сервере, а другое, которое размещает приложение, но подключается к базе данных на другом сервере. У меня проблемы с тем, чтобы это работало, но мне также интересно, рекомендуется ли это или нет? Должен ли я установить базу данных mongodb на сервере без mup / meteor, или я могу использовать mup, чтобы настроить это для меня?

Что я пробовал и не могу приступить к работе:

Я использую два экземпляра amazon ec2 (ubuntu 14.04). Я установил следующие правила безопасности для обоих случаев:

Custom TCP Port: 27017 Source: instance-public-ip-1/32
Custom TCP Port: 27017 Source: instance-public-ip-2/32
HTTP Port: 80 Source: All Addresses
SSH Port: 22 Source: My IP

В файле mup.json для приложения, пытающегося получить доступ к удаленной базе данных, я добавил «MONGO_URL»: «mongodb: // db-instance-public-ip: 27017 / db» в «env», а db - это имя приложение на этом экземпляре.

Приложение Meteor, на котором размещена база данных, развертывается успешно, а приложение Meteor, на котором размещено приложение, - нет. Развертывание завершается неудачно во время «Вызов процесса развертывания», и вот STDERR / STDOUT: (XXX.XXX.XXX.XXX - общедоступный IP-адрес экземпляра)

X Запуск процесса развертывания: НЕ ИСПОЛЬЗУЕТСЯ

-----------------------------------STDERR-----------------------------------
npm WARN package.json meteor-dev-bundle@0.0.0 No description
npm WARN package.json meteor-dev-bundle@0.0.0 No repository field.
npm WARN package.json meteor-dev-bundle@0.0.0 No README data

/usr/lib/node_modules/wait-for-mongo/bin/wait-for-mongo:14
    throw err;
          ^
Error: TIMEOUTED_WAIT_FOR_MONGO
    at null._onTimeout (/usr/lib/node_modules/wait-for-mongo/lib/waitForMongo.js:20:14)
    at Timer.listOnTimeout [as ontimeout] (timers.js:112:15)
-----------------------------------STDOUT-----------------------------------
56.145:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
wait-for-mongo: failed to connect to [XXX.XXX.XXX.XXX:27017]
----------------------------------------------------------------------------

Сообщите мне, если потребуется дополнительная информация. Вопрос также размещен здесь: https://github.com/arunoda/meteor-up/issues / 450

4
David C 27 Май 2015 в 21:09
1
Вы пробовали открыть консоль mongo из экземпляра, на котором размещена база данных?
 – 
Adnan Y
28 Май 2015 в 03:20
Да, mongo работает на успешно развернутом экземпляре
 – 
David C
28 Май 2015 в 17:44
Я не об этом спросил. Можете ли вы получить доступ к mongo из другого экземпляра, на котором он не запущен, через консоль?
 – 
Adnan Y
28 Май 2015 в 23:47
@AdnanY, я решил проблему, посмотрите мой ответ
 – 
David C
28 Май 2015 в 23:56
Спасибо, я начал изучать консольные команды mongo благодаря вашему комментарию, который привел к поиску ответа
 – 
David C
29 Май 2015 в 01:23

1 ответ

Лучший ответ

Изменить: я позволил mongodb прослушивать все интерфейсы, но это угроза безопасности.

По умолчанию, когда развернутый метеор создает базу данных, конфигурации mongodb настроены только на прослушивание соединений на 127.0.0.1 (это параметр bind_ip в mongodb). Изменение этого параметра для прослушивания 127.0.0.1 и частного IP-адреса экземпляра решило проблему, и теперь он успешно развертывает и использует удаленную базу данных. НЕ комментируйте параметр bind_ip, поскольку он позволяет любому подключаться к вашей базе данных. Хорошие правила безопасности по-прежнему не позволят людям подключаться, но рекомендуется следовать «принципу наименьших привилегий» в конфигурации mongodb. .

Чтобы изменить этот параметр, отредактируйте файл /etc/mongod.conf на экземпляре с базой данных. Добавьте частный IP-адрес экземпляра, на котором размещена база данных, в строку с bind_ip = 127.0.0.1.

Строки 17-18 из /etc/mongod.conf после редактирования (XXX.XXX.XXX.XXX - частный IP-адрес экземпляра с базой данных):

# Listen to local interface only. Comment out to listen on all interfaces. 
bind_ip = 127.0.0.1,XXX.XXX.XXX.XXX

Дополнительную информацию о файле конфигурации mongo можно найти здесь: http: //docs.mongodb .org / manual / reference / configuration-options /.

Я нашел этот файл, запустив db.serverCmdLineOpts() в оболочке mongo благодаря ответу Адама Комерфорда на этот вопрос: как я могу узнать, какие порты mongo прослушивает из оболочки mongo?.

5
Community 23 Май 2017 в 13:29
Есть идеи, каков путь для капель DigitalOcean?
 – 
Ahmed M. Matar
27 Мар 2018 в 01:14