Установка и базовая работа с MongoDB на Rocky Linux 9
В этой инструкции показано, как установить MongoDB 6.0 на сервер Rocky Linux 9, оптимизировать систему для продакшена, включить аутентификацию и выполнить базовые CRUD‑операции через mongosh. Включены чек‑листы, рекомендации по безопасности и пошаговый SOP для запуска и валидации.
Важно: перед внесением изменений сделайте резервную копию конфигураций и, при возможности, тестируйте изменения на стенде.
О чём эта статья
- Установка MongoDB и клиента mongosh.
- Оптимизация ОС (THP, ulimit, sysctl).
- Создание администратора и пользователей, включение авторизации.
- Примеры CRUD: вставка, поиск, обновление, удаление.
- Рекомендации по безопасности, чек‑листы для ролей и SOP для быстрого запуска.
Основные варианты поисковых запросов (SEO intent)
- установка MongoDB на Rocky Linux 9
- как поставить MongoDB 6 на Rocky 9
- настройка mongod на Rocky
- mongosh примеры CRUD
- оптимизация Linux для MongoDB
Введение

MongoDB — это открытая кроссплатформенная распределённая NoSQL база данных. Вместо таблиц она хранит данные в гибких документах BSON (бинарный JSON). MongoDB поддерживает автоматический failover, репликацию, шардинг для горизонтального масштабирования и геораспределённое развёртывание.
В этой инструкции вы установите MongoDB Community 6.0 на Rocky Linux 9, оптимизируете систему для работы СУБД и изучите базовые операции через mongosh. Рекомендуется иметь доступ к серверу с правами sudo.
Требования
- Сервер Rocky Linux 9 (в примере hostname — mongodb-rocky).
- Непривилегированный пользователь с sudo или root‑доступ.
Добавление официального репозитория MongoDB
MongoDB распространяется через официальный репозиторий. В примере используется версия 6.0.
Создайте файл репозитория:
sudo nano /etc/yum.repos.d/mongodb-org-6.0.repoДобавьте в файл следующие строки:
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.ascСохраните и выйдите. Проверьте список репозиториев:
sudo dnf repolistВы увидите, что репозиторий mongodb-org-6.0 добавлен.

Установка MongoDB Server и клиента mongosh
Установите пакеты mongodb-org и mongodb-mongosh:
sudo dnf install mongodb-org mongodb-mongoshПодтвердите «y», когда это потребуется. Примите GPG‑ключ, если система запросит подтверждение.

Запустите и проверьте сервис mongod:
sudo systemctl start mongod
sudo systemctl status mongodЕсли сервис запущен и включён, вы увидите соответствующий статус.

Подготовка и оптимизация системы для MongoDB
Для стабильной работы MongoDB на Linux нужно выполнить ряд системных настроек: отключение Transparent Huge Pages (THP), увеличение лимитов ulimit, корректировка виртуальной памяти через sysctl.
Отключение Transparent Huge Pages (THP)
THP может негативно влиять на производительность MongoDB. Отключим THP через systemd‑сервис, чтобы изменения сохранялись после перезагрузки.
Создайте сервис:
sudo nano /etc/systemd/system/disable-thp.serviceСодержимое файла:
[Unit]
Description=Disable Transparent Huge Pages (THP)
[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.targetЗагрузите systemd заново и включите сервис:
sudo systemctl daemon-reload
sudo systemctl enable disable-thp
sudo systemctl start disable-thpПосле включения сервис автоматически будет отключать THP при загрузке.

Увеличение ulimit для mongod
По умолчанию ограничение процессов/файлов (ulimit) невысоко. MongoDB требует больше открытых файлов и процессов. Создайте конфиг:
sudo nano /etc/security/limits.d/mongodb.confДобавьте:
mongod soft nproc 64000
mongod hard nproc 64000
mongod soft nofile 64000
mongod hard nofile 64000Это задаст лимиты для системного пользователя mongod.
Настройка sysctl
Добавьте параметры в /etc/sysctl.conf для увеличения лимитов виртуальной памяти и снижения свопинга:
sudo nano /etc/sysctl.confДобавьте:
fs.file-max = 2097152
vm.max_map_count = 262144
vm.swappiness = 1Примените изменения перезагрузкой:
sudo rebootПосле перезагрузки сервер будет запущен с THP отключённым, ulimit для mongod — 64000, vm.max_map_count — 262144.

Настройка администратора MongoDB и включение авторизации
После установки создадим административного пользователя и включим authorization в конфиге mongod.
Подключитесь к mongosh на сервере:
mongosh
Отключим мониторинг, включённый по умолчанию:
db.disableFreeMonitoring()Переключитесь в базу admin и создайте администратора. Рекомендуется использовать passwordPrompt() для безопасного ввода пароля:
use admin
db.createUser(
{
user: "myAliceAdmin",
pwd: passwordPrompt(),
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" }
]
}
)После создания получите подтверждение { ok: 1 }.

