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

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

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

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

Установка

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

Обратите внимание, установка MongoDB возможна на большое число популярных операционных систем — Amazon, Debian, Ubuntu, macOS, CentOS, Red Hat, Windows и другие.

Переходим на страницу загрузки ключей для проверки подлинности репозитория. Копируем ссылку для версии MongoDB, которую мы планируем установить:

Копируем ссылку для загрузки ключа репозитория Mongo

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

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

wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -

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

vi /etc/apt/sources.list.d/mongodb-org.list

Добавляем строку:

deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse

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

  • focal: 20.04.
  • bionic: 18.04.
  • xenial: 16.04.

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

apt-get update

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

apt-get install mongodb-org

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

systemctl start mongod

systemctl enable mongod

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

mongo

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

> show databases;

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

admin   0.000GB
config  0.000GB
local   0.000GB

В качестве примера работы мы можем попробовать создать новую базу данных и коллекцию. Объекты в 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

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

Устанавливаем ключ для репозитория:

wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -

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

vi /etc/apt/sources.list.d/mongodb-org.list

deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse

* как в случае с сервером, focal — название релиза Ubuntu. В данном примере, версия 20.04. Другие варианты: bionic: 18.04, xenial: 16.04.

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

apt-get update

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

apt-get 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"
        ]
}

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

> 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

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

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

PHP

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

apt-get 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.   
  3. $options['tls'] = true;
  4. $options['tlsAllowInvalidCertificates'] = true;
  5. $connection = new MongoDB\Driver\Manager("mongodb://root:test123@localhost", $options);
  6.  
  7. $command = new MongoDB\Driver\Command(['ping' => 1]);
  8. $cursor = $connection->executeCommand('admin', $command);
  9. $result = $cursor->toArray();
  10.  
  11. print_r($result);
  12.  
  13. ?>

* в данном примере мы подключаемся к локальному серверу 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.  
  4. from pymongo import MongoClient
  5.  
  6. connection = MongoClient('mongodb://root:test123@localhost:27017/?tls=true&tlsAllowInvalidCertificates=true')
  7.  
  8. result = connection.admin.command('ping')
  9.  
  10. 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-get 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

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

Да            Нет