Предварительно: я использую [Digital Ocean, Rancher, Docker, NodeJS, Mongoose].
Привет всем,
Я следовал этой статье / учебнику по настройке среды Docker с использованиемRancher:
https://www.digitalocean.com/community/tutorials/how-to-deploy-a-node-js-and-mongodb-application-with-rancher-on-ubuntu-16-04
Основные отличия в том, что я использую Mongoose
и Express
.
Все работает, как и ожидалось, на стороне Rancher;Я могу масштабировать БД, ноды и т.д.
Однако подключение к MongoDB из JS, похоже, не работает.
Если я нажму /
на сервере, я получумой статический "Привет, мир!"тестовое сообщение.Однако если я попадаю на маршрут, который разрешает метод контроллера, который пытается получить доступ к MongoDB, я на некоторое время зависаю, пока не получу 504 Timeout
.
. Я подтвердил, что мое свойство среды MONGO_HOST
находится в процессеправильно.
Я также подтвердил, что хост MongoDB доступен с IP-адреса, указанного в Rancher, через ping
.Если я попытаюсь ping
получить этот IP из-за пределов сети, он будет недоступен, что ожидается.
В моем файле server.js
у меня есть следующее для подключения к Mongo:
mongoose.connect('mongodb://' + process.env.MONGO_HOST + '/api', { useNewUrlParser: true });
В Rancher моя служба приложений NodeJS связана с моей службой MongoDB.
Локально, когда я запускаю контейнер Mongo и контейнер приложений, он работает нормально.В базе данных еще нет данных, поэтому ответ []
действителен.Это то, что я ожидаю увидеть при доступе к производственной версии, но вместо этого просто истекает время.
У кого-нибудь есть какие-либо идеи относительно того, почему это может произойти?Моя интуиция говорит мне о каком-либо отображении портов, но в руководстве ничего не говорится об этом в настройке удаленного контейнера / Rancher.
Обновление 1:
Добавление некоторого кода из контроллера, гдеМонго используется.
'use strict';
var mongoose = require('mongoose'),
Event = mongoose.model('Events');
exports.list_all_events = function(req, res) {
Event.find({}, function(err, event) {
if (err)
res.send(err);
res.json(event);
});
};