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.
Bashapt 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. Установка и запуск службы
Bashapt 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() запрашивает пароль, чтобы он не попал в историю командной оболочки.
Bashmongosh
JavaScript1use admin 2db.createUser({ 3 user: 'admin', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'userAdminAnyDatabase', db: 'admin' }, 'readWriteAnyDatabase' ] 6})
4. Включение аутентификации
Отредактируйте /etc/mongod.conf, добавив (или раскомментировав) блок security:
YAMLsecurity: authorization: enabled
Bashsystemctl restart mongod
С этого момента любое подключение должно проходить аутентификацию.
5. Создание пользователя приложения
Приложение никогда не должно работать под учётной записью администратора. Выделите ему пользователя, ограниченного собственной базой.
Bashmongosh -u admin -p --authenticationDatabase admin
JavaScript1use 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:
YAMLnet: port: 27017 bindIp: 127.0.0.1,VPS_IP
Затем в межсетевом экране разрешите только сервер приложения и никогда не открывайте порт 27017 для всего интернета:
Bashufw allow OpenSSH ufw allow from APP_SERVER_IP to any port 27017 proto tcp ufw enable systemctl restart mongod
✅ Проверка установки
Bashmongod --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 установлена, защищена аутентификацией и готова к работе с вашим приложением!