MAATRIX / Блог / VPS для MongoDB: установка и безопасная настройка

VPS для MongoDB: установка и безопасная настройка

VPS для MongoDB: установка, безопасность и индексы
Блог MAATRIX · 2026-07-07

MongoDB — документная СУБД для гибких схем и быстрой разработки. Разберём установку из официального репозитория, обязательное включение аутентификации (иначе базу найдут сканеры), настройку кэша WiredTiger, индексы и бэкап.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Чем MongoDB отличается от SQL-баз

MongoDB хранит данные как документы BSON в коллекциях — без жёсткой схемы. Это удобно для быстро меняющихся моделей данных, логов, каталогов с разнородными атрибутами. Вместо JOIN используют вложенные документы и денормализацию.

Движок хранения по умолчанию — WiredTiger. Он сжимает данные и держит рабочий набор в кэше в памяти. Как и реляционные СУБД, MongoDB чувствителен к скорости диска: журналирование и сброс кэша идут на диск, а рост коллекций требует быстрого случайного I/O.

  • Документная модель — гибкая схема, BSON-документы.
  • WiredTiger — сжатие и кэш в RAM.
  • Индексы обязательны — без них запросы делают полный скан коллекции.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для MongoDB

Установка из официального репозитория

В репозиториях Ubuntu MongoDB нет — ставим из официального. Подключим ключ и репозиторий MongoDB Community (например 7.0).

sudo apt update && sudo apt install -y gnupg curl
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
  sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
echo "deb [signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | \
  sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt update && sudo apt install -y mongodb-org
sudo systemctl enable --now mongod

Проверим статус и подключимся клиентом mongosh:

sudo systemctl status mongod
mongosh --eval 'db.runCommand({ ping: 1 })'

Включение аутентификации

Самая частая утечка MongoDB — открытая база без пароля, доступная из интернета. Её мгновенно находят сканеры и шифруют. Сначала создаём администратора, затем включаем авторизацию.

mongosh <<'JS'
use admin
db.createUser({
  user: "admin",
  pwd: "strong_admin_password",
  roles: [ { role: "root", db: "admin" } ]
})
JS

Теперь включаем авторизацию и оставляем прослушивание только на localhost (или доверенной подсети) в конфиге, после чего перезапускаем сервис.

# /etc/mongod.conf
security:
  authorization: enabled
net:
  bindIp: 127.0.0.1
  port: 27017
sudo systemctl restart mongod
mongosh -u admin -p --authenticationDatabase admin

Пользователь приложения и роли

Приложению не нужен root. Создаём пользователя с ролью readWrite только на его базе — принцип наименьших привилегий.

mongosh -u admin -p --authenticationDatabase admin <<'JS'
use appdb
db.createUser({
  user: "appuser",
  pwd: "strong_app_password",
  roles: [ { role: "readWrite", db: "appdb" } ]
})
JS

Строка подключения приложения будет вида mongodb://appuser:pass@127.0.0.1:27017/appdb.

Кэш WiredTiger и индексы

По умолчанию WiredTiger берёт под кэш 50% RAM минус 1 ГБ. На выделенном под базу сервере это разумно, но при соседстве с приложением кэш стоит ограничить явно, чтобы не спорить за память.

# /etc/mongod.conf
storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 2

Индексы — главный рычаг скорости. Запрос без индекса делает COLLSCAN — полный перебор коллекции. Создавайте индексы под реальные запросы и проверяйте план через explain.

// индекс по полю email
db.users.createIndex({ email: 1 }, { unique: true })
// проверка плана запроса
db.users.find({ email: "a@b.c" }).explain("executionStats")

В выводе explain смотрите на stage: IXSCAN означает использование индекса, COLLSCAN — полный скан, который на большой коллекции убьёт производительность.

Бэкап и выбор сервера

Логический бэкап делает mongodump, восстановление — mongorestore. Для небольших и средних баз этого достаточно, крупные кластеры бэкапят снапшотами файловой системы.

# бэкап всей базы
mongodump --uri="mongodb://appuser:pass@127.0.0.1:27017/appdb" --gzip --archive=/var/backups/appdb_$(date +%F).gz
# восстановление
mongorestore --uri="mongodb://admin:pass@127.0.0.1:27017" --gzip --archive=/var/backups/appdb_2026-01-01.gz

MongoDB любит память под кэш и быстрый диск под журнал и рост коллекций. AMD EPYC + NVMe у MAATRIX дают высокие IOPS — журналирование и сброс кэша не становятся узким местом даже при активной записи. Ежедневные бэкапы MAATRIX дополняют mongodump, локации UK/США/РФ дают низкий пинг, а оплата картой РФ, СБП, криптой или токеном MAAT удобна при недоступности зарубежных провайдеров.

  • Аутентификация выключена — базу находят сканеры и шифруют, это #1 причина утечек Mongo.
  • bindIp: 0.0.0.0 без файервола — порт 27017 открыт всему миру.
  • Нет индексов — запросы делают полный скан коллекции и упираются в диск.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для MongoDB

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Нужно ли включать аутентификацию, если база на localhost?

Да, обязательно. Ошибка в файерволе или проброс порта мгновенно откроют базу без пароля. Аутентификация — базовая гигиена, а не опция.

Сколько RAM нужно MongoDB?

Идеально, чтобы рабочий набор (горячие данные и индексы) помещался в кэш WiredTiger. Для небольших проектов хватает 2-4 ГБ, для крупных — больше.

Чем mongodump лучше копирования файлов?

mongodump снимает согласованный логический бэкап на работающей базе. Копировать файлы данных на живом mongod нельзя — получите повреждённый снимок.