﻿# MongoDB

> [HTML Version](mongodb.html)

В статье описаны:

- установка MongoDB 8.0 для ОС Ubuntu Linux 24.04. Вы также можете ознакомиться с кратким руководством в [официальной документации MongoDB](https://www.mongodb.com/docs/manual/installation/);

- [подготовка базы данных в MongoDB к восстановлению](#prepare-to-recovery).

Перед установкой СУБД:

- проверьте поддерживаемые версии MongoDB для корректной работы системы в статье [«Системные требования ELMA365 On-Premises»](elma365-enterprise-on-premises.md#mongo);

- оцените планируемую нагрузку. При больших объёмах данных рекомендуется устанавливать СУБД на отдельной виртуальной машине. Это позволит избежать конкуренции за ресурсы и обеспечить стабильную работу системы ELMA365. Подробнее о вариантах организации инфраструктуры читайте в статьях [«ELMA365 On-Premises Standard»](elma365-on-premises-standard.md) и [«ELMA365 On-Premises Enterprise»](elma365-enterprise.md).

Если вы устанавливаете MongoDB 5.0, эта версия требует использования набора инструкций AVX. Предварительно проверьте их наличие следующей командой:

````
cat /proc/cpuinfo | grep avx

начало внимание

````
Для примера в статье используется имя базы **elma365**, пользователь **elma365 **и пароль **SecretPassword**.** **При настройке задайте эти данные согласно политике безопасности, принятой в вашей организации.

````
конец внимание

````
Установка состоит из пяти этапов:

1. [Установка MongoDB](#installation).

2. [Настройка MongoDB](#add_db).

3. [Настройка подключения к MongoDB](#connection-setup).

4. [Инициализация реплики](#replica-initial).

5. [Подключение к MongoDB](#connection).

## Шаг 1. Установка MongoDB

Для установки MongoDB добавьте официальный репозиторий:

````
sudo apt-get install gnupg  
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | sudo 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" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list  
sudo apt-get update

````
Далее установите MongoDB:

````
sudo apt install mongodb-org

````
Запустите MongoDB:

````
sudo systemctl enable --now mongod

## ````
Шаг 2. Настройка MongoDB

````
Начало примечание

````
**Примечание**

Для пароля разрешается применять следующие символы: 

- Заглавные латинские буквы: от A до Z;

- Строчные латинские буквы: от a до z; 

- Цифры от 0 до 9; 

- Символы: -\_.

Зарезервированные (недопустимые) символы:

\! \* ' ( ) ; : @ \& = + \$ , / ? % # \[ \]

````
Конец примечание

1. ````
Зайдите в **mongosh** (Command Line Interface) и создайте базу данных:

````
mongosh

2. ````
Используйте базу ELMA365. Если база отсутствует, её необходимо создать:

````
use elma365

3. ````
Создайте отдельного пользователя **elma365** для работы с БД с паролем **SecretPassword**. Имя пользователя и пароль приведены для примера:

````
db.createUser(\{user:'elma365', pwd:'SecretPassword', roles:\[\{role:"readWrite", db:"elma365"\},\{"role":"root", "db":"admin"\}\]\})

4. ````
Убедитесь, что пользователь создан:

````
show users

5. ````
Для включения аутентификации создайте суперпользователя:

````
use admin  
db.createUser(\{user:'superuser', pwd:'SecretPassword', roles: \["root"\]\})

6. ````
Убедитесь, что пользователь создан:

````
show users

7. ````
Выйдите из **mongosh**:

````
exit

8. ````
Создайте файл с общим ключом аутентификации, укажите права для файла:

````
openssl rand -base64 756 > /var/lib/mongodb/keyfile  
chmod 400 /var/lib/mongodb/keyfile  
chown mongodb:mongodb /var/lib/mongodb/keyfile

9. ````
Включите безопасный доступ к серверу MongoDB.

Настройте параметры безопасности в файле \[OBJECT\] следующим образом: 

````
. . .  
setParameter:  
  enableLocalhostAuthBypass: false  
security:  
  authorization: "enabled"  
  keyFile: /var/lib/mongodb/keyfile  
. . .

10. ````
Перезапустите MongoDB:

````
sudo systemctl restart mongod

## ````
Шаг 3. Настройка подключения к MongoDB

Внесите изменения в файл конфигурации \[OBJECT\]:

````
sudo nano /etc/mongod.conf

````
Настройте значения переменных:

- \[OBJECT\] — список адресов, с которых можно принимать соединения по порту 27017 (в данном случае это делает доступным сервис MongoDB со всех внешних адресов);

- \[OBJECT\] — название реплики, по умолчанию **"rs0"**.

````
. . .  
\# network interfaces  
net:  
  port: 27017  
  bindIp: 0.0.0.0  
. . .  
replication:  
  replSetName: "rs0"  
  enableMajorityReadConcern: true  
. . .

````
Настройка включения TLS в MongoDB

  
Чтобы включить поддержку TLS в MongoDB, выполните следующие действия:

1. Подготовьте fullchain-сертификат. Как это сделать, читайте в статье [«Создание fullchain-сертификата»](fullchain-sertificate.md).

2. Скопируйте содержимое закрытого ключа **your\_domain.key** в **mongodb.pem**:

````
cat your\_domain.key > mongodb.pem

3. ````
Скопируйте содержимое fullchain-сертификата в **mongodb.pem**:

````
cat fullchain\_your\_domain.pem >> mongodb.pem

4. ````
Добавьте блок конфигурации **net**. Для этого в параметре **net.tls.certificateKeyFile** укажите путь до файла PEM, содержащего fullchain-сертификат и связанные закрытые ключи:

````
net:  
  tls:  
    mode: requireTLS  
    certificateKeyFile: /path/to/mongodb.pem

````
  
Подробнее о настройке TLS в MongoDB читайте в официальной документации [MongoDB](https://www.mongodb.com/docs/v5.0/tutorial/configure-ssl/).

Перезапустите MongoDB, чтобы изменение вступило в силу:

````
sudo systemctl restart mongod

## ````
Шаг 4. Инициализация реплики

1. Откройте консоль **mongosh** для конфигурирования.

Для подключения к MongoDB:

````
sudo mongosh -u superuser admin

````
Для подключения к MongoDB с включённым TLS:

````
sudo mongosh -u superuser --tls --host mongodb-server1.your\_domain --tlsCAFile /etc/ssl/CA.pem

2. ````
Инициализируйте реплику:

````
rs.initiate(\{ \_id: "rs0", members: \[\{ \_id: 0, host: "<mongodb-server-address>" \}\]\})

3. ````
Проверьте конфигурацию **replicaSet**:

````
rs.conf()

4. ````
Проверьте состояние MongoDB:

````
rs.status()

## ````
Шаг 5. Подключение к MongoDB

Строка для подключения к MongoDB:

````
mongodb://elma365:SecretPassword@<mongodb-server-address>:27017/elma365?ssl=false\&replicaSet=rs0\&readPreference=nearest

````
Строка для подключения к MongoDB c TLS:

````
mongodb://elma365:SecretPassword@mongodb-server.your\_domain:27017/elma365?ssl=true\&replicaSet=rs0\&readPreference=nearest

## ````
Подготовка базы данных в MongoDB к восстановлению

Если вам потребовалось восстановить базу данных из резервной копии, сначала подготовьте БД к восстановлению. 

Подробнее про резервное копирование читайте в статьях:

- [«Резервное копирование и восстановление баз данных внешними средствами»](dump_db.md#backup-mongo);

- [«Резервное копирование и восстановление баз данных: утилита Elma365-Backupper»](database-backup-and-recovery.md#backup-database);

- [«Резервное копирование и восстановление данных ELMA365 Standard»](backup-restore-elma365standard.md#backup).

````
Начало внимание

````
Предварительно убедитесь, что у вас есть резервная копия удаляемой базы данных. Только после этого приступайте к удалению БД.

````
Конец внимание

1. ````
Откройте консоль **mongosh** для конфигурирования:

- для подключения к MongoDB:

````
sudo mongosh -u superuser

- ````
для подключения к MongoDB с включённым TLS:

````
sudo mongosh -u superuser --tls --host mongodb-server1.your\_domain --tlsCAFile /etc/ssl/CA.pem

2. ````
Удалите базу данных **elma365**:

````
use elma365  
db.dropDatabase()

3. ````
Создайте пустую базу данных **elma365** для последующего восстановления БД из резервной копии. Для этого выполните действия из [шага 2 в настройках MongoDB](#create-db).

4. После этого выполните восстановление данных, в зависимости от вашей поставки ELMA365 On-Premises и способа резервного копирования:

- [восстановление резервной копии с помощью утилиты Elma365-Backupper](database-backup-and-recovery.md#recovery-database);

- [восстановление резервной копии с помощью WAL-G](backup-and-recovery-with-wal-g-and-rclone.md#wal-g-in-mongo);

- [восстановление для резервного копирования внешними средствами](dump_db.md#recovery-mongo);

- [восстановление резервной копии в поставке Standard](backup-restore-elma365standard.md#restore-data).