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

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

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

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

Установка

На странице сайта endoflife.date находим нужную версию программного продукта. Желательно, чтобы действовала поддержка, например 8.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 8.0. Для удобства нашей работы создаем переменную:

MONGO_VER=8.0

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

OS_NAME=noble

noble — название релиза Ubuntu. В данном примере, версия 24.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=8.0

OS_NAME=noble

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

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-mongosh

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

mongosh "mongodb://192.168.1.15:27017"

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

Также мы можем использовать 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())

Дополнительно

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

> db.dropUser("root")

Если нам нужно создать пользователя для базы с правами только на эту, конкретную, базу, переходим к ней:

> use dbname

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

> db.createUser({user:"dbuser", pwd:"password", roles:[ { role: "readWrite", db: "dbname" }, { role: "dbAdmin", db: "dbname" } ]})

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

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

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.   
  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.

1. Создание базы данных

База данных создается автоматически, как только мы к ней обращаемся:

> use newDB

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

Посмотреть созданные базы можно командой:

> show dbs

2. Создание пользователя

Для каждой базы создается свой набор пользователей. Например:

> use newDB

> db.createUser({
  user: "newUser",
  pwd: "newUserPass",
  roles: [
    { role: "readWrite", db: "newDB" },
    { role: "dbAdmin", db: "newDB" }
  ]
})

* в данном примере мы создадим пользователя newUser с паролем newUserPass. Ему выдадим права на базу newDB — чтение/запись + администрирование.

Посмотреть пользователей базы данных можно командой:

> db.getUsers()

3. Редактирование прав

Чтобы изменить права для уже созданного ранее пользователя, можно использовать метод grantRolesToUser:

> use newDB

> db.grantRolesToUser("newUser", [
  { role: "readWrite", db: "newDB" }
])

Удаление 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,

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

Да            Нет

Дмитрий Моск
— IT-специалист.
Настройка серверов, услуги DevOps.

Заказать настройку сервера баз данных

Нужна бесплатная консультация?

Мини-инструкции

Как настроить прозрачную аутентификацию в NGINX через LDAP

Как собрать установочный RPM-пакет для веб-сервера NGINX в Linux CentOS

Как настроить балансировку http-запросов в веб-сервере NGINX

Как установить, настроить и подключиться к MongoDB на Linux Ubuntu

Как установить и работать с Redis на сервере под управлением Linux Ubuntu

Как настроить свой приватный репозиторий для хранения образов Docker

Как работать с pipeline в Jenkins — подготовка системы, пример Groovy-скрипта

Другие инструкции

Все статьи

Нужна помощь? Пишите:






Реклама