Установка и настройка MongoDB на CentOS

Обновлено Обновлено: Опубликовано Опубликовано:

Используемые термины: MongoDB, CentOS, Rocky Linux.

В данной инструкции мы рассмотрим процесс установки MongoDB на Linux CentOS (Rocky Linux). Также будут приведены примеры настройки подключения по сети, защита соединения с помощью шифрования и аутентификации.

Установка

На странице MongoDB Community Downloads смотрим стабильные версии программного продукта. На момент обновления инструкции это была 7.0.5.

С версии 5.0 для работы mongo требуется, как минимум, процессоры с кодовыми названиями:

  • Intel — Sandy Bridge (второе поколение Core i3, i5, i7) или Tiger Lake (поздние Celeron и Pentium). Выпускаются с 2009 года.
  • AMD — Bulldozer (линейка FX и Opteron). Выпускаются с 2011 года.

При попытке запустить MongoDB на компьютерах, процессоры которых не соответствуют данным требованиям мы получим ошибку trap invalid opcode.

Если мы столкнулись с данной проблемой у нас есть варианты:

  • На виртуальной машине играем с настройками типа процессора (например, для Proxmox помогает тип host).
  • Устанавливаем Mongo версии 4.4.
  • Меняем процессор.

Создаем файл для настройки репозитория:

vi /etc/yum.repos.d/mongodb-org.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

* в зависимости от устанавливаемой версии mongodb мы должны указать ее версию в директивах baseurl и gpgkey. Также обратите внимания, что мы задаем двучисленную версию (не 7.0.5, а 7.0).

Устанавливаем MongoDB:

yum install mongodb-org

Стартуем сервис и разрешаем его автозапуск:

systemctl enable mongod --now

Проверяем, что он запустился:

systemctl status mongod

Для подключения к СУБД вводим команду:

mongosh

В mongodb версии 4 команда будет:

mongo

Можно для проверки ввести команду, которая покажет созданные базы данных:

> show databases;

После первой установки мы должны увидеть следующее:

admin   0.000GB
config  0.000GB
local   0.000GB

В качестве примера работы мы можем попробовать создать новую базу данных и коллекцию. Объекты в MongoDB создаются автоматически при первом к ним обращении.

Для создания базы просто обращается к ней:

> use newDB

* в данном примере будут создана база newDB.

Для создания коллекции, выполняем команду на вставку данных:

> db.newCollection.insertOne( { x: 1 } )

Выходим из оболочки SQL:

> exit

Установка завершена.

Доступ по сети

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

Для начала, откроем порт в брандмауэре:

firewall-cmd --add-port=27017/tcp

firewall-cmd --add-port=27017/tcp --permanent

* по умолчанию, MongoDB работает на TCP-порту 27017.

Открываем конфигурационный файл СУБД:

vi /etc/mongod.conf

Находим директиву net и в ней опцию bindIp — добавляем IP-адрес, на котором наш сервер должен принимать запросы для MongoDB:

net:
  port: 27017
  bindIp: 127.0.0.1,192.168.1.15

* в нашем примере мы добавили к 127.0.0.1 адрес 192.168.1.15 — это сетевой адрес нашего сервера, на котором он должен принимать запросы.

Перезапускаем сервис mongod:

systemctl restart mongod

Чтобы проверить подключение, на другом компьютере должен быть установлен клиент для подключения к Mongo. Процесс его установки схож с установкой сервера. Рассмотрим пример для CentOS.

Сначала настраиваем репозиторий, как было рассказано выше.

И устанавливаем клиентскую часть: 

yum install mongodb-org-shell

Теперь можно подключиться к нашему серверу: 

mongo "mongodb://192.168.1.15:27017"

* в данном примере мы подключаемся к серверу MongoDB 192.168.1.15.

Также мы можем использовать MongoDB Compass — это приложение под Windows, Linux и macOS для работы с базой Mongo в графическом интерфейсе. Скачать его можно на странице официального сайта.

Аутентификация

По умолчанию, мы можем подключиться к СУБД без авторизации. Если нам необходимо повысить безопасность работы с базой, можно требовать ввода логина и пароля.

Заходим в командную оболочку Mongo:

mongo

Подключаемся к базе admin:

> use admin

Создаем пользователя, под которым будем авторизовываться:

> db.createUser({user:"root", pwd:passwordPrompt(), roles:[{role:"userAdminAnyDatabase", db:"admin"}, "readWriteAnyDatabase"]})

* в данном примере мы создадим пользователя с административными правами. Логин root, пароль будет запрошен после ввода.

Придумываем и вводим пароль

Enter password: 

После создания пользователя мы должны увидеть, примерно, следующую картину:

Successfully added user: {
        "user" : "root",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                },
                "readWriteAnyDatabase"
        ]
}

Чтобы создать пользователя с доступом к определенной базе, подключаемся к ней:

> use newDB

И используем команду:

> db.createUser({user:"dmosk", pwd:passwordPrompt(), roles:[{role:"readWrite", db:"newDB"}]})

* мы создадим пользователя dmosk с полными правами на базу newDB.

Для просмотра списка созданных пользователей нужно подключиться к базе admin и выполнить запрос find:

> use admin

> db.system.users.find()

Выходим из командной оболочки:

> exit

Открываем конфигурационный файл:

vi /etc/mongod.conf

Находим директиву security и задаем параметр authorization:

security:
  authorization: enabled

Перезапускаем сервис mongod:

systemctl restart mongod

Теперь пробуем подключиться к mongo. Мы можем авторизоваться несколькими способами.

а) Авторизация при подключении:

mongo --authenticationDatabase "admin" -u "root" -p

* в данном примере мы подключимся к базе под пользователем root. Пароль будет запрошен системой после ввода команды.

б) Авторизация после подключения:

> use admin

> db.auth("root", passwordPrompt())

SSL

Теперь усилим безопасность, зашифровав передачу данных. Для этого нам понадобиться сертификат. В нашем примере, мы будем использовать самоподписанный сертификат, но в продуктивной среде, лучше его купить или запросить у Let's Encrypt.

Создаем каталог, в котором разместим наши сертификаты:

mkdir -p /etc/ssl/mongodb

Сгенерируем самоподписанный сертификат:

openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/mongodb/cert.pem -keyout /etc/ssl/mongodb/cert.pem -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=mongo.dmosk.local/CN=mongo"

Выставим в качестве владельца на файлы сертификата пользователя mongodb:

chown mongodb:mongodb /etc/ssl/mongodb/cert.pem

Открываем конфигурационный файл СУБД:

vi /etc/mongod.conf

В директиву net дописываем опции TLS:

net:
  ...
  tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/mongodb/cert.pem

* в данном примере мы указали необходимость шифрования данных при передаче, а также путь до сгенерированного нами сертификата.

Перезапускаем сервис mongod:

systemctl restart mongod

Для подключения к базе с использованием шифрования используем команду:

mongo --tls --tlsAllowInvalidCertificates

* в данном примере мы указываем при подключении использовать шифрование с использованием TLS. Опция tlsAllowInvalidCertificates говорит, что клиент должен принять неправильный сертификат (так как у нас он самоподписанный).

Так как у нас еще настроена аутентификация, для подключения введем такую команду:

mongo --tls --tlsAllowInvalidCertificates --authenticationDatabase "admin" -u "root" -p

Для подключения к нашему серверу по сети, полная команда будет такой:

mongo "mongodb://192.168.1.15:27017" --tls --tlsAllowInvalidCertificates --authenticationDatabase "admin" -u "root" -p

# CentOS # Rocky Linux # Базы данных # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет