Поиск по сайту:

Как установить и использовать MongoDB в Debian


MongoDB — это кроссплатформенная распределенная система баз данных NoSQL (не-SQL или нереляционная) с открытым исходным кодом. MongoDB использует гибкие документы для хранения различных форм данных вместо хранения данных в таблицах, как в традиционных базах данных SQL. MongoDB использует для хранения данных формат BSON, который является двоичным форматом JSON.

MongoDB — это распределенная база данных NoSQL со встроенными функциями высокой доступности, автоматическим аварийным переключением и избыточностью данных, а также горизонтальным масштабированием посредством сегментирования между распределенными кластерами, а также поддержкой географического развертывания в нескольких регионах. MongoDB также предоставляет API запросов, который поддерживает операции CRUD (чтение и запись), конвейер агрегации данных, текстовый поиск и геопространственные запросы.

Некоторые известные компании, использующие MongoDB, — это Forbes, Toyota, SEGA, EA, Vodafone, Verizon и многие другие.

В этом руководстве вы установите базу данных NoSQL MongoDB на сервер Debian 11. Вы также оптимизируете свой сервер Debian для развертывания MongoDB. В конце этого руководства вы также изучите некоторые операции MongoDB, базовые CRUD (создание, чтение, обновление и удаление) в MongoDB.

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

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

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

  • Сервер Debian 11 или Debian 12 — в этом примере используется сервер Debian с именем хоста «mongodb-server».
  • Пользователь без полномочий root с привилегиями sudo/root.

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

Добавление репозитория MongoDB

Чтобы установить MongoDB, вам необходимо добавить в свою систему официальный репозиторий MongoDB. На момент написания этой статьи последняя версия MongoDB — v6.0. На этом первом этапе вы добавите репозиторий MongoDB в свою систему Debian 11.

Прежде чем начать, запустите приведенную ниже команду apt, чтобы обновить индекс вашего пакета. Затем установите некоторые базовые зависимости, такие как gnupg2 и apt-transport-https.

sudo apt update
sudo apt install gnupg2 apt-transport-https wget curl

При появлении запроса введите y для подтверждения и нажмите ENTER.

После установки зависимостей выполните приведенную ниже команду, чтобы загрузить и добавить ключ GPG для репозитория MongoDB. Это автоматически преобразует ключ GPG «server-6.0.asc» в «/usr/share/keyrings/mongodb-org-6.0.gpg».

wget -q -O- https://www.mongodb.org/static/pgp/server-6.0.asc | \
    gpg --dearmor | sudo tee /usr/share/keyrings/mongodb-org-6.0.gpg > /dev/null 2>&1

Теперь выполните команду ниже, чтобы добавить репозиторий MongoDB для MongoDB v6.0.

В Дебиан 11

echo "deb [signed-by=/usr/share/keyrings/mongodb-org-6.0.gpg] http://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 main" | \
    sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

В Дебиан 12

echo "deb [signed-by=/usr/share/keyrings/mongodb-org-6.0.gpg] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/6.0 main" | \
    sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

Для Дебиан 11 и 12

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

sudo apt update

Вы должны получить такой вывод:

Затем вы начнете установку MongoDB с добавлением репозитория MongoDB в вашу систему Debian.

Установка сервера MongoDB и Mongosh

На этом этапе вы установите пакет сервера MongoDB и mongosh в качестве клиента MongoDB на свой сервер Debian. Вы установите последнюю версию сервера MongoDB и Mongosh v6.0.

Запустите приведенную ниже команду apt, чтобы установить пакеты «mongodb-org» и «mongodb-mongosh».

sudo apt install mongodb-org mongodb-mongosh

Введите y при появлении запроса и нажмите ENTER, чтобы продолжить.

После установки MongoDB запустите приведенную ниже командную утилиту systemctl, чтобы запустить и включить службу MongoDB.

sudo systemctl start mongod
sudo systemctl enable mongod

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

