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