- Home »

Установка MongoDB на Linux — пошаговое руководство
Сегодня разберёмся с установкой MongoDB на Linux — это одна из тех задач, которые выглядят простыми, но иногда могут превратиться в настоящий квест. Особенно если вы работаете с продакшн-окружением и нужно всё сделать быстро, правильно и без лишних экспериментов. MongoDB — это мощная NoSQL база данных, которая отлично подходит для современных приложений, работающих с большими объёмами неструктурированных данных.
Эта статья поможет вам пошагово настроить MongoDB на любом Linux-дистрибутиве, избежать типичных ошибок и сразу получить рабочее решение. Мы рассмотрим не только базовую установку, но и важные моменты безопасности, производительности и интеграции с другими инструментами.
Как работает MongoDB и почему именно она?
MongoDB — это документо-ориентированная база данных, которая хранит данные в BSON-формате (Binary JSON). В отличие от реляционных БД, здесь нет жёстких схем — вы можете добавлять поля на лету, что делает её идеальной для агильной разработки и работы с изменяющимися требованиями.
Основные преимущества MongoDB:
- Горизонтальное масштабирование из коробки
- Высокая производительность на чтение/запись
- Гибкая схема данных
- Богатый язык запросов
- Встроенная поддержка репликации и шардинга
Подготовка системы
Перед установкой MongoDB убедитесь, что у вас есть достаточно ресурсов. Для тестирования хватит и 1GB RAM, но для продакшена рекомендую минимум 4GB. Если нужен качественный VPS или выделенный сервер — там можно подобрать подходящую конфигурацию.
Обновляем систему:
sudo apt update && sudo apt upgrade -y
Устанавливаем необходимые пакеты:
sudo apt install wget curl gnupg2 software-properties-common apt-transport-https ca-certificates lsb-release
Установка MongoDB на Ubuntu/Debian
Добавляем официальный GPG-ключ MongoDB:
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -
Добавляем репозиторий (для Ubuntu 22.04):
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
Обновляем список пакетов и устанавливаем MongoDB:
sudo apt update
sudo apt install -y mongodb-org
Для закрепления версии (чтобы случайно не обновить при системном апдейте):
sudo apt-mark hold mongodb-org mongodb-org-database mongodb-org-server mongodb-org-mongos mongodb-org-tools
Установка на CentOS/RHEL/Fedora
Создаём файл репозитория:
sudo nano /etc/yum.repos.d/mongodb-org-7.0.repo
Добавляем содержимое:
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
Устанавливаем:
sudo yum install -y mongodb-org
Первичная настройка и запуск
Запускаем MongoDB и добавляем в автозагрузку:
sudo systemctl start mongod
sudo systemctl enable mongod
Проверяем статус:
sudo systemctl status mongod
Если всё хорошо, увидите что-то вроде:
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-01-15 10:30:45 UTC; 2min 15s ago
Базовая настройка безопасности
По умолчанию MongoDB запускается без аутентификации — это огромная дыра в безопасности! Первым делом создаём администратора:
mongosh
use admin
db.createUser({
user: "admin",
pwd: "ваш_супер_сложный_пароль",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})
exit
Теперь включаем авторизацию. Редактируем конфиг:
sudo nano /etc/mongod.conf
Добавляем или раскомментируем секцию security:
security:
authorization: enabled
Также настраиваем привязку к интерфейсам:
net:
port: 27017
bindIp: 127.0.0.1,your_server_ip
Перезапускаем MongoDB:
sudo systemctl restart mongod
Создание пользователей и баз данных
Теперь подключаемся с аутентификацией:
mongosh --port 27017 --authenticationDatabase "admin" -u "admin" -p
Создаём базу данных для приложения:
use myapp
db.createUser({
user: "myapp_user",
pwd: "another_strong_password",
roles: [ { role: "readWrite", db: "myapp" } ]
})
Оптимизация производительности
Вот несколько важных настроек для продакшена:
Параметр | Рекомендуемое значение | Описание |
---|---|---|
storage.wiredTiger.engineConfig.cacheSizeGB | 50% от RAM | Размер кэша WiredTiger |
net.maxIncomingConnections | 200-1000 | Максимум подключений |
operationProfiling.mode | slowOp | Профилирование медленных запросов |
Пример оптимизированного конфига:
storage:
dbPath: /var/lib/mongod
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 2
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
port: 27017
bindIp: 127.0.0.1,your_server_ip
maxIncomingConnections: 500
security:
authorization: enabled
operationProfiling:
mode: slowOp
slowOpThresholdMs: 100
Мониторинг и логирование
Для мониторинга MongoDB отлично подходит связка Prometheus + Grafana. Устанавливаем mongodb_exporter:
wget https://github.com/percona/mongodb_exporter/releases/download/v0.40.0/mongodb_exporter-0.40.0.linux-amd64.tar.gz
tar -xzf mongodb_exporter-0.40.0.linux-amd64.tar.gz
sudo cp mongodb_exporter-0.40.0.linux-amd64/mongodb_exporter /usr/local/bin/
Создаём systemd-сервис:
sudo nano /etc/systemd/system/mongodb_exporter.service
[Unit]
Description=MongoDB Exporter
After=network.target
[Service]
Type=simple
User=mongodb
Environment=MONGODB_URI=mongodb://monitoring_user:password@localhost:27017/admin
ExecStart=/usr/local/bin/mongodb_exporter
Restart=always
[Install]
WantedBy=multi-user.target
Типичные ошибки и их решения
Ошибка: “Failed to start mongod.service”
Обычно связана с правами доступа или неправильным конфигом. Проверяем:
sudo chown -R mongod:mongod /var/lib/mongod
sudo chown mongod:mongod /tmp/mongodb-27017.sock
sudo journalctl -u mongod
Ошибка: “Authentication failed”
Убедитесь, что используете правильную базу для аутентификации:
mongosh --authenticationDatabase "admin" -u "admin" -p
Проблемы с производительностью
Проверяем использование индексов:
db.collection.find({query}).explain("executionStats")
Альтернативы и сравнение
БД | Тип | Преимущества | Недостатки |
---|---|---|---|
MongoDB | Document | Гибкая схема, горизонтальное масштабирование | Потребляет много RAM |
CouchDB | Document | HTTP API, offline-first | Слабые запросы |
Redis | Key-Value | Очень быстрая, in-memory | Ограниченная персистентность |
PostgreSQL | Relational | ACID, JSON поддержка | Сложнее масштабировать |
Автоматизация и интеграция
Для автоматизации развёртывания можно использовать Ansible. Пример playbook:
---
- name: Install MongoDB
hosts: servers
become: yes
tasks:
- name: Import MongoDB GPG key
apt_key:
url: https://www.mongodb.org/static/pgp/server-7.0.asc
state: present
- name: Add MongoDB repository
apt_repository:
repo: "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse"
state: present
- name: Install MongoDB
apt:
name: mongodb-org
state: present
update_cache: yes
- name: Start and enable MongoDB
systemd:
name: mongod
state: started
enabled: yes
Интересные факты и нестандартные применения
- MongoDB может работать как файловая система через GridFS — удобно для хранения больших файлов
- Встроенная поддержка геопространственных запросов делает её отличным выбором для location-based приложений
- Change Streams позволяют отслеживать изменения в реальном времени — идеально для микросервисов
- Aggregation Pipeline настолько мощный, что может заменить многие ETL-процессы
Необычное применение — использование MongoDB как очередь сообщений с помощью capped collections:
db.createCollection("message_queue", { capped: true, size: 100000, max: 1000 })
Полезные команды для ежедневной работы
# Проверка статуса репликации
rs.status()
# Статистика по базе данных
db.stats()
# Топ самых медленных операций
db.runCommand({profile: 2})
db.system.profile.find().sort({ts: -1}).limit(5)
# Компактификация коллекции
db.runCommand({compact: "collection_name"})
# Создание индекса в фоне
db.collection.createIndex({field: 1}, {background: true})
# Мониторинг текущих операций
db.currentOp()
Резервное копирование и восстановление
Для создания бэкапов используем mongodump:
# Полный бэкап
mongodump --host localhost:27017 --authenticationDatabase admin -u admin -p --out /backup/
# Бэкап конкретной базы
mongodump --host localhost:27017 --authenticationDatabase admin -u admin -p --db myapp --out /backup/
# Восстановление
mongorestore --host localhost:27017 --authenticationDatabase admin -u admin -p /backup/
Для автоматизации бэкапов создаём cron-задачу:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/mongodb_$DATE"
mongodump --host localhost:27017 --authenticationDatabase admin -u admin -p$MONGO_PASS --out $BACKUP_DIR
tar -czf $BACKUP_DIR.tar.gz $BACKUP_DIR
rm -rf $BACKUP_DIR
find /backup -name "mongodb_*.tar.gz" -mtime +7 -delete
Заключение и рекомендации
MongoDB — это мощный инструмент, который при правильной настройке может значительно упростить разработку и улучшить производительность приложений. Главное — не забывать про безопасность и мониторинг.
Основные рекомендации:
- Всегда включайте авторизацию в продакшене
- Настройте регулярные бэкапы
- Мониторьте производительность и использование ресурсов
- Правильно проектируйте схему данных с учётом будущего роста
- Используйте индексы для оптимизации запросов
MongoDB особенно хорошо подходит для:
- Веб-приложений с изменяющимися требованиями к схеме данных
- Системы управления контентом
- IoT-приложений с большим объёмом данных
- Приложений реального времени
- Аналитических систем
Если вы только начинаете изучать NoSQL, MongoDB — отличный выбор для старта. Обширная документация на официальном сайте и активное сообщество помогут быстро освоить все тонкости.
Удачи в настройке! И помните — правильно сконфигурированная MongoDB может стать настоящим фундаментом для масштабируемых приложений.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.