sudo systemctl status mongod

Теперь вы установили сервер MongoDB на сервер Debian 11. На следующем этапе вы настроите и оптимизируете свой сервер Debian для развертывания MongoDB.

Настройка системы

На этом этапе вы оптимизируете свой сервер Debian для установки MongoDB. Сначала вы отключите прозрачные огромные страницы (THP) в своей системе через служебный файл systemd, затем увеличите ulimit и максимальную виртуальную память.

Сначала вы отключите прозрачные огромные страницы (THP). Для этого создайте новый служебный файл systemd «/etc/systemd/system/disable-thp.service», используя приведенную ниже команду редактора nano.

sudo nano /etc/systemd/system/disable-thp.service

Добавьте в файл следующие строки. Эта служба отключит THP, заменив содержимое файлов «/sys/kernel/mm/transparent_hugepage/enabled» и «/sys/kernel/mm/transparent_hugepage/defrag». на «никогда».

[Unit]
Description=Disable Transparent Huge Pages (THP)
[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy=multi-user.target

Сохраните файл и выйдите из редактора, когда закончите.

Теперь запустите приведенную ниже команду systemctl, чтобы перезагрузить менеджер systemd и применить изменения.

sudo systemctl daemon-reload

После этого запустите и включите службу «disable-thp» с помощью приведенной ниже командной утилиты systemctl. Благодаря этому THP теперь будет отключаться при каждой загрузке.

sudo systemctl enable disable-thp
sudo systemctl start disable-thp

После отключения THP вам потребуется увеличить ulimit для сервера MongoDB.

По умолчанию в системе Linux используется ulimit «1024», тогда как для сервера MongoDB требуется как минимум ulimit «64000». Теперь вы увеличите ulimit для конкретного пользователя MongoDB через файл конфигурации системных ограничений.

Создайте новый файл конфигурации '/etc/security/limits.d/mongodb.conf', используя приведенную ниже команду редактора nano.

sudo nano /etc/security/limits.d/mongodb.conf

Добавьте в файл следующие строки. При этом вы увеличите ulimit для конкретного пользователя MongoDB «mongod».

mongod soft nproc 64000
mongod hard nproc 64000
mongod soft nofile 64000
mongod hard nofile 64000

Сохраните и выйдите из редактора, когда закончите.

Теперь, когда ulimit настроен, вы сможете увеличить максимальный объем виртуальной памяти на своем сервере Debian с помощью файла '/etc/sysctl.conf'.

Откройте файл '/etc/sysctl.conf' с помощью приведенной ниже команды редактора nano.

sudo nano /etc/sysctl.conf

Добавьте следующие строки в конец строки.

fs.file-max = 2097152
vm.max_map_count = 262144
vm.swappiness = 1

Сохраните файл и выйдите из редактора, когда закончите.

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

sudo reboot

Теперь ваш сервер Debian будет работать с отключенным THP, увеличен лимит ulimit для пользователя «mongod», а также увеличен максимальный объем виртуальной памяти. На следующем шаге вы узнаете, как защитить MongoDB, создав администратора и включив аутентификацию и авторизацию.

Настройка администратора MongoDB

На этом этапе вы узнаете, как создать нового пользователя в MongoDB через клиент MongoDB «mongosh». Затем вы также включите аутентификацию и авторизацию на своем сервере MongoDB через файл /etc/mongod.conf.

Войдите в оболочку MongoDB с помощью команды «mongosh» ниже.

mongosh

После входа в систему вы должны быть подключены к базе данных по умолчанию «test».

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

db.disableFreeMonitoring()

Затем покажите базе данных «admin» и создайте нового пользователя-администратора MongoDB «myAdminUser», используя следующие запросы MongoDB. Вам также будет предложено установить пароль для нового пользователя.

use admin
db.createUser(
  {
    user: "myAdminUser",
    pwd: passwordPrompt(),
    roles: [
      { role: "userAdminAnyDatabase", db: "admin" },
      { role: "readWriteAnyDatabase", db: "admin" }
    ]
  }
)

Когда новый пользователь и пароль будут созданы, на экране терминала вы увидите такой вывод, как «{ ok: 1 ». Это означает, что вы успешно создали нового пользователя.

Теперь нажмите Ctrl+d или введите quit, чтобы выйти из оболочки MongoDB.

После создания нового пользователя-администратора для MongoDB вы включите аутентификацию и авторизацию на своем сервере MongoDB.

Запустите приведенную ниже команду редактора nano, чтобы открыть файл конфигурации MongoDB '/etc/mongod.conf'.

sudo nano /etc/mongod.conf

Раскомментируйте параметр «security» и добавьте параметр «авторизация: включена», как показано в строках ниже.

security:
    authorization: enabled

Сохраните файл и выйдите из редактора.

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

sudo systemctl restart mongod

Таким образом, вы создали пользователя-администратора для сервера MongoDB «myAdminuser» и создали пароль. Кроме того, вы включили аутентификацию и авторизацию на своем сервере MongoDB через файл конфигурации /etc/mongod.conf. На следующем шаге вы подтвердите своего администратора MongoDB и проверите аутентификацию, чтобы убедиться, что вы защитили свое развертывание MongoDB.

Проверка пользователя-администратора MongoDB

На этом этапе вы подтвердите нового пользователя-администратора MongoDB, войдя на сервер MongoDB с помощью команды mongosh, и подтвердите аутентификацию с помощью нового пользователя-администратора.

Запустите приведенную ниже команду, чтобы войти в оболочку MongoDB.

mongosh

Теперь выполните приведенный ниже запрос для аутентификации с использованием нового пользователя-администратора MongoDB «myAdminUser». При появлении запроса введите своего администратора MongoDB.

use admin
db.auth("myAdminUser", passwordPrompt())

В случае успеха вы должны получить такой вывод, как '{ ok: 1 '.

Вы также можете подключиться к MongoDB и одновременно пройти аутентификацию с помощью однострочной команды. Выполните приведенную ниже команду «mongosh», чтобы подключиться к серверу MongoDB, который по умолчанию работает на порту 27017, через пользователя-администратора «myAdminUser».

mongosh --port 27017 --authenticationDatabase \
    "admin" -u "myAdminUser" -p

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

Теперь запустите приведенный ниже запрос, чтобы проверить текущее соединение с сервером MongoDB.

db.runCommand({connectionStatus : 1})

Вы должны получить примерно такой результат: вы подключены к серверу MongoDB и прошли аутентификацию как пользователь-администратор «myAdminUser».

Создание пользователя и базы данных в MongoDB

На этом этапе вы узнаете, как создать нового пользователя MongoDB, которого можно использовать для вашего приложения. Вы создадите нового пользователя MongoDB с доступом (чтение или запись) к определенной базе данных. Вы также подтвердите нового пользователя MongoDB, войдя в оболочку MongoDB и проверив подробное соединение.

Прежде чем начать, убедитесь, что вы вошли на сервер MongoDB. Затем переключитесь на базу данных «testdb», используя приведенный ниже запрос.

use tesdb

Теперь выполните приведенный ниже запрос, чтобы создать нового пользователя MongoDB. В этом примере вы создадите нового пользователя «MyTestUser» с ролью «readWrite» для базы данных «testdb» и ролью « прочитать» в базу данных «отчетность».

db.createUser(
  {
    user: "myTestUser",
    pwd:  passwordPrompt(),   // or cleartext password
    roles: [ { role: "readWrite", db: "testdb" },
             { role: "read", db: "reporting" } ]
  }
)

При появлении запроса введите пароль для нового пользователя. Затем вы получите такой вывод, как '{ ok: 1 }', что означает, что новый пользователь создан.

После создания нового пользователя MongoDB вы проверите список пользователей в MongoDB.

Выполните приведенный ниже запрос, чтобы переключиться на базу данных «admin». Затем проверьте список пользователей на вашем сервере MongoDB.

use admin
db.system.users.find()

Вы должны получить такой вывод: создан новый пользователь «myTestUser».

Нажмите Ctrl+d или введите quit, чтобы выйти из оболочки MongoDB.

Наконец, запустите приведенную ниже команду mongosh, чтобы войти в MongoDB через нового пользователя «myTestUser». Введите пароль для вашего пользователя.

mongosh --port 27017 -u "myTestUser" \
    --authenticationDatabase "testdb" -p

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

db.runCommand({connectionStatus : 1})

Вы должны получить вывод, подобный этому: теперь вы вошли на сервер MongoDB и авторизовались как новый пользователь «myTestUser».

Таким образом, вы создали нового пользователя MongoDB «myTestUser», которого можно использовать для развертывания вашего приложения. Этот пользователь также имеет привилегии/роли «readWrite» для базы данных «testdb» и роль «read» для базы данных « отчетность'.

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

Вставка и запрос данных

После создания нового пользователя MongoDB вы узнаете, как создать базу данных, вставить данные и получить данные из MongoDB. Вы узнаете, как использовать запросы «insertOne» и «insertMany» для добавления данных в MongoDB, а также научитесь использовать операторы запросов, такие как «$in» и «$gte».

Сначала переключитесь на базу данных «testdb», используя следующий запрос.

use testdb

Запустите приведенный ниже запрос, чтобы вставить новые данные и создать новую коллекцию в базе данных «testdb». В этом примере вы создадите новую коллекцию «movies» в базе данных «testdb» и будете использовать «inertOne». ' запрос на вставку новых данных.

Запрос «insertOne» используется для добавления новых/отдельных данных в коллекцию MongoDB.

db.movies.insertOne(
  {
    title: "The Hobbit",
    genres: [ "Adventure", "Fantasy" ],
    runtime: 172,
    rated: "R",
    year: 2012,
    directors: [ "Peter Jackson" ],
    cast: [ "Martin Freeman", "Ian McKellen", "Richard Armitage" ],
    type: "movie"
  }
)

Теперь вы получите вывод, например «подтверждено: ок», что означает добавление новых данных и создание новой коллекции.

Теперь запустите приведенный ниже запрос, чтобы проверить список коллекций в базе данных «testdb» и отобразить доступные данные в «testdb».

Запрос «показать коллекцию» покажет вам списки коллекций/таблиц в текущей базе данных, а запрос «найти» покажет доступные данные в вашей базе данных. Вы также можете фильтровать определенные поля с помощью запроса «Найти».

show collections
db.movies.find( { title: "The Hobbit" } )

Вы должны получить такой вывод: коллекция «movies» доступна в базе данных «testdb». Кроме того, вы получите новые добавленные данные, а именно

Далее вы также можете добавить несколько данных одновременно с помощью запроса «insertMany». Выполните приведенный ниже запрос, чтобы вставить два данных в коллекцию «movies» с помощью запроса «insertMany».

db.movies.insertMany([
   {
      title: "The Lord of the Rings",
      genres: [ "Action", "Adventure", "Drama" ],
      runtime: 240,
      rated: "PG-13",
      year: 2001,
      directors: [ "Peter Jackson" ],
      cast: [ "Elijah Wood", "Ian McKellen", "Orlando Bloom" ],
      type: "movie"
    },
    {
      title: "Harry Potter",
      genres: [ "Adventure", "Family", "Fantasy" ],
      runtime: 140,
      rated: "R",
      year: 2007,
      directors: [ "David Yates" ],
      cast: [ "Daniel Radcliffe", "Emma Watson", "Rupert Grint" ],
      type: "movie"
    },
    {
    title: "Transformers",
    genres: [ "Adventure", "Action", "Sci-Fi" ],
    runtime: 150,
    rated: "PG-13",
    year: 2007,
    directors: [ "Michael Bay" ],
    cast: [ "Shia LaBeouf", "Megan Fox", "Josh Duhamel" ],
    type: "movie"
    }
])

Выход :

Теперь выполните приведенный ниже запрос «find», чтобы получить данные. При этом вы получите данные с фильтром «режиссеры: «Питер Джексон»».

db.movies.find( { directors: "Peter Jackson" })

Вы получите такой результат: на вашем терминале будут показаны все фильмы с «режиссерами: «Питер Джексон»».

Далее вы также можете указать условия в запросе «найти», используя операторы запроса.

Запустите приведенный ниже запрос, чтобы получить любые данные, где «жанры» имеют значение «Действие», «Семья» и/или «». Научная фантастика». Оператор «$in» можно использовать для получения данных, соответствующих любому из значений, указанных в массиве.

db.movies.find( { genres: { $in: [ "Action", "Family", "Sci-Fi" ] } } )

Еще один оператор запроса, который вы можете попробовать, — это «$gte», который можно использовать для получения данных, которые больше или равны указанному значению.

запустите приведенный ниже запрос, чтобы получить данные с помощью оператора запроса «$gte». При этом будут получены все фильмы с жанрами «Приключения» и продолжительностью, большей или равной «150».

db.movies.find( { genres: "Adventure", "runtime": { $gte: 150 } } )

Вы получите аналогичный результат: в этом примере вы получите три фильма с продолжительностью больше или равной «150» в жанрах «Приключения». '.

Имея это в виду, вы теперь узнали, как вставлять и извлекать данные в MongoDB. Вы изучили базовый запрос «insertOne» для добавления одних данных и запрос «insertMany» для одновременного добавления некоторых данных.

Затем вы также изучили основы использования запроса «find» для получения данных из MongoDB. Кроме того, вы также узнали, как использовать операторные запросы «$in» и «$gte» в MongoDB.

На следующем шаге вы узнаете, как обновлять данные в коллекциях MongoDB.

Обновление данных в MongoDB

На этом этапе вы узнаете, как обновлять данные в MongoDB с помощью двух запросов: «updateOne» для обновления одного поля внутри документа и «replaceOne» для обновления. полностью заменить первые сопоставленные данные новыми данными.

Чтобы обновить данные в MongoDB, вы можете использовать несколько методов и запросов. В этом примере вы узнаете, как использовать запросы «updateOne» и «replaceOne». Запрос «updateOne» можно использовать для обновления одного поля в документе, а запрос «replaceOne» заменит весь документ.

Запустите приведенный ниже запрос, чтобы обновить данные с помощью запроса «updateOne». В этом примере вы обновите рейтинг «PG-13» на рейтинг «R» в фильме «Трансформеры.'.

db.movies.updateOne( { title: "Transformers" },
{
  $set: {
    rated: "R"
  }
})

Вы должны получить выходные данные, такие как «matchedCount: 1» и «modifiedCount: 1».

Теперь проверьте новые данные с помощью следующего запроса. Вы должны увидеть, что данные по фильму «Трансформеры» обновлены.

db.movies.find( { title: "Transformers" })

Затем выполните приведенный ниже запрос «replaceOne», чтобы заменить первые совпадающие данные в фильтре и заменить весь документ новыми данными. В этом примере вы замените весь документ фильма «Трансформеры» новыми данными.

db.movies.replaceOne(
  { title: "Transformers" },
  {
    title: "Transformers: Dark of the Moon",
    genres: [ "Adventure", "Action", "Sci-Fi" ],
    runtime: 160,
    rated: "PG-13",
    year: 2011,
    directors: [ "Michael Bay" ],
    cast: [ "Shia LaBeouf", "Rosie Huntington-Whiteley", "Tyrese Gibson" ],
    type: "movie"
  }
)

Теперь вы должны получить такой результат.

Теперь запустите приведенный ниже запрос, чтобы проверить недавно обновленные данные в вашей MongoDB.

db.movies.find( { title: "Transformers" })
db.movies.find( { title: "Transformers: Dark of the Moon" })

Вы должны получить примерно такой результат: фильм «Трансформеры» удален или заменен новым фильмом «Трансформеры: Тьма луны».

Удалить данные в MongoDB

На этом этапе вы узнаете, как удалить данные в документе MongoDB. Затем вы узнаете, как удалить базу данных и пользователя в MongoDB.

Запустите приведенную ниже команду, чтобы удалить данные из коллекции MongoDB. В этом примере вы удалите весь документ «Трансформеры: Темная сторона луны» с помощью запроса «deleteMany».

db.movies.deleteMany( { title: "Transformers: Dark of the Moon" } )
db.movies.find( { title: "Transformers: Dark of the Moon" })

Вы должны получить выходные данные, например «deletedCount: 1».

Затем выполните приведенную ниже команду, чтобы удалить один документ с помощью приведенного ниже запроса «deleteOne». Это приведет к удалению первых совпавших данных в фильтре.

В этом примере вы удалите первый документ, соответствующий запросу «cast: «Ian McKellen»».

db.movies.deleteOne( { cast: "Ian McKellen" } )
db.movies.find( { cast: "Ian McKellen" })

Ниже приведен вывод до и после удаления данных.

Перед удалением - Вам следует посмотреть два фильма с участием актерского состава: "Иэн МакКеллен"'.

После удаления документа вы должны увидеть только один фильм с в ролях: "Иэн МакКеллен".

Далее вы узнаете, как удалять пользователей и базы данных в MongoDB. Чтобы удалить пользователя в MongoDB, у вас должна быть роль «root» для пользователя-администратора MongoDB.

Выполните приведенную ниже команду для аутентификации в качестве пользователя-администратора MongoDB «myAliceAdmin» и введите свой пароль.

use admin
db.auth("myAdminUser", passwordPrompt())

После аутентификации выполните приведенный ниже запрос, чтобы предоставить пользователю-администратору роли root.

db.grantRolesToUser("myAdminUser", ["root"]);

Теперь переключитесь на «testdb» и удалите пользователей в базе данных «testdb» с помощью приведенного ниже запроса. Это приведет к удалению пользователя «myTestUser» из MongoDB.

use testdb
db.runCommand( { dropAllUsersFromDatabase: 1 } )

Вы должны получить вывод, например: «{ n:1, ok: 1 ».

Затем выполните приведенный ниже запрос, чтобы удалить базу данных «testdb».

db.dropDatabase()

И вы должны получить вывод, такой как '{ ok: 1, drop: 'testdb' '.

Теперь, когда «testdb» и пользователи в базе данных удалены.

Выполните приведенный ниже запрос, чтобы переключиться на базу данных «admin» и проверить список баз данных на вашем сервере MongoDB. Вы должны увидеть, что база данных «testdb» удалена.

use admin
show dbs

Наконец, запустите приведенный ниже запрос, чтобы отобразить и составить список пользователей в MongoDB.

db.system.users.find()

Вы должны получить такой вывод: использование «myTestUser» удалено с сервера MongoDB.

Заключение

В этом руководстве вы установили последнюю версию MongoDB Server (Community Edition) на сервер Debian. Вы также узнали, как включить аутентификацию и авторизацию на сервере MongoDB и как оптимизировать сервер Linux для развертывания MongoDB.

Попутно вы изучили основы использования команды Mongosh для подключения и управления сервером MongoDB. И изучил основные запросы MongoDB для создания пользователей, создания баз данных, вставки и извлечения данных, обновления данных и удаления/удаления данных с сервера MongoDB.

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

Статьи по данной тематике: