Как получить доступ к базе данных MongoDB из двух приложений Openshift?

Я хочу иметь доступ к моей базе данных MongoDB из двух приложений Openshift: одно приложение представляет собой интерактивное приложение для обслуживания базы данных через браузер, а другое — основное веб-приложение, которое запускается на мобильных устройствах через приложение Openshift. Как я вижу в Openshift, MongoDB настраивается в пространстве папок конкретного приложения, а не независимо от этого пространства.

Каким будет метод для выполнения этого множественного доступа приложений к базе данных?

Это не идеально, но является ли мой единственный выбор объединить функциональность обоих приложений Openshift в одно? На вкус как плохая тарелка спагетти.


person Ric    schedule 18.02.2015    source источник


Ответы (2)


Обновление 2018 г.: это относится к Openshift 2. Версия 3 сильно отличается, и несмотря на то, что применяются общие правила Linux и масштабирования, детали устарели.

Хотя ответ @MartinB был своевременным и правильным, это просто ссылка, поэтому позвольте мне указать здесь самое необходимое.

Предполагая, что настройка неразделяемой БД уже выполнена, вам нужно найти ее хост и порт. Вы можете ssh в свое приложение (то, что с БД) или использовать rhc:

rhc ssh -a appwithdb
env | grep MONGODB 

env содержит все переменные окружения, и grep фильтрует их, чтобы показать только те, которые относятся к Mongo. Вы должны увидеть что-то вроде:

OPENSHIFT_MONGODB_DB_HOST=xxxxx-yyyyy.apps.osecloud.com
OPENSHIFT_MONGODB_DB_PORT=zzzzz

xxxxx is the ID of the gear that Mongo sits on
yyyyy is your domain/namespace
zzzzz is MongoDB port

Теперь вы можете использовать их для создания подключения к БД из любой точки вашей среды Openshift. Другое приложение должно использовать URL-адрес xxxxx-yyyyy:zzzzz. Вы можете сохранить их в пользовательских переменных, чтобы упростить обслуживание.

$ rhc env-set \
MYOWN_DB_HOST=xxxxx-yyyyy \
MYOWN_DB_PORT=zzzzz \
MYOWN_DB_PASSWORD=****** \
MYOWN_DB_USERNAME=admin..... \
MYOWN_DB_NAME=dbname...

А затем использовать переменные окружения вместо стандартных. Просто помните, что они не обновляются автоматически, когда БД удаляется.

person ptrk    schedule 19.02.2015
comment
Это чрезвычайно ценное дополнение к первому решению, ссылка на метод Openshift, который требует перестроения вашего немасштабируемого приложения, чтобы оно стало масштабируемым приложением. Преимущество этого решения для тех из нас, кто уже создал приложение Openshift с БД, встроенной в область 1-го приложения. В этом случае может быть невероятно сложно начать заново как масштабируемое приложение. В этом случае это решение является билетом. - person Ric; 19.02.2015
comment
На данный момент (через 2 месяца после вопроса ОП) это решение, похоже, не работает, потому что OPENSHIFT_MONGODB_DB_HOST сообщает о внутреннем IP-адресе с четырьмя точками, который НЕ доступен из других приложений (даже в той же учетной записи / домене). Кажется невозможным получить доступ к картриджу MongoDB из других приложений на этом этапе — я поднял отдельный вопрос, но, может быть, его лучше решить здесь? stackoverflow.com/ вопросы/29356274/ - person ; 01.04.2015
comment
Спасибо за это, я использовал oc env pod/mongodb-1-xxxx2 --list согласно документации и он вернул только MONGODB_USER, MONGODB_PASSWORD, MONGODB_ADMIN_PASSWORD и MONGODB_DATABASE - знаете ли вы, что ваш метод возвращает более полный список? - person user1063287; 07.05.2018
comment
Это версия openshift - исходный ОП был про openshift 2, вы (и я тоже) уже на 3.x, что сильно отличается от командной строки до общей архитектуры. Можете ли вы описать свою проблему в отдельном вопросе? - person ptrk; 15.05.2018

Прочтите следующую статью из блога open shift: https://blog.openshift.com/sharing-database-across-applications/

person MartinB    schedule 18.02.2015
comment
ВАУ, написано всего 8 дней назад. ИДЕАЛЬНО! - person Ric; 19.02.2015