Введение

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

В этом учебном модуле мы установим MongoDB, будем управлять ее сервисами и включим опцию удаленного доступа.

Примечание. На момент составления данный учебный модуль устанавливает версию MongoDB <^>3.6<^>, доступную для репозиториев Ubuntu по умолчанию. Однако обычно вместо этого мы рекомендуем установить последнюю версию MongoDB. На момент написания это версия <^>4.4<^>. Если вы хотите установить последнюю версию MongoDB, мы рекомендуем следовать указаниям этого руководства Установка MongoDB в Ubuntu 20.04 из источника.

Предварительные требования

mongodb illustration for: Предварительные требования

Для выполнения этого учебного модуля вам потребуется следующее:

Шаг 1 — Установка MongoDB

MongoDB входит в официальные репозитории пакетов Ubuntu, т. е. мы можем устанавливать необходимые пакеты с помощью apt. Как уже было отмечено во введении, по умолчанию в репозиториях доступна не самая последняя версия. Чтобы установить последнюю версию Mongo, воспользуйтесь этим учебным модулем.

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

				
					
sudo apt update

				
			

Затем необходимо установить сам пакет MongoDB:

				
					
sudo apt install mongodb

				
			

Эта команда попросит подтвердить, что вы хотите установить пакет mongodb и его зависимости. Чтобы это сделать, нажмите Y, а затем ENTER.

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

Затем нужно убедиться, что сервер запущен и работает корректно.

Шаг 2 — Проверка службы и базы данных

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

Вначале проверим состояние службы:

				
					
sudo systemctl status mongodb

				
			

Вы увидите следующий результат:

				
					
[secondary_label Output]

● mongodb.service - An object/document-oriented database

 Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)

 Active: &lt;^&gt;active (running)&lt;^&gt; since Thu 2020-10-08 14:23:22 UTC; 49s ago

 Docs: man:mongod(1)

 Main PID: 2790 (mongod)

 Tasks: 23 (limit: 2344)

 Memory: 42.2M

 CGroup: /system.slice/mongodb.service

 └─2790 /usr/bin/mongod --unixSocketPrefix=/run/mongodb --config /etc/mongodb.conf

				
			

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

Мы можем дополнительно подтвердить это, фактически подключившись к серверу базы данных и запустив следующую диагностическую команду. Команда выведет текущую версию базы данных, адрес и порт сервера, а также результаты выполнения команды status:

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

				
			
				
					
[secondary_label Output]

MongoDB shell version v&lt;^&gt;3.6.8&lt;^&gt;

connecting to: &lt;^&gt;mongodb://127.0.0.1:27017&lt;^&gt;

Implicit session: session { "id" : UUID("e3c1f2a1-a426-4366-b5f8-c8b8e7813135") }

MongoDB server version: &lt;^&gt;3.6.8&lt;^&gt;

{

	"authInfo" : {

		"authenticatedUsers" : [ ],

		"authenticatedUserRoles" : [ ]

	},

	"ok" : 1

}

				
			

Значение 1 поля ok в ответе означает, что сервер работает нормально.

Теперь мы рассмотрим, как управлять экземпляром сервера.

Шаг 3 — Управление службой MongoDB

Процесс установки, описанный в шаге 1, настраивает MongoDB как службу systemd, и это означает, что вы можете управлять этим процессом с помощью стандартных команд systemctl наряду со всеми другими системными сервисами в Ubuntu.

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

				
					
sudo systemctl status mongodb

				
			

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

				
					
sudo systemctl stop mongodb

				
			

Чтобы запустить остановленный сервер, введите:

				
					
sudo systemctl start mongodb

				
			

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

				
					
sudo systemctl restart mongodb

				
			

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

				
					
sudo systemctl disable mongodb

				
			

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

				
					
sudo systemctl enable mongodb

				
			

Теперь изменим настройки параметров брандмауэра для нашей системы MongoDB.

Шаг 4 — Настройка брандмауэра (необязательно)

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

Если вы намереваетесь использовать сервер MongoDB только локально с запуском приложений на том же сервере, эту безопасную настройку рекомендуется сохранить. Однако если вы хотите иметь возможность подключения к серверу MongoDB из Интернета, необходимо разрешить входящие подключения, добавив соответствующее правило UFW.

Чтобы разрешить доступ к MongoDB через порт по умолчанию 27017 из любой точки, используйте команду sudo ufw allow <^>27017<^>. Однако включение доступа к серверу MongoDB через интернет с параметрами по умолчанию даст кому угодно доступ к серверу базы данных и его содержимому.

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

				
					
sudo ufw allow from &lt;^&gt;trusted_server_ip&lt;^&gt;/32 to any port &lt;^&gt;27017&lt;^&gt;

				
			

Вы можете проверить изменение параметров брандмауэра с помощью ufw:

				
					
sudo ufw status

				
			

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

				
					
[secondary_label Output]

Status: active



To Action From

-- ------ ----

OpenSSH ALLOW Anywhere

&lt;^&gt;27017 ALLOW Anywhere&lt;^&gt;

OpenSSH (v6) ALLOW Anywhere (v6)

&lt;^&gt;27017 (v6) ALLOW Anywhere (v6)&lt;^&gt;

				
			

Дополнительные настройки брандмауэра для ограничения доступа к службам можно найти в разделе Основы UFW: распространенные правила и команды брандмауэра.

Хотя порт и открыт, MongoDB все равно будет прослушивать только локальный адрес 127.0.0.1. Чтобы разрешить удаленные подключения, добавьте публичный маршрутизируемый IP-адрес вашего сервера в файл mongodb.conf.

Откройте файл конфигурации MongoDB в предпочитаемом текстовом редакторе. Команда в этом примере использует nano:

				
					
sudo nano /etc/mongodb.conf

				
			

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

				
					
[label /etc/mongodb.conf]

...

logappend=true



bind_ip = 127.0.0.1&lt;^&gt;,your_server_ip&lt;^&gt;

#port = 27017



...

				
			

Сохраните файл и выйдите из редактора. Если вы использовали nano для редактирования файла, нажмите CTRL + X, Y, а затем ENTER.

Затем перезапустите службу MongoDB:

				
					
sudo systemctl restart mongodb

				
			

Теперь MongoDB прослушивает удаленные соединения, но доступ к нему открыт для всех. Следуйте указаниям руководства Установка и защита MongoDB в Ubuntu 20.04, чтобы добавить административного пользователя и дополнительные ограничения.

Заключение

Более подробные обучающие модули по настройке и использованию MongoDB можно найти в следующих статьях сообщества the cloud provider. Официальная документация по MongoDB также содержит много информации о возможностях, предоставляемых MongoDB.