Русский (Russian)

Установка и защита MongoDB 8.0 на VPS с Ubuntu 24.04

2 min
VPS/VDS-хостинг

MongoDB — документоориентированная база данных, популярная в API, приложениях на Node.js и аналитике. В штатных репозиториях Ubuntu её нет, поэтому её ставят из официального репозитория MongoDB. В этом руководстве мы установим её на VPS Linux Infrawire, включим аутентификацию и ограничим доступ.

📋 Требования

  • VPS с Ubuntu 24.04 (noble) на x86_64 или ARM64 и доступом по SSH под root (IP-адрес и пароль root есть в вашем личном кабинете)
  • Процессор с набором инструкций AVX (обязателен начиная с MongoDB 5.0): grep -c avx /proc/cpuinfo должна вернуть число больше 0
  • Рекомендуется не менее 2 ГБ ОЗУ

1. Добавление официального репозитория

Импортируйте ключ подписи и объявите репозиторий для Ubuntu 24.04.

Bash
apt update && apt install -y curl gnupg curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor echo 'deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse' > /etc/apt/sources.list.d/mongodb-org-8.0.list

2. Установка и запуск службы

Bash
apt update apt install -y mongodb-org systemctl enable --now mongod systemctl status mongod --no-pager

Метапакет mongodb-org устанавливает сервер (mongod), оболочку (mongosh) и утилиты. Данные хранятся в /var/lib/mongodb, журналы — в /var/log/mongodb/mongod.log.

3. Создание администратора

Аутентификация пока отключена, поэтому локальная оболочка подключается без учётных данных. Создайте первого администратора в базе admin; passwordPrompt() запрашивает пароль, чтобы он не попал в историю командной оболочки.

Bash
mongosh
JavaScript
1use admin 2db.createUser({ 3 user: 'admin', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'userAdminAnyDatabase', db: 'admin' }, 'readWriteAnyDatabase' ] 6})

4. Включение аутентификации

Отредактируйте /etc/mongod.conf, добавив (или раскомментировав) блок security:

YAML
security: authorization: enabled
Bash
systemctl restart mongod

С этого момента любое подключение должно проходить аутентификацию.

5. Создание пользователя приложения

Приложение никогда не должно работать под учётной записью администратора. Выделите ему пользователя, ограниченного собственной базой.

Bash
mongosh -u admin -p --authenticationDatabase admin
JavaScript
1use appdb 2db.createUser({ 3 user: 'appuser', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'readWrite', db: 'appdb' } ] 6})

Соответствующая строка подключения: mongodb://appuser:PASSWORD@127.0.0.1:27017/appdb?authSource=appdb.

6. Сетевой доступ и межсетевой экран

По умолчанию MongoDB слушает только 127.0.0.1 — это самый безопасный вариант, когда приложение работает на том же VPS. Чтобы разрешить доступ другому серверу, добавьте адрес VPS в /etc/mongod.conf:

YAML
net: port: 27017 bindIp: 127.0.0.1,VPS_IP

Затем в межсетевом экране разрешите только сервер приложения и никогда не открывайте порт 27017 для всего интернета:

Bash
ufw allow OpenSSH ufw allow from APP_SERVER_IP to any port 27017 proto tcp ufw enable systemctl restart mongod

✅ Проверка установки

Bash
mongod --version mongosh --eval 'db.runCommand({ ping: 1 })' mongosh -u appuser -p --authenticationDatabase appdb appdb --eval 'db.test.insertOne({ ok: true })' ss -ltnp | grep 27017

Последняя команда показывает, на каком адресе слушает MongoDB. Запрос без аутентификации, например db.getUsers(), теперь должен завершаться ошибкой авторизации.

🔧 Устранение неполадок

mongod не запускается (Illegal instruction или код выхода 132) : виртуальный процессор не предоставляет AVX. Проверьте grep avx /proc/cpuinfo; без AVX MongoDB 8.0 на этой машине работать не будет.

Запуск завершается ошибками прав доступа : исправьте владельца файлов данных и сокета командой chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb, удалите устаревший /tmp/mongodb-27017.sock и перезапустите службу. Подробности — в journalctl -u mongod.

Authentication failed : пользователь был создан в определённой базе. Укажите нужную через --authenticationDatabase (или authSource в URI).

Удалённое подключение зависает по тайм-ауту : проверьте bindIp, правила в ufw status и совпадение IP клиента с разрешённым.


🎉 MongoDB 8.0 установлена, защищена аутентификацией и готова к работе с вашим приложением!

Следите за последними предложениями, скидками и специальными акциями.

Смотреть акции

Мы используем файлы cookie

Аналитические cookie улучшают работу сайта. Данные не продаются третьим лицам. Подробнее в политике конфиденциальности.