> For the complete documentation index, see [llms.txt](https://help.vdsnow.ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.vdsnow.ru/english/tutorials/vds-configuration/databases/how-to-install-mongodb.md).

# How to install MongoDB

**MongoDB** - бесплатная, открытая NoSQL база данных, стремительно набирающая популярность в современных веб-приложениях.

В этой статье рассмотрим установку MongoDB на сервер под управлением Ubuntu 18.04.

### Установка MongoDB <a href="#mongodb" id="mongodb"></a>

Официальный репозиторий пакетов Ubuntu уже включает свежую версию MongoDB, поэтому нам даже не придётся устанавливать сторонние репозитории.

В первую очередь обновите список пакетов Apt:

```bash
apt update
```

Теперь установите пакет MongoDB:

```bash
apt-get -y install mongodb
```

Эта команда установит последнюю версию MongoDB и все необходимые для её работы пакеты.

### **Настройка сервиса**

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

```bash
systemctl status mongodb
```

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

```
mongodb.service - An object/document-oriented database
Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2018-05-26 07:48:04 UTC; 2min 17s ago
Docs: man:mongod(1)
Main PID: 2312 (mongod)
Tasks: 23 (limit: 1153)
CGroup: /system.slice/mongodb.service
??2312 /usr/bin/mongod --unixSocketPrefix=/run/mongodb --config /etc/mongodb.conf
```

Согласно этому выводу, сервер MongoDB запущен и работает.

Теперь можно проверить работу сервера MongoDB путём запроса к нему. Выполните команду:

```bash
mongo --eval 'db.runCommand({ connectionStatus: 1 })'
```

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

```
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
{
  "authInfo" : {
    "authenticatedUsers" : [ ],
    "authenticatedUserRoles" : [ ]
  },
  "ok" : 1
}
```

Значение `1` в поле `ok` обозначает, что сервер работает и корректно обработал Ваш запрос.

### Управление сервисом MongoDB <a href="#mongodb-1" id="mongodb-1"></a>

MongoDB устанавливается как сервис `systemd`, что даёт возможность управлять им с помощью стандартной утилиты `systemctl`.

Для просмотра статуса работы сервера MongoDB используйте:

```bash
systemctl status mongodb
```

Для остановки сервера MongoDB:

```bash
systemctl stop mongodb
```

Для запуска сервера MongoDB:

```bash
systemctl start mongodb
```

И, соответственно, для перезапуска:

```bash
systemctl restart mongodb
```

По уолчанию MongoDB запускается автоматически при запуске системы. Если Вам это не нужно, то Вы можете легко отключить автозапуск с помощью команды:

```bash
systemctl disable mongodb
```

И, аналогично, если после захочется включить его автозапуск, используйте команду:

```bash
systemctl enable mongodb
```

### Настройка firewall <a href="#firewall" id="firewall"></a>

Предположим, что Вы хотите чтобы сервер MongoDB был доступен из Интернета и к нему могли подключаться внешние приложения, запущенные на других серверах.  Хоть это и не рекомендуется делать, но в некоторых случаях это необходимо.

Это можно сделать путём соответствующей настройки firewall `ufw`. Нужно разрешить доступ к порту MongoDB, которым по умолчанию является порт 27017.

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

```bash
ufw allow 27017
```

Чтобы обезопасить MongoDB и Ваши данные, лучше всего разрешить доступ только с конкретных IP-адресов или подсетей IP-адресов, это можно сделать следующей командой:

```bash
ufw allow from <IP-адрес>/32 to any port 27017
```

Теперь, когда порт открыт, нужно внести изменения в настройки MongoDB, чтобы сервер работал не только на локальном IP-адресе 127.0.0.1, но и на внешнем IP-адресе сервера.

Для этого откройте файл `/etc/mongodb.conf` через Ваш любимый редактор (nano, mcedit, vi):

```bash
nano /etc/mongodb.conf
```

Далее добавить внешний IP-адрес Вашего сервера в значение параметра `bind_ip`. Должно получиться так:

{% code title="/etc/mongodb.conf" %}

```
bind_ip = 127.0.0.1,<IP-адрес>
```

{% endcode %}

Сохраните изменения и перезапустите сервер MongoDB:

```bash
systemctl restart mongodb
```

Если всё сделано верно, то MongoDB будет доступен и извне.

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

### Настройка защищённого доступа к MongoDB <a href="#mongodb-2" id="mongodb-2"></a>

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

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

```bash
mongodb
```

Далее введите:

```sql
use admin
```

Теперь мы можем создать пользователя и назначить ему доступ ко всем базам данных сервера MongoDB:

```sql
db.createUser(
  {
    user: "<ЛОГИН>",
    pwd: "<ПАРОЛЬ>",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
```

Если создание пользователя пройдёт успешно, Вы увидите на экране надпись: `Successfully added user`.

Теперь нужно настроить аутентификацию через этого пользователя. Для этого откройте для редактирования файл `/etc/mongodb.conf` через Ваш любимый редактор (nano, mcedit, vi):

```bash
nano /etc/mongodb.conf
```

Найдите в нём секцию `#security` и удалите `#` (хэш) перед `security`, чтобы включить аутентификацию.

Должно получиться примерно следующее:

{% code title="/etc/mongodb.conf" %}

```
security:
  authorization: "enabled" 
```

{% endcode %}

Теперь перезапустите сервер MongoDB:

```bash
systectl restart mongodb
```

Для того, чтобы подключиться к MongoDB с данными только что созданного пользователя, используйте команду:

```bash
mongo -u <ЛОГИН> -p --authenticationDatabase admin
```
