Home » Установка MongoDB на Linux — пошаговое руководство
Установка MongoDB на Linux — пошаговое руководство

Установка 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 может стать настоящим фундаментом для масштабируемых приложений.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked