Итак, я решил настроить свой проект с двумя каплями, каплей изображения MongoDB и каплей изображения NodeJS. Я сделал так, чтобы в будущем было проще масштабировать обе капли, и в будущем к БД могут подключаться другие приложения, как в Ubuntu 18.04.
Я получаю ошибку:
Could not connect to the database: { MongooseServerSelectionError: connection timed out
at new MongooseServerSelectionError (/root/eternal-peace-code/node_modules/mongoose/lib/error/serverSelection.js:22:11)
at NativeConnection.Connection.openUri (/root/eternal-peace-code/node_modules/mongoose/lib/connection.js:808:32)
at Mongoose.connect (/root/eternal-peace-code/node_modules/mongoose/lib/index.js:333:15)
at Timeout.setTimeout [as _onTimeout] (/root/eternal-peace-code/app.js:60:22)
at ontimeout (timers.js:482:11)
at tryOnTimeout (timers.js:317:5)
at Timer.listOnTimeout (timers.js:277:5)
message: 'connection timed out',
name: 'MongooseServerSelectionError',
reason:
TopologyDescription {
type: 'Single',
setName: null,
maxSetVersion: null,
maxElectionId: null,
servers: Map { 'mongo_droplet_ip:27017' => [Object] },
stale: false,
compatible: true,
compatibilityError: null,
logicalSessionTimeoutMinutes: null,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
commonWireVersion: null },
[Symbol(mongoErrorContextSymbol)]: {} }
Я правильно настроил оба сервера (так я считаю), у моего MongoDB есть два пользователя (оба - я, но разные разрешения, я прошел несколько пошаговых инструкций, и так просто и произошло). Мой файл /etc/mongod.conf был отредактирован соответственно:
net:
port: 27017
bindIp: 127.0.0.1,mongodb_droplet_ip
security:
authorization: "enabled"
На брандмауэре UFW включены HTTPS, S SH и мой NodeJS_ip: 27017.
Моя NodeJS капелька настроен с использованием доменного имени, указывающего на правильный IP-адрес, letsencrypt настроен для безопасного соединения по доменному имени. У меня сейчас проблема в том, что я не могу подключиться к моей капле Mon go из моего приложения NodeJS, и я также хотел бы убедиться, что все это сделано также безопасно. Мой NodeJS код подключения использует Mon goose и файл окружения переменных, у меня также есть целое подключение в функции тайм-аута согласно другому предложению, которое я видел в другом месте:
setTimeout(async () => {
console.log('Connecting to database...');
const options = {
user: process.env.DBUSER,
pass: process.env.USERPASS,
keepAlive: true,
useNewUrlParser: true,
useFindAndModify: false,
useCreateIndex: true,
useUnifiedTopology: true,
sslCA: cert,
connectTimeoutMS: 5000,
}
await mongoose.connect(process.env.LIVEDB, options)
.then(() => {
console.log('We are connected to the database');
})
.catch(err => {
console.log('Could not connect to the database: ', err);
connectWithTimeout();
});
}, 3000);
Я пробовал множество вещей через обе капли, но я потратил около 4 дней на то, чтобы довести проект до стадии подготовки / производства, чтобы он мог запускаться всегда и просто обновляться с течением времени.
Если вам нужно что-то еще, пожалуйста, сделайте дайте мне знать.
Буду очень признателен за любую помощь,
Спасибо