Как установить MongoDB на Ubuntu (4 шага)

by itisgood

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

Мы не можем использовать SQL (Structured Query Language) для создания, извлечения, обновления и удаления данных (CRUD), и он не хранит данные в таблицах, таких как MySQL или Oracle.

Данные хранятся в структуре «документа» в формате JSON (в MongoDB под названием BSON), который является документом.

В этой статье мы расскажем, как установить MongoDB, управлять его сервисом и установить базовую аутентификацию на Ubuntu 18.04.

Важно отметить, что компания MongoDB Inc предлагает только пакеты для 64-битной LTS (долгосрочная поддержка), выпуски Ubuntu, такие как 14.04 LTS (trusty), 16.04 LTS (xenial), 18.04 LTS (bionic) и т. д.

Шаг 1) Установка MongoDB на Ubuntu 18.04

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

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

$ sudo apt-get update

мы установим пакет MongoDB, который включает в себя несколько других пакетов, таких как mongo-tools, mongodb-clients, mongodb-server и mongodb-server-core.

$ sudo apt-get install -y mongodb

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

Служба MongoDB запустится автоматически через systemd, и процесс прослушивает порт 27017.

Вы можете проверить его состояние, используя команду systemctl, как показано ниже.

$ sudo systemctl status mongodb
output
● mongodb.service - An object/document-oriented database
   Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-08-06 13:16:20 UTC; 6min ago
     Docs: man:mongod(1)
 Main PID: 14415 (mongod)
    Tasks: 23 (limit: 1112)
   CGroup: /system.slice/mongodb.service
           └─14415 /usr/bin/mongod --unixSocketPrefix=/run/mongodb --config /etc/mongodb.conf

Aug 06 13:16:20 li34-72 systemd[1]: Started An object/document-oriented database.

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

$ mongo --eval 'db.runCommand({ connectionStatus: 1 })'
output
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 в ответе указывает, что сервер работает правильно.

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

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

Чтобы остановить работу службы MongoDB, выполните следующую команду.

$ sudo systemctl stop mongodb

Чтобы запустить службу MongoDB, введите следующую команду.

$ sudo systemctl start mongodb

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

$ sudo systemctl restart mongodb

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

$ sudo systemctl disable mongodb

Чтобы снова включить службу MongoDB, введите следующую команду.

$ sudo systemctl enable mongodb

Шаг 4) Настройка брандмауэра для удаленного доступа к MongoDB

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

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

$ sudo ufw allow 27017

Но лучше предоставить доступ к определенному местоположению IP-адреса в порт MongoDB по умолчанию, используя приведенную ниже команду.

$ sudo ufw allow from our_server_IP/32 to any port 27017

По умолчанию UFW отключен, поэтому вы должны увидеть что-то вроде этого:

Output:
Status: inactive

Чтобы включить ufw:

$ sudo ufw enable

см. так же  Как настроить брандмауэр UFW на Ubuntu 18.04

Чтобы проверить изменение настроек брандмауэра:

$ sudo ufw status
Output:
Status: active

To                         Action      From
--                         ------      ----
27017                      ALLOW       72.14.177.72

По умолчанию порт 27017 прослушивает только локальный адрес 127.0.0.1.

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

$ sudo nano /etc/mongodb.conf
  bind_ip = 127.0.0.1,our_server_ip
  #port = 27017

Наконец, мы перезапускаем MongoDB.

$ sudo systemctl restart mongodb

Шаг 4) Создайте root пользователя и пароль  для MongoDB

Чтобы запустить оболочку mongo, выполните следующую команду.

$ sudo mongo

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

> show dbs
output:
admin   0.000GB
config  0.000GB
local   0.000GB

Нам нужно создать администратора для пользователя root в MySQL / MariaDB в базе данных admin.

Этот пользователь может управлять пользователями и ролями, такими как создание пользователей, предоставление или отмена ролей у пользователей, а также создание или изменение кастомных ролей.

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

  > use admin
  > db.createUser({user:"root", pwd:"pass123", roles:[{role:"root", db:"admin"}]})
  output:
  Successfully added user: {
          "user" : "root",
          "roles" : [
                  {
                          "role" : "root",
                          "db" : "admin"
                  }
          ]
  }

Теперь выйдите из оболочки mongo, набрав Ctrl + c, чтобы включить проверку подлинности.

