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

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

Блог MAATRIX · 2026-07-07

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

Чем 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\ncurl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \\\n  sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor\necho "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" | \\\n  sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list\nsudo apt update && sudo apt install -y mongodb-org\nsudo systemctl enable --now mongod
', 'Проверим статус и подключимся клиентом mongosh:', "
sudo systemctl status mongod\nmongosh --eval 'db.runCommand({ ping: 1 })'
"]

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

['Самая частая утечка MongoDB — открытая база без пароля, доступная из интернета. Её мгновенно находят сканеры и шифруют. Сначала создаём администратора, затем включаем авторизацию.', '
mongosh <<\'JS\'\nuse admin\ndb.createUser({\n  user: "admin",\n  pwd: "strong_admin_password",\n  roles: [ { role: "root", db: "admin" } ]\n})\nJS
', 'Теперь включаем авторизацию и оставляем прослушивание только на localhost (или доверенной подсети) в конфиге, после чего перезапускаем сервис.', '
# /etc/mongod.conf\nsecurity:\n  authorization: enabled\nnet:\n  bindIp: 127.0.0.1\n  port: 27017
', '
sudo systemctl restart mongod\nmongosh -u admin -p --authenticationDatabase admin
']

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

['Приложению не нужен root. Создаём пользователя с ролью readWrite только на его базе — принцип наименьших привилегий.', '
mongosh -u admin -p --authenticationDatabase admin <<\'JS\'\nuse appdb\ndb.createUser({\n  user: "appuser",\n  pwd: "strong_app_password",\n  roles: [ { role: "readWrite", db: "appdb" } ]\n})\nJS
', 'Строка подключения приложения будет вида mongodb://appuser:pass@127.0.0.1:27017/appdb.']

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

['По умолчанию WiredTiger берёт под кэш 50% RAM минус 1 ГБ. На выделенном под базу сервере это разумно, но при соседстве с приложением кэш стоит ограничить явно, чтобы не спорить за память.', '
# /etc/mongod.conf\nstorage:\n  wiredTiger:\n    engineConfig:\n      cacheSizeGB: 2
', 'Индексы — главный рычаг скорости. Запрос без индекса делает COLLSCAN — полный перебор коллекции. Создавайте индексы под реальные запросы и проверяйте план через explain.', '
// индекс по полю email\ndb.users.createIndex({ email: 1 }, { unique: true })\n// проверка плана запроса\ndb.users.find({ email: "a@b.c" }).explain("executionStats")
', 'В выводе explain смотрите на stage: IXSCAN означает использование индекса, COLLSCAN — полный скан, который на большой коллекции убьёт производительность.']

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

['Логический бэкап делает mongodump, восстановление — mongorestore. Для небольших и средних баз этого достаточно, крупные кластеры бэкапят снапшотами файловой системы.', '
# бэкап всей базы\nmongodump --uri="mongodb://appuser:pass@127.0.0.1:27017/appdb" --gzip --archive=/var/backups/appdb_$(date +%F).gz\n# восстановление\nmongorestore --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

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

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

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

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

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

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

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