Выйдите из mongosh (Ctrl+D или quit). Откройте конфиг MongoDB и включите authorization:
sudo nano /etc/mongod.confНайдите секцию security и добавьте:
security:
authorization: enabledПерезапустите сервис:
sudo systemctl restart mongodПроверка аутентификации
Вариант 1 — войти в mongosh и выполнить db.auth:
mongosh
use admin
db.auth("myAliceAdmin", passwordPrompt())Вариант 2 — подключиться одной командой:
mongosh --port 27017 --authenticationDatabase \
"admin" -u "myAliceAdmin" -pВведите пароль при запросе.

Создание пользователя приложения и базы данных
После включения авторизации создайте пользователя для приложения с ограниченными правами.
Переключитесь в нужную базу и создайте пользователя:
use testdb
db.createUser(
{
user: "myTestUser",
pwd: passwordPrompt(),
roles: [ { role: "readWrite", db: "testdb" },
{ role: "read", db: "reporting" } ]
}
)Проверьте список пользователей:
use admin
db.system.users.find()Выйдите и подключитесь от имени myTestUser:
mongosh --port 27017 -u "myTestUser" \
--authenticationDatabase "testdb" -p
db.runCommand({connectionStatus : 1})
Вставка и поиск данных: базовые CRUD‑операции
Переключитесь на testdb:
use testdbinsertOne — вставка одного документа
db.movies.insertOne(
{
title: "The Hobbit",
genres: [ "Adventure", "Fantasy" ],
runtime: 172,
rated: "R",
year: 2012,
directors: [ "Peter Jackson" ],
cast: [ "Martin Freeman", "Ian McKellen", "Richard Armitage" ],
type: "movie"
}
)После запроса вы получите подтверждение acknowledged: true.

show collections и find
show collections
db.movies.find( {} )Эти команды покажут коллекции и содержимое коллекции movies.

insertMany — вставка нескольких документов
db.movies.insertMany([
{
title: "The Lord of the Rings",
genres: [ "Action", "Adventure", "Drama" ],
runtime: 240,
rated: "PG-13",
year: 2001,
directors: [ "Peter Jackson" ],
cast: [ "Elijah Wood", "Ian McKellen", "Orlando Bloom" ],
type: "movie"
},
{
title: "Harry Potter",
genres: [ "Adventure", "Family", "Fantasy" ],
runtime: 140,
rated: "R",
year: 2007,
directors: [ "David Yates" ],
cast: [ "Daniel Radcliffe", "Emma Watson", "Rupert Grint" ],
type: "movie"
}
])Поиск по полю и оператор $in
db.movies.find( { directors: "Peter Jackson" })
// Поиск жанров с использованием $in
db.movies.find( { genres: { $in: [ "Action", "Family" ] } } )
Оператор $gte
Добавим ещё один фильм и выберем те, что вышли после 2001 года и относятся к Action:
db.movies.insertOne(
{
title: "Transformers",
genres: [ "Adventure", "Action", "Sci-Fi" ],
runtime: 150,
rated: "PG-13",
year: 2007,
directors: [ "Michael Bay" ],
cast: [ "Shia LaBeouf", "Megan Fox", "Josh Duhamel" ],
type: "movie"
}
)
// Поиск
db.movies.find( { genres: "Action", "year": { $gte: 2001 } } )В результате появятся фильмы 2001+ с жанром Action.

