Настройка MongoDB на сервере LinuxДобавьте официальный репозиторий MongoDB в свой дистрибутив, установите пакет mongodb-org, запустите и включите службу mongod, защитите её с помощью аутентификации, настройте bindIp и правила брандмауэра, а также проверьте соединения с помощью mongosh. Приведённые ниже шаги охватывают Ubuntu/Debian и RHEL/AlmaLinux/Rocky/Amazon Linux с настройками, готовыми к использованию в производственной среде.
В этом руководстве вы узнаете, как настроить MongoDB на сервере Linux с нуля — включая установку, конфигурацию, безопасность, оптимизацию производительности, резервное копирование и устранение неполадок. Я поделюсь практическими, проверенными на практике советами, основанными на более чем 12-летнем опыте поддержки баз данных на VPS, облачных и физических серверах, чтобы новички могли уверенно следовать инструкциям.
Что вы узнаете
- Установка MongoDB используя официальный репозиторий в дистрибутивах Ubuntu/Debian и RHEL.
- Запустите, включите и проверьте службу mongod.
- Настройка bindIp, портов, TLS/SSLи аутентификация
- Обеспечить брандмауэр сервера (UFW/firewalld) и обработка SELinux
- Применяйте лучшие производственные практики (THP, ulimits, файловая система).
- Создайте резервную копию и восстановите данные с помощью mongodump/mongorestore.
- Мониторинг производительности и Исправление распространенных ошибок
Предпосылки и планирование
- Linux: Ubuntu 22.04 LTS (Jammy), Ubuntu 20.04 (Focal), Debian 11 (Bullseye), RHEL 8/9, AlmaLinux/Rocky 8/9 или Amazon Linux 2
- Доступ root или sudo
- 2+ CPU ядра, 4–8 ГБ RAM Минимальные требования для небольших объемов работы (более высокие для производственных задач)
- Диск: рекомендуется SSD; для WiredTiger предпочтительнее файловая система XFS.
- Открытые порты: 27017/TCP (MongoDB), доступ только по доверенным IP-адресам.
- Синхронизация времени (systemd-timesyncd или chrony)
Примечание: MongoDB поддерживает определенные версии дистрибутивов в зависимости от версии. Если ваша ОС отличается, обратитесь к официальной документации. В этом руководстве показаны часто используемые и поддерживаемые комбинации.
Краткое руководство по быстрой установке от дистрибутива
Пример использования MongoDB 8.0 в Ubuntu 22.04 (Jammy).
sudo apt-get update
sudo apt-get install -y curl gnupg
# Import MongoDB GPG key
curl -fsSL https://pgp.mongodb.com/server-8.0.asc | \
sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-8.0.gpg
# Add official repo
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] \
https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 multiverse" | \
sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
# Install
sudo apt-get update
sudo apt-get install -y mongodb-org
# Start and enable
sudo systemctl enable --now mongod
# Check status and logs
systemctl status mongod --no-pager
sudo journalctl -u mongod -e --no-pagerЕсли вы используете Ubuntu 20.04 (Focal) или более новую LTS-версию, замените «jammy» на ваше кодовое имя, а «8.0» — на последнюю стабильную версию, поддерживаемую MongoDB для вашей ОС.
Пример использования MongoDB 7.0 в Debian 11 (Bullseye).
sudo apt-get update
sudo apt-get install -y curl gnupg
curl -fsSL https://pgp.mongodb.com/server-7.0.asc | \
sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] \
https://repo.mongodb.org/apt/debian bullseye/mongodb-org/7.0 main" | \
sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
sudo systemctl enable --now mongodПоддержка Debian зависит от версии MongoDB. Используйте последнюю поддерживаемую версию сервера для вашего релиза Debian, указанную в официальной документации MongoDB.
Пример работы с MongoDB 8.0 на RHEL 8/9, AlmaLinux 8/9, Rocky 8/9.
sudo tee /etc/yum.repos.d/mongodb-org-8.0.repo >/dev/null <<'EOF'
[mongodb-org-8.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/8.0/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://pgp.mongodb.com/server-8.0.asc
EOF
sudo dnf clean all
sudo dnf -y install mongodb-org
sudo systemctl enable --now mongod
sudo systemctl status mongod --no-pagerПример использования MongoDB 7.0 в Amazon Linux 2.
sudo tee /etc/yum.repos.d/mongodb-org-7.0.repo >/dev/null <<'EOF'
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2/mongodb-org/7.0/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://pgp.mongodb.com/server-7.0.asc
EOF
sudo yum clean all
sudo yum -y install mongodb-org
sudo systemctl enable --now mongodПочему бы не использовать стандартный пакет mongodb из дистрибутива? Он часто устаревает. В официальном репозитории mongodb-org можно найти актуальные версии с исправлениями безопасности.
Первоначальная проверка
# Confirm mongod is running
sudo systemctl status mongod --no-pager
# Connect with MongoDB Shell (mongosh)
mongosh --host 127.0.0.1 --port 27017
# Check server build info
db.runCommand({ buildInfo: 1 })Надежная конфигурация (критически важна для производства)
Отредактируйте файл mongod.conf, чтобы ограничить сетевой доступ и включить аутентификацию. В большинстве дистрибутивов этот файл находится по адресу /etc/mongod.conf.
sudo nano /etc/mongod.confРекомендуемый базовый уровень:
# /etc/mongod.conf
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
net:
port: 27017
bindIp: 127.0.0.1,10.0.0.5 # Replace 10.0.0.5 with your private server IP
security:
authorization: enabled
processManagement:
timeZoneInfo: /usr/share/zoneinfo
setParameter:
diagnosticDataCollectionEnabled: trueТЛС/SSL (Настоятельно рекомендуется для удаленных клиентов):
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem # PEM with cert + key
CAFile: /etc/ssl/ca.pemПерезапустите приложение, чтобы применить изменения:
sudo systemctl restart mongodСоздайте первого пользователя-администратора.
Если вы только что включили авторизацию, сначала убедитесь, что у вас по-прежнему есть возможность локального подключения. Создайте администратора в базе данных администраторов, а затем используйте эту учетную запись в дальнейшем.
mongosh --host 127.0.0.1 --port 27017
use admin
db.createUser({
user: "siteAdmin",
pwd: passwordPrompt(),
roles: [ { role: "root", db: "admin" } ]
})
exitСоздайте пользователя, предназначенного для конкретного приложения, с ограниченными правами доступа:
mongosh --host 127.0.0.1 --port 27017 -u siteAdmin -p --authenticationDatabase admin
use myapp
db.createUser({
user: "myappUser",
pwd: passwordPrompt(),
roles: [ { role: "readWrite", db: "myapp" } ]
})
exitМежсетевой экран и SELinux
UFW (Ubuntu/Debian)
# Allow only your trusted IP(s)
sudo ufw allow from 203.0.113.10 to any port 27017 proto tcp
# Or allow internal VPC subnet
sudo ufw allow from 10.0.0.0/24 to any port 27017 proto tcp
sudo ufw reloadfirewalld (RHEL/Alma/Rocky/Amazon)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" \
source address="203.0.113.10" port protocol="tcp" port="27017" accept'
sudo firewall-cmd --reloadSELinux: порт по умолчанию 27017 работает без изменений. Если вы измените порт, присвойте ему метку:
sudo semanage port -a -t mongod_port_t -p tcp 27018
sudo systemctl restart mongodПередовые методы повышения производительности и производства.
- Файловая система: на SSD предпочтительнее использовать XFS; для ресурсоемких OLTP-нагрузок следует избегать ext4.
- Отключите прозрачные большие страницы (THP) и NUMA для обеспечения предсказуемой задержки.
- Установить ulimits: разрешить открытие большего количества файлов и процессов.
- Память: кэш WiredTiger использует примерно 50% памяти. RAM По умолчанию необходимо обеспечить запас по высоте.
- Swap: Поддерживайте минимальный, но не нулевой уровень; установите vm.swappiness=1–10.
- Резервное копирование и мониторинг с первого дня (см. разделы ниже).
Отключите THP (временно, до перезагрузки).
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defragСохраняйте настройки THP через systemd или rc.local в соответствии с рекомендациями вашего дистрибутива.
ULimits (пример)
echo "mongod soft nofile 64000
mongod hard nofile 64000" | sudo tee /etc/security/limits.d/99-mongodb.confРезервное копирование и восстановление
Логическое резервное копирование работает везде; снимки файловой системы быстрее для больших наборов данных. Всегда проверяйте восстановление.
mongodump / mongorestore
# Backup all databases
mongodump --username siteAdmin --password --authenticationDatabase admin \
--out /backups/mongo-$(date +%F)
# Restore a specific database
mongorestore --username siteAdmin --password --authenticationDatabase admin \
--db myapp /backups/mongo-2025-01-10/myappСнимки LVM/облака (схема горячего резервного копирования)
- Убедитесь, что ведение журнала включено (по умолчанию).
- Заморозьте том, создайте снимок, а затем разморозьте; или используйте снимки томов из облака.
- Сохраняйте записи в журнале операций (в репликационных наборах), чтобы охватить момент времени, соответствующий моменту снимка.
Мониторинг и Наблюдение
- Журналы: /var/log/mongodb/mongod.log (journalctl -u mongod -f)
- Mongostat и Mongotop для быстрой проверки состояния здоровья.
- Включите профилирование медленных запросов для оптимизации производительности.
# Quick metrics
mongostat --rowcount 5
mongotop 5
# Enable slow query profiling (level 1)
mongosh -u siteAdmin -p --authenticationDatabase admin --eval \
'db.setProfilingLevel(1, { slowms: 100 })'Необязательно: Базовая инициализация репликационного набора.
Для обеспечения высокой доступности запустите три узла и создайте репликационный набор. Используйте частную сеть и TLS с файлами ключей или аутентификацией x.509.
# In /etc/mongod.conf on each node
replication:
replSetName: rs0
# Then on the primary candidate
mongosh -u siteAdmin -p --authenticationDatabase admin --host 10.0.0.5
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "10.0.0.5:27017" },
{ _id: 1, host: "10.0.0.6:27017" },
{ _id: 2, host: "10.0.0.7:27017" }
]
})
rs.status()Устранение распространенных ошибок
- Порт уже используется: другой процесс привязан к порту 27017. Выполните команду sudo lsof -i :27017 и остановите/отключите конфликтующую службу или измените порт MongoDB согласованно во всей конфигурации, брандмауэре и SELinux.
- Не удалось подключиться: проверьте bindIp (должен включать IP-адрес вашего клиента или 0.0.0.0 только для тестирования), правила брандмауэра и настройки TLS.
- Отказано в доступе к dbPath: Убедитесь, что mongod является владельцем файлов /var/lib/mongo и /var/log/mongodb; выполните команду sudo chown -R mongod:mongod .
- Ошибка аутентификации: подтвердите правильную базу данных аутентификации (обычно admin) и роль пользователя. Попробуйте выполнить команду `mongosh -u user -p –authenticationDatabase admin`.
- Интенсивность операций ввода-вывода или медленные запросы: проверьте индексы (db.collection.getIndexes()), включите профилирование медленных запросов и убедитесь, что THP отключен.
Практические советы из опыта проведения мероприятий.
- Поддерживайте актуальность обновлений безопасности MongoDB и ОС, используя официальный репозиторий.
- Отдельный том данных (например, /var/lib/mongo на выделенный SSD) для упрощения создания снимков и масштабирования.
- Используйте частную сеть между приложением и базой данных; никогда не предоставляйте доступ к порту 27017 из общедоступного интернета.
- Проверяйте восстановление резервных копий ежеквартально; резервная копия, которую вы не восстановили, — это лишь надежда, а не план.
- Для обеспечения стабильного роста рекомендуется планировать работы по уплотнению грунта/техническому обслуживанию в периоды низкой интенсивности движения.
Не хочу manage Всё это вы делаете сами? YouStableАвтора manageVPS и облачные серверы могут развертывать MongoDB с усиленными настройками по умолчанию, резервным копированием вне офиса и круглосуточным мониторингом — таким образом, вы можете сосредоточиться на внедрении функций, а не на настройке THP и правил брандмауэра.
Выполнив эти шаги, вы теперь знаете, как правильно настроить MongoDB на сервере Linux — от установки и безопасности до производительности и обслуживания. Если вы предпочитаете... manageпуть d, YouStable Мы можем развернуть и поддерживать производственную среду MongoDB, адаптированную под ваши рабочие нагрузки.
Часто задаваемые вопросы: Как настроить MongoDB на сервере Linux
Как наиболее безопасно установить MongoDB на Linux?
Используйте официальный репозиторий MongoDB (mongodb-org) для вашего дистрибутива, установите его с помощью вашей нативной базы данных. пакет managerи избегать устаревших пакетов от сообщества. Это гарантирует наличие актуальных функций, обновлений безопасности и корректной работы службы systemd.
Как обеспечить безопасность MongoDB после установки?
Включите авторизацию в файле mongod.conf, создайте пользователя-администратора, ограничьте использование bindIp только частными адресами, включите TLS/SSLи разрешайте доступ к порту 27017 только с доверенных IP-адресов. Поддерживайте операционную систему и MongoDB в актуальном состоянии и регулярно проводите аудит журналов.
Какой порт использует MongoDB, и нужно ли его менять?
По умолчанию используется порт 27017/TCP. Вы можете изменить его, но реальная безопасность обеспечивается межсетевым экраном, TLS и аутентификацией. Если вы измените порт, обновите метки межсетевого экрана и (при необходимости) SELinux соответствующим образом.
Как создать резервную копию MongoDB на работающем сервере?
Используйте mongodump для логического резервного копирования или создавайте снимки файловой системы/LVM/облачного хранилища с включенным журналированием. Для больших наборов данных снимки работают быстрее; обеспечьте покрытие журналов операций в репликационных наборах и всегда проверяйте результаты восстановления.
Нужен ли мне комплект реплик для производства?
Для обеспечения высокой доступности и восстановления на определенный момент времени с помощью журнала операций — да. Стандартный подход — использование репликационного набора из трех узлов. На этапе разработки начинайте с одного узла; переходите к репликационным наборам по мере масштабирования производственного трафика.