# 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
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.vdsnow.ru/english/tutorials/vds-configuration/databases/how-to-install-mongodb.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