Обновление данных
Есть два подхода: частичное обновление (updateOne) и полная замена документа (replaceOne).
updateOne — частичное обновление
db.movies.updateOne( { title: "Transformers" },
{
$set: {
rated: "R"
}
})Ожидайте matchedCount: 1 и modifiedCount: 1.

replaceOne — полная замена документа
db.movies.replaceOne(
{ title: "Transformers" },
{
title: "Transformers: Dark of the Moon",
genres: [ "Adventure", "Action", "Sci-Fi" ],
runtime: 160,
rated: "PG-13",
year: 2011,
directors: [ "Michael Bay" ],
cast: [ "Shia LaBeouf", "Rosie Huntington-Whiteley", "Tyrese Gibson" ],
type: "movie"
}
)Проверьте, что замена прошла успешно:
db.movies.find( { title: "Transformers: Dark of the Moon" })
Удаление данных и очистка
deleteMany и deleteOne
// Удалить все документы с заданным title
db.movies.deleteMany( { title: "Transformers: Dark of the Moon" } )
// Удалить первый попавшийся документ с указанным cast
db.movies.deleteOne( { cast: "Ian McKellen" } )До и после удаления видно изменение количества документов.


Удаление пользователей и базы данных
Для удаления пользователей базы нужно иметь роль root у админа. Присвойте root‑роли, если нужно:
use admin
db.auth("myAliceAdmin", passwordPrompt())
db.grantRolesToUser("myAliceAdmin", ["root"]);Удаление всех пользователей из testdb и самой базы:
use testdb
db.runCommand( { dropAllUsersFromDatabase: 1 } )
db.dropDatabase()Проверьте список баз и пользователей:
use admin
show dbs
db.system.users.find()

