Настройка набора реплик MongoDB локально в docker или с помощью Atlas для Prisma ORM

Настройка набора реплик MongoDB локально в docker или с помощью Atlas для Prisma ORM

Обзор

Prisma требует, чтобы экземпляр MongoDB работал как набор реплик, который нетривиально настроить локально, хотя довольно легко с помощью Atlas. Но если ваше интернет-соединение не очень хорошее, установка локального экземпляра становится обязательной для разработки.

Почему я пишу эту статью? Потому что существует слишком много способов сделать это неправильно. Я нашел правильный способ тяжелым путем. Если вам нужно быстрое решение, вы можете проверить мой ответ на stackoverflow. Здесь я собираюсь предоставить подробные шаги с объяснениями.

Мемы

Что такое набор репликаций

Набор реплик в MongoDB - это группа процессов mongodb, которые обрабатывают одни и те же данные для обеспечения избыточности.

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

Существует один первичный узел и другие вторичные узлы. Вот диаграмма, которая суммирует взаимодействие между первичными и вторичными узлами

Набор репликаций

Если вы хотите узнать больше, вы можете прочитать об этом здесь

Установка локального экземпляра с помощью Docker

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

Перейдите к тегам и найдите последнюю доступную версию, на данный момент это 5.0.3.

Извлеките образ docker с помощью

docker pull prismagraphql/mongo-single-replica:5.0.3

Запустите образ с помощью этой команды

docker run --name mongo \
      -p 27017:27017 \
      -e MONGO_INITDB_ROOT_USERNAME="monty" \
      -e MONGO_INITDB_ROOT_PASSWORD="pass" \
      -d prismagraphql/mongo-single-replica:5.0.3

Теперь необходимо настроить URL подключения, в данном случае он должен выглядеть следующим образом,

DATABASE_URL="mongodb://monty:pass@localhost:27017/db_name?authSource=admin&directConnection=true"

Замените db_name на имя вашей базы данных, если она не существует, она будет создана автоматически.

Обратите внимание, что ROOT_USERNAME и authSource не совпадфают, вы можете изменить ROOT_USERNAME на любой другой, но authSouce должен быть admin, так как это база данных, которая содержит учетные данные пользователей.

Наконец, протестируйте соединение. Выполните эту команду в корневом каталоге проекта. Это синхронизирует вашу схему с базой данных

npx prisma db push

Настройка в MongoDB Atlas

  • Создайте бесплатный аккаунт https://www.mongodb.com/cloud/atlas/register
  • Создайте новый проект
    Нажмите на кнопку "Создать базу данных


Build Database

Выберите свободный кластер M0 и задайте ему имя.
Create Cluster

Вам будет предложено создать пользователя
Create User

ПРИМЕЧАНИЕ: Для безопасности вы должны использовать автоматически сгенерированный пароль и записать его где-нибудь.
Ваш IP будет автоматически добавлен в список доступа, нажмите ”Завершить и закрыть” и перейдите к базе данных.


Finish Cluster Creation

Чтобы получить url подключения, нажмите кнопку “Connect” и выберите “Drivers”.
Connect

Наконец, скопируйте url подключения и замените на ваш автоматически сгенерированный парольGet URL

ВАЖНО: Вы должны добавить имя базы данных после имени хоста. В моем случае url выглядит следующим образом

DATABASE_URL="mongodb+srv://monty:pass@cluster0.nqtl0pv.mongodb.net/db_name?retryWrites=true&w=majority"

Протестируйте соединение и схему синхронизации

npx prisma db push