Нам нужно включить аутентификацию пользователей, отредактировав файл /lib/systemd/system/mongod.service.

Сначала откройте файл для редактирования.

$ sudo nano /lib/systemd/system/mongodb.service

В разделе конфигурации [Service] найдите параметр ExecStart.

ExecStart=/usr/bin/mongod --unixSocketPrefix=${SOCKETPATH} --config ${CONF} $DAEMON_OPTS

И измените его на следующее:

ExecStart=/usr/bin/mongod --auth --unixSocketPrefix=${SOCKETPATH} --config ${CONF} $DAEMON_OPTS
  /lib/systemd/system/mongodb.service
  ............
  [Service]
  User=mongodb
  Group=mongodb
  RuntimeDirectory=mongodb
  RuntimeDirectoryMode=0755
  EnvironmentFile=-/etc/default/mongodb
  Environment=CONF=/etc/mongodb.conf
  Environment=SOCKETPATH=/run/mongodb
  ExecStart=/usr/bin/mongod --auth --unixSocketPrefix=${SOCKETPATH} --config ${CONF} $DAEMON_OPTS
  LimitFSIZE=infinity
  LimitCPU=infinity
  LimitAS=infinity
  LimitNOFILE=64000
  LimitNPROC=64000
  .............

Сохраните файл и выйдите из него, набрав Ctrl + x.

После внесения изменений в конфигурационный файл запустите systemctl daemon-reload, чтобы перезагрузить юниты и перезапустить службу MongoDB и проверить ее состояние следующим образом.

sudo systemctl daemon-reload
  $ sudo systemctl restart mongodb
  $ sudo systemctl status mongodb
  output:
  ● mongodb.service - An object/document-oriented database
     Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2018-08-06 16:08:03 UTC; 20s ago
       Docs: man:mongod(1)
   Main PID: 15194 (mongod)
      Tasks: 23 (limit: 1112)
     CGroup: /system.slice/mongodb.service
             └─15194 /usr/bin/mongod --auth --unixSocketPrefix=/run/mongodb --config /etc/mongodb.con

  Aug 06 16:08:03 li34-72 systemd[1]: Stopped An object/document-oriented database.
  Aug 06 16:08:03 li34-72 systemd[1]: Started An object/document-oriented database.

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

$ sudo mongo -u "root" -p --authenticationDatabase "admin"

 

You may also like

3 комментария

Как настроить аутентификацию в MongoDB 3.x / 4.x — Information Security Squad 26.11.2018 - 12:13

[…] Как установить MongoDB на Ubuntu (4 шага) […]

Reply
Boojum 04.02.2019 - 14:46

“Мы не можем использовать SQL (Structured Query Language) для создания, извлечения, обновления и удаления данных (CRUD), и он не хранит данные в таблицах” (c)
Так почему же эта штука называется “базой данных”? Совершенно ясно, что при таком раскладе эта штука уж точно не является РЕЛЯЦИОННОЙ СУБД. А хранить данные в документах – это мы умеем с древних времен! Правда
1. Документы имеют свойство “внезапно” пропадать или портятся [под вопли “Я же ничего не делала!!!”]
2. После повторения п. 1 N раз (N зависит от степени тупорылости юзверьши и частенько стремится к бесконечности), юзверьша начинает плодить копии на всех доступных и недоступных носителях, а теперь еще и в многочисленных облаках, что ведет к жуткому рассогласованию данных (за предложение пользоваться VCS можно либо получить по морде, либо потерять работу).
Именно по этим и ряду других причин и были придуманы реляционные БД, автоматически поддерживающие согласованность и целостность данных, многопользовательских доступ, и не дающие любой Марье “я ничего делала” Иванне угробить плоды многолетней работы всей конторы. Ну и конечно SQL, который на самом деле не не очередной происк мирового империализма, а весьма годное средство структурированного извлечения данных. Внимание вопрос: зачем нужно какое-то MongoDB, хранящее данные в документах, если и без него могу хранить данные в документах (а для ограничения доступа и аутентификации использовать стандартные системные средства назначения прав на файлы )?

Reply
itisgood 04.02.2019 - 14:50

А если много файлов? легче работать с 50к записями в БД, нежели с 50к файлами на том же Phpmyadmin

Reply

Leave a Comment