Рекомендации по безопасности и эксплуатационная жёсткость
- Всегда включайте authorization и используйте сильные пароли.
- По возможности включайте TLS между клиентами и серверами MongoDB.
- Отключайте внешние сетевые интерфейсы или используйте firewall для ограничения доступа к порту 27017.
- Регулярно обновляйте MongoDB до поддерживаемой версии и проверяйте список CVE в официальной документации.
- Используйте репликацию и регулярные бэкапы.
- Минимизируйте права пользователей: принцип наименьших привилегий.
Быстрые шаги для включения TLS (вкратце)
- Сгенерируйте сертификаты для сервера и клиентов.
- Поместите сертификаты в защищённый каталог, доступный mongod.
- Обновите /etc/mongod.conf: добавьте net.tls.certificateKeyFile и net.tls.CAFile.
- Перезапустите mongod и протестируйте подключение через mongosh с TLS флагами.
Не используйте самоподписанные сертификаты в продакшене без контроля доверия и ротации.
Когда MongoDB может не подойти
- Когда нужны сложные транзакционные данные с сильными связями и строгими ACID требованиями на уровне множества таблиц — реляционные СУБД часто удобнее.
- Для аналитических запросов на огромных объёмах данных OLAP хранилища и специализированные колоночные СУБД дают лучшую производительность.
- Если вам нужна строгая согласованность во всех операциях и простая модель запросов SQL — реляционные БД остаются предпочтительными.
Альтернативные подходы и миграция
- Для документно‑ориентированных данных: Couchbase, DocumentDB (в облаке).
- Для требований SQL: PostgreSQL с JSONB может быть компромиссом — хранить документы и пользоваться SQL‑мощью.
- Для миграции данных: используйте mongodump/mongorestore или MongoDB Database Tools; для онлайн‑миграций рассмотрите change streams и ETL‑пайплайны.
Чек‑лист по ролям
Администратор (SRE/DevOps):
- Добавить репозиторий и установить пакеты.
- Отключить THP и настроить ulimit/sysctl.
- Настроить systemd и автозапуск mongod.
- Настроить TLS и firewall.
- Настроить мониторинг и бэкапы.
Разработчик приложения:
- Создать пользователя с минимальными правами.
- Подключиться через mongosh/драйвер с использованием аутентификации и TLS.
- Использовать индексы для частых запросов.
- Минимизировать размер документов и избегать больших массивов в одном документе.
DBA/Архитектор:
- Оценить необходимость репликации и шардинга.
- Проектировать модель данных под запросы (query‑driven design).
- Планировать ёмкость и SLI/SLO для времени отклика.
SOP — пошаговый плейбук для быстрого развертывания (короткая версия)
- Подготовка VM/серверов с Rocky Linux 9.
- Добавить репозиторий mongodb-org-6.0.
- Установить mongodb-org и mongodb-mongosh.
- Отключить THP, настроить ulimit и sysctl.
- Перезагрузить сервер.
- Запустить mongod и проверить статус.
- Создать администратора в mongosh и включить authorization в /etc/mongod.conf.
- Настроить firewall и при необходимости TLS.
- Настроить мониторинг и бэкап.
- Тестировать подключение и выполнить smoke‑test CRUD.
Критерии приёмки
- Сервис mongod в статусе active (running) после перезагрузки.
- THP отключено (проверяется содержимым /sys/kernel/mm/transparent_hugepage/enabled).
- ulimit для mongod >= 64000 (проверяется через pgrep/pid и /proc/
/limits). - Успешная аутентификация администратора и пользователя приложения.
- Успешное выполнение CRUD‑скрипта (insert/find/update/delete).
Факт‑бокс: ключевые числа и параметры
- Версия примера: MongoDB 6.0.
- Порт по умолчанию: 27017.
- Рекомендованный ulimit (nofile, nproc): 64000.
- fs.file-max в примере: 2097152.
- vm.max_map_count в примере: 262144.
- vm.swappiness: 1 (минимизировать использование swap).
Мини‑методология безопасного развёртывания
- Подготовьте окружение: сеть, ACL, firewall.
- Настройте OS‑параметры (THP/ulimit/sysctl).
- Установите MongoDB и базовые утилиты.
- Создайте администратора, включите authorization.
- Включите TLS и ограничьте сетевой доступ.
- Настройте мониторинг и бэкапы, проверьте процедуру восстановления.
Типичные ошибки и когда откатить изменения
- Если mongod не запускается после изменения конфигурации, проверьте /var/log/mongodb/mongod.log и откатите последние изменения в /etc/mongod.conf.
- Если после отключения THP наблюдаются неожиданные эффекты (редко), временно отключите сервис disable-thp и проанализируйте влияние.
- После настройки TLS используйте тестовые клиенты до массовых изменений, иначе приложения перестанут подключаться.
Глоссарий в одну строку
- mongod — демон сервера MongoDB.
- mongosh — современная интерактивная оболочка MongoDB.
- THP — Transparent Huge Pages, механизм управления большими страницами памяти.
- ulimit — пользовательские лимиты ядра Linux на процессы/файлы.
- BSON — бинарный формат JSON, используемый MongoDB.
Советы по тестированию и SLI/SLO (качественно)
- SLI: % успешных запросов CRUD и 95‑й процентиль времени ответа на ключевые запросы.
- SLO: поддерживать 95‑й процентиль времени ответа ниже заранее оговорённого значения для интерактивных операций.
- Тесты: прогоните нагрузку с realistic query patterns и проверьте влияние индексов.
Миграция и совместимость версий
- При обновлении между мажорными версиями придерживайтесь официального руководства MongoDB.
- Используйте mongodump/mongorestore для бэкап/восстановления или mongoexport/mongoimport для табличных выгрузок.
- Перед обновлением тестируйте на стейджинге и проверьте совместимость драйверов в ваших приложениях.
Краткое объявление для команды (100–200 слов)
Развернута MongoDB 6.0 на Rocky Linux 9. Проведены базовые оптимизации ОС (отключение THP, ulimit, sysctl). Включена авторизация и создан администратор. Для приложений создан пользователь с минимальными правами. Рекомендуется настроить TLS, firewall и мониторинг. Перед переходом в продакшн проверьте бэкап/восстановление и нагрузочное тестирование. Документация с командами и чек‑листами доступна в репозитории.
Краткое резюме
Вы установили MongoDB 6.0, оптимизировали ОС, создали администратора и пользователя приложения, отработали базовые CRUD‑операции. Дальше: настроить TLS, мониторинг, бэкапы и, при необходимости, репликацию/шардинг для масштабирования.
- Конец инструкции.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента