MongoDB — документоориентированная база данных: вместо строк таблиц она хранит документы, похожие на JSON. Её выбирают многие приложения на Node.js и Python, особенно стартапы с быстро меняющейся структурой данных. Сразу после выбора базы возникает второй вопрос: где её запускать? Можно открыть готовый кластер в облачном сервисе Atlas от компании MongoDB, а можно установить MongoDB на собственный VPS и управлять ею самостоятельно. У обоих путей есть чёткие плюсы и минусы.
MongoDB и обычный хостинг
Обычный (виртуальный) хостинг, как правило, предлагает MySQL и иногда PostgreSQL, а MongoDB на нём почти не встречается. Причина проста: MongoDB — отдельный постоянно работающий серверный процесс, которому нужен заметный объём оперативной памяти. Поэтому реальный выбор лежит между управляемым облачным сервисом вроде Atlas и собственным сервером MongoDB на VPS. Файлы сайта при этом могут находиться где угодно, в том числе на обычном хостинге, если оттуда есть возможность подключиться к базе.
Atlas: готовый кластер и минимум администрирования
В Atlas кластер создаётся за несколько минут. Установку, обновление версий, репликацию и мониторинг берёт на себя сервис, на платных кластерах есть и автоматическое резервное копирование. Для экспериментов и небольших проектов существует бесплатный стартовый кластер, но его объём и возможности ограничены, поэтому строить на нём работающий коммерческий проект рискованно. Цены и условия тарифов меняются, проверяйте их на официальном сайте.
Подключение идёт по адресу mongodb+srv://. Самая частая ошибка — IP-адрес сервера приложения не добавлен в список сетевого доступа Atlas, и подключение обрывается по тайм-ауту. Запись 0.0.0.0/0 в списке разрешений «решает» проблему, но открывает базу всему интернету, так делать не стоит. Добавляйте только конкретный IP своего сервера.
// .env
// MONGO_URI=mongodb+srv://app:PAROL@cluster0.abcde.mongodb.net/dostavka
const { MongoClient } = require('mongodb');
const client = new MongoClient(process.env.MONGO_URI);
await client.connect();
const orders = client.db('dostavka').collection('orders');
await orders.insertOne({ phone: '+998901234567', total: 85000, createdAt: new Date() });
Задержка и размещение данных
Кластеры Atlas размещаются в регионах крупных облачных провайдеров, и ни один из них не находится в Узбекистане. Если сервер приложения в Ташкенте, а база в зарубежном регионе, каждый запрос пересекает границу и возвращается обратно. Когда одна страница отправляет в базу десятки запросов, эти задержки складываются в заметное для пользователя торможение. Поэтому приложение и базу лучше держать как можно ближе друг к другу, в одной сети.
Второй важный аспект — законодательство. В Узбекистане действует требование хранить персональные данные граждан на серверах, расположенных на территории страны. Если в вашей базе хранятся имена, телефоны или адреса клиентов, прежде чем размещать их в зарубежном облаке, уточните актуальные требования по официальным источникам или у юриста. Нередко этот вопрос сам решает выбор в пользу сервера в Узбекистане.
Пример: служба доставки в Ташкенте
Небольшой стартап по доставке еды написал приложение на Node.js и хранит заказы в MongoDB. Первые два месяца команда пользовалась бесплатным кластером Atlas и быстро проверила идею. С ростом числа заказов появились три проблемы: список в приложении курьера открывался медленно, лимиты бесплатного кластера были близки, а в заказах хранились телефоны и адреса клиентов. Команда решила перенести базу на VPS в Узбекистане, на один сервер с приложением.
MongoDB на своём сервере: установка и защита
MongoDB Community Edition в Ubuntu рекомендуется ставить из официального репозитория MongoDB, так как в системных пакетах версия может быть устаревшей или отсутствовать вовсе. Команды установки зависят от версии, поэтому берите их из официальной документации. После установки важнее всего две вещи: разрешить подключения только с самого сервера и включить аутентификацию.
# /etc/mongod.conf
net:
port: 27017
bindIp: 127.0.0.1
security:
authorization: enabled
Сначала создайте отдельных пользователей для администратора и для приложения. Пользователь приложения получает права только на чтение и запись своей базы, а пароль администратора в повседневной работе не используется. После изменения настроек перезапустите службу командой sudo systemctl restart mongod.
mongosh
use admin
db.createUser({ user: "admin", pwd: passwordPrompt(), roles: [ { role: "root", db: "admin" } ] })
use dostavka
db.createUser({ user: "app", pwd: passwordPrompt(), roles: [ { role: "readWrite", db: "dostavka" } ] })
Теперь приложение подключается по внутреннему адресу, а доступа к базе снаружи нет:
MONGO_URI=mongodb://app:PAROL@127.0.0.1:27017/dostavka?authSource=dostavka
Для транзакций, изменяющих несколько документов сразу, MongoDB требует набор реплик (replica set), даже если он состоит из одного сервера. Для набора реплик с включённой аутентификацией дополнительно настраивается файл ключа; эту процедуру тоже выполняйте по официальной документации.
Память, резервные копии и обслуживание
Движок WiredTiger по умолчанию забирает под кеш значительную часть оперативной памяти: примерно половину от (RAM − 1 ГБ) или 256 МБ, в зависимости от того, что больше. Если на небольшом VPS MongoDB работает вместе с приложением, полезно ограничить кеш параметром storage.wiredTiger.engineConfig.cacheSizeGB. Для резервного копирования используются mongodump и mongorestore; запускайте копирование ежедневно через cron и дублируйте архив в другое место.
mongodump --uri="mongodb://app:PAROL@127.0.0.1:27017/dostavka?authSource=dostavka" \
--archive=/backup/dostavka-$(date +%F).gz --gzip
mongorestore --uri="mongodb://app:PAROL@127.0.0.1:27017/dostavka?authSource=dostavka" \
--archive=/backup/dostavka-2026-11-04.gz --gzip --drop
Что выбрать
| Критерий | Atlas | Свой сервер (VPS) |
|---|---|---|
| Скорость старта | Несколько минут | Нужны установка и настройка |
| Администрирование | В основном на стороне сервиса | Обновления, бэкапы, мониторинг на вас |
| Задержка из Узбекистана | Выше из-за зарубежного региона | Минимальная на одном сервере с приложением |
| Размещение персональных данных | За рубежом | Можно хранить в Узбекистане |
| Контроль | В пределах возможностей сервиса | Полный |
Atlas удобен для экспериментов, прототипов и проектов, чья аудитория в основном за рубежом, особенно если в команде нет администратора. Для проектов с пользователями в Узбекистане, хранящих персональные данные и чувствительных к скорости, обычно правильнее собственный сервер MongoDB на VPS внутри страны. Такой сервер можно заказать в кабинете sayt.uz и держать приложение и базу в одном месте.