Установка базы данных MongoDB на Ubuntu для Prisma
MongoDB – это популярная СУБД, являющаяся NoSQL-системой. В отличие от реляционных БД, информация в MongoDB хранится в формате JSON-подобных документов. Такие документы группируются в коллекции, при том, что каждый каждый из них может иметь отличную друг от друга структуру.
Разумно установить базу, ориентируясь на официальные рекомендации:
sudo apt-get install gnupg curl
Скачиваем ключи
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \ sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg \ --dearmor
Проверяем какая у нас версия Ubuntu:
cat /etc/lsb-release
Выбираем нужный вариант установки Mongo:
Создаем список sources list:
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
Обновляемся:
sudo apt-get update
Устанавливаем MongoDB:
sudo apt-get install -y mongodb-org
Проверяем способ запуска на Ubuntu
ps --no-headers -o comm 1
Выбираем нужный тип запуска:
sudo systemctl start mongod
sudo systemctl daemon-reload
Статус:
sudo systemctl status mongod
Автозагрузка:
sudo systemctl enable mongod
Остановка или перезагрузка:
sudo systemctl stop mongod
sudo systemctl restart mongod
Установка завершена!!!
Управление Mongo
Вы можете проверить, прослушивает ли сервер соответствующий порт. По умолчанию таким портом является порт 27017. Сделать это можно при помощи команды ss:
sudo ss -pnltu | grep 27017
По умолчанию MongoDB запускается с параметром bindIp, равным 127.0.0.1, который привязывается к сетевому интерфейсу localhost. Это означает, что mongod может принимать соединения только от клиентов, запущенных на том же сервере. Удаленные клиенты не смогут подключиться к mongod, и mongod не сможет инициализировать набор реплик, если для этого значения не будет задан допустимый сетевой интерфейс. Чтобы это исправить, нужно настроить наш сервер nginx на доступ к 127.0.0.1:27017 и настроить аутентификацию при обращении к базе данных. Подключим нашу базу к prisma сервера.
Вход в управление базой:
mongosh
Авторизация
Теперь, когда мы подключились к оболочке Mongo, давайте добавим в систему административного пользователя, в качестве первого шага на пути закрытия данной уязвимости. Для этого необходимо будет подключиться к базе данных admin. В этой базе хранится информация об учётных записях Mongo, а именно, имена пользователей, их пароли и роли в системе:
use admin
Установленный MongoDB содержит методы оболочки, основанные на JavaScript. Их вы можете использовать для управления базами данных. Один из них, метод db.createUser(), предназначен для создания новых пользователей в базе данных, в которой этот метод запущен.
Чтобы запустить метод, наберите в оболочке Mongo:
db.createUser(
Этот метод требует указания имени учётной записи, её пароля, а также, полномочий, которые вы хотите для неё определить. Как мы уже упоминали ранее, Mongo хранит свои данные в виде JSON-документов. По сути, при создании нового пользователя, вы создаёте документ, где соответствующие пользовательские данные хранятся в виде отдельных полей.
Как и в JSON-объектах, в Mongo содержимое документов оформляется фигурными скобками. Поэтому, чтобы начать добавление учётной записи, откройте фигурную скобку:
... {
Заметка: Mongo не будет считать метод завершённым, пока вы не закроете парные скобки. Поэтому, пока вы не наберёте завершающую метод скобку ), оболочка в качестве приглашения будет использовать символы ..., а по окончании набора снова сменит приглашение на >.
db.createUser(
... {
... user: "Admin",
... pwd: passwordPrompt(),
... roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
... }
... )
Теперь, нажмите Enter. Если синтаксис набранных строк корректен, метод запустится на исполнение и предложит вам ввести пароль для создаваемой учётной записи:
Теперь можно выйти оболочки Mongo, для чего наберите команду exit.
Откройте для редактирования конфигурационный файл mongod.conf, например, при помощи текстового редактора vim:
cd /etc ==> mongod.conf
В этом файле найдите строку #security и раскомментируйте её (удалите в начале строки символ #).
Следующей строкой добавьте текст:
authorization: enabled
Причём, необходимо убедиться, что в строке security нет никаких пробелов в её начале. Строка же authorization: enabled, напротив, имеет два пробела отступа в начале строки. Отредактированный текст должен выглядеть следующим образом, здесь же можно изменить порт:
Далее, необходимо перезапустить демон MongoDB для того, чтобы применились внесённые в конфигурацию изменения:
sudo systemctl restart mongod
Теперь запустите просмотр статуса службы:
sudo systemctl status mongod
Теперь мы можем проверить, работает ли добавленный параметр аутентификации должным образом.
Как видите, при подключении к оболочке система больше не сообщает нам о том, что система контроля доступа к базам данных не запущена. Такие сообщения с предупреждениями вы могли видеть, когда подключались к оболочке в начале работ по настройке безопасности MongoDB. Из этого можно сделать вывод, что аутентификация включена.
Чтобы убедиться, что теперь доступ к базам ограничен, наберите:
mongosh
show dbs
Вход в базу через авторизацию
mongosh -u AdminDB -p --authenticationDatabase admin
Все готово для организации внешнего дуступа к базе. Для этого необходимо настроить nginx сервер, для этого добавляем локацию:
location /mongodb {proxy_pass http://127.0.0.1:27017; }
Список баз данных:
show dbs
Создать базу данных:
use DATABASE_NAME
Команда use универсальная. Если база данных users уже существует, то будет выполнен просто переход в эту базу данных.
Если базы данных users не существует, то она будет создана и будет выполнен автоматический переход в эту базу данных.
Имя текущей базы данных
db
Удаление базы данных:
db.dropDatabase()
Важный момент - нужно находиться в той базе данных, которую необходимо удалить. Команда dropDatabase() не принимает аргументов.
Создать коллекцию:
db.createCollection(name, options)
Создание двух баз данных для Prisma сервера node.js/express
Призма при управлении базами данных требует основной и теневой базы. Поэтому создадим их обе из админки Ubuntu:
1)
use DATA_PDSERVER
db.createCollection("texts")
Для доступа в Prisma используем адрес:
DATABASE_URL = mongodb://AdminDB:***********@https://pletnevd.com/mongodb/DATA_PDSERVER?authSource=admin&retryWrites=true&w=majority