VPS для MongoDB: установка и безопасная настройка
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 нельзя — получите повреждённый снимок.