Установка и подключение к MongoDB

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

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

Установка

На странице сайта endoflife.date находим нужную версию программного продукта. Желательно, чтобы действовала поддержка, например 7.0.

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

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

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

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

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

И так, в нашем случае будет установка MongoDB 7.0. Для удобства нашей работы создаем переменную:

MONGO_VER=7.0

Также создадим переменную с указанием кодового названия нашей операционной системы:

OS_NAME=jammy

* jammy — название релиза Ubuntu. В данном примере, версия 22.04. На данный момент возможны варианты:

  • noble: 24.04.
  • jammy: 22.04.
  • focal : 20.04.
  • bionic : 18.04.

Посмотреть кодовое название и версию для вашей системы можно командой:

cat /etc/os-release | egrep «UBUNTU_CODENAME|VERSION_ID»

С помощью этих переменных создаем файл для настройки репозитория Ubuntu:

echo «deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/${MONGO_VER} multiverse» > /etc/apt/sources.list.d/mongodb-${MONGO_VER}-org.list

Импортируем ключ репозитория для проверки пакетов от подделки:

curl -fsSL https://pgp.mongodb.com/server-${MONGO_VER}.asc | gpg —dearmor -o /etc/apt/trusted.gpg.d/mongodb-org.gpg

Обновляем список пакетов:

apt update

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

apt install mongodb-org

Если система выдаст ошибку:

mongodb-org-mongos : Depends: libssl1.1 (>= 1.1.1) but it is not installable

Необходимо вручную поставить пакет libssl1.1:

curl -sLO http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb

dpkg -i libssl1.1*.deb

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

systemctl start mongod

systemctl enable mongod

Проверяем состояние:

systemctl status mongod

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

mongosh

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

mongo

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

> show databases;

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

admin 40.00 KiB
config 12.00 KiB
local 40.00 KiB

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

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

> use newDB

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

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

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

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

> exit

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

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

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

Настройка сервера

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

iptables -I INPUT -p tcp —dport 27017 -j ACCEPT

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

В системах на базе Ubuntu и Debian брандмауэр работает по принципу разрешения. Если мы не меняли данной настройки, то нам не обязательно создавать разрешающее правило для Mongo.

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

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

Посмотреть, на каких адресах слушает монго можно командой:

ss -tunlp | grep 27017

Настройка клиента и проверка подключения

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

Задаем переменные, такие же, как делали это для сервера:

MONGO_VER=7.0

OS_NAME=jammy

Добавляем репозиторий и ключ:

echo «deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/${MONGO_VER} multiverse» > /etc/apt/sources.list.d/mongodb-${MONGO_VER}-org.list

curl -fsSL https://pgp.mongodb.com/server-${MONGO_VER}.asc | gpg —dearmor -o /etc/apt/trusted.gpg.d/mongodb-org.gpg

Обновляем список пакетов:

apt update

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

apt install mongodb-org-shell

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

mongosh «mongodb://192.168.1.15:27017»

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

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

mongo «mongodb://192.168.1.15:27017»

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

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

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

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

mongosh

Подключаемся к базе 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»
]
}

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

> exit

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

vi /etc/mongod.conf

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

security:
authorization: enabled

* если данная директива закомментирована, снимаем комментарий.

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

systemctl restart mongod

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

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

mongosh —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.remontka.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

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

mongosh —tls —tlsAllowInvalidCertificates

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

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

mongosh —tls —tlsAllowInvalidCertificates —authenticationDatabase «admin» -u «root» -p

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

mongosh «mongodb://192.168.1.15:27017» —tls —tlsAllowInvalidCertificates —authenticationDatabase «admin» -u «root» -p

Примеры подключения из языков программирования

Рассмотрим небольшие примеры для подключения к MongoDB из языков программирования PHP и Python.

PHP

Для возможности работы PHP с Mongo необходимо установить соответствующее расширение. Выполняем пошагово следующие действия:

apt install php-pear php-dev

pecl channel-update pecl.php.net

pecl install mongodb

Для каждого возможного варианта использования PHP необходимо создать отдельный конфигурационной файл. В данном примере, под php 7.4 для cli, php-fpm, apache.

В системах на базе RPM (например, CentOS или Red Hat), нет разделения php на версии. Таким образом, нам нужно будет создать только один файл (как правило, в каталоге /etc/php.d).

а) CLI

vi /etc/php/7.4/cli/conf.d/20-mongodb.ini

extension=mongodb.so

б) PHP-FPM

vi /etc/php/7.4/fpm/conf.d/20-mongodb.ini

extension=mongodb.so

Для применения настройки в php7.4-fpm перезапускаем его:

systemctl restart php7.4-fpm

в) APACHE

vi /etc/php/7.4/apache/conf.d/20-mongodb.ini

extension=mongodb.so

Для применения настройки в apache перезапускаем его:

systemctl restart apache2

Проверяем, что в php появился новый модуль:

php -m | grep mongodb

Мы должны увидеть:

mongodb

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

mkdir /scripts

Создаем сам скрипт:

vi /scripts/test_mongo.php

  1. <?php
  2. $options[‘tls’] = true;
  3. $options[‘tlsAllowInvalidCertificates’] = true;
  4. $connection = new MongoDBDriverManager(«mongodb://root:test123@localhost», $options);
  5. $command = new MongoDBDriverCommand([‘ping’ => 1]);
  6. $cursor = $connection->executeCommand(‘admin’, $command);
  7. $result = $cursor->toArray();
  8. print_r($result);
  9. ?>

* в данном примере мы подключаемся к локальному серверу MongoDB, авторизовываемся под пользователем root с паролем test123 . Также мы применяем шифрование для нашего подключения. В качестве примера мы выполняем запрос ping — для проверки подключения.

Запускаем скрипт на выполнение:

php /scripts/test_mongo.php

Мы должны получить такой вывод:

Array
(
[0] => stdClass Object
(
[ok] => 1
)
)

Python

Устанавливаем дополнительный компонент pymongo:

pip3 install pymongo

Создаем каталог для размещения нашего скрипта:

mkdir /scripts

Создаем сам скрипт:

vi /scripts/test_mongo.py

  1. #!/usr/bin/env python3
  2. # -*- encoding: utf-8 -*-
  3. from pymongo import MongoClient
  4. connection = MongoClient(‘mongodb://root:test123@localhost:27017/?tls=true&tlsAllowInvalidCertificates=true’)
  5. result = connection.admin.command(‘ping’)
  6. print(result)

* в данном примере мы подключаемся к локальному серверу MongoDB, авторизовываемся под пользователем root с паролем test123 . Также мы применяем шифрование для нашего подключения. В качестве примера мы выполняем запрос ping — для проверки подключения.

Разрешаем запуск нашего файла на выполнение:

chmod +x /scripts/test_mongo.py

Запускаем наш скрипт:

/scripts/test_mongo.py

Получаем такой вывод:

{‘ok’: 1.0}

Удаление MongoDB с компьютера Ubuntu

Если необходимо удалить MongoDB с компьютера Ubuntu, выполняем пошагово следующие действия.

Останавливаем сервис:

systemctl stop mongod

Запрещаем его автозапуск:

systemctl disable mongod

Удаляем СУБД с компьютера:

apt remove mongodb-org*

При необходимости удалить данные, вводим:

rm -rf /var/lib/mongodb

rm -rf /var/log/mongodb

Docker

В данной инструкции мы не будем рассматривать процесс работы с MongoDB в докер, а просто опишем несколько простых команд для его запуска в контейнере.

Для начала, необходимо установить сам Docker . После можно скачать образ mongodb:

docker pull mongo

Для простого запуска используем команду:

docker run —name mongo-server -d mongo

* в данном примере мы поднимем контейнер из образа mongo с именем mongo-server .

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

docker exec -it mongo-server mongo

Читайте также

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

2, Прямые запросы из PostgreSQL к MongoDB ,

EnglishRussianUkrainian