====== Установка MongoDB на виртуальный хостинг ======
В данной статье мы будем работать с хостингом через терминал.\\
Предполагается, что вы уже умеете [[ssh|подключаться к терминалу]].
----
==== Скачивание бинарных файлов MongoDB ====
Найти ссылку на последнюю версию MongoDB можно на официальном сайте:\\
https://www.mongodb.com/download-center/community/releases
Серверы виртуального хостинга работают на разных операционных системах.\\
Обычно это rhel7/rhel8-совместимые системы.\\
Чтобы понять какой из файлов нам нужен, узнаем версию нашей OS командой:
$ cat /etc/os-release
NAME="Rocky Linux"
VERSION="8.5 (Green Obsidian)"
ID="rocky"
ID_LIKE="rhel centos fedora"
VERSION_ID="8.5"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Rocky Linux 8.5 (Green Obsidian)"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:rocky:rocky:8:GA"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
ROCKY_SUPPORT_PRODUCT="Rocky Linux"
ROCKY_SUPPORT_PRODUCT_VERSION="8"
Сервер на который производится установка работает на RockyLinux 8.5 -- это бинарно-совместимая OS с RedHat 8.\\
Соответственно, нам необходим файл для **RedHat / CentOS 8.0 x64**, в формате "Archive":
[[https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-6.0.1.tgz|{{:mongodb-archive.png?nolink|}}]]
Скачаем последнюю версию MongoDB на момент публикации этой статьи, создадим директории и распакуем ПО:\\
mkdir -p ~/.local
cd ~/.local
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-6.0.1.tgz
tar -xvf mongodb-linux-x86_64-rhel80-6.0.1.tgz
rm mongodb-linux-x86_64-rhel80-6.0.1.tgz -f
export PATH="$HOME/.local/mongodb-linux-x86_64-rhel80-6.0.1/bin/:$PATH"
echo "export PATH=$PATH" > ~/.profile
mkdir -p ~/mongodb/data
mkdir -p ~/mongodb/tmp
mkdir -p ~/mongodb/logs
touch ~/mongodb/logs/syslog
Установка MongoDB завершена.\\
----
==== Скачивание бинарных файлов MongoDB Shell ====
MongoDB Shell -- это клиент для работы с MongoDB сервером.
Найти последнюю версию клиента можно на странице: https://www.mongodb.com/try/download/shell\\
Нас интересует Linux Tarball (x64):\\
[[https://downloads.mongodb.com/compass/mongosh-1.5.4-linux-x64.tgz|{{::mongodb-ssh.png?nolink|}}]]
cd ~/.local
wget https://downloads.mongodb.com/compass/mongosh-1.5.4-linux-x64.tgz
tar -xvf mongosh-1.5.4-linux-x64.tgz
rm -f mongosh-1.5.4-linux-x64.tgz
export PATH="$HOME/.local/mongosh-1.5.4-linux-x64/bin/:$PATH"
echo "export PATH=$PATH" > ~/.profile
Проверяем работу:
$ mongosh --version
1.5.4
Установка MongoDB Shell завершена.
----
==== Запуск сервера MongoDB ====
Попробуем запустить сервер в режиме фонового процесса, с указанием параметров:\\
mongod --dbpath=$HOME/mongodb/data \
--port=27100 \
--unixSocketPrefix=$HOME/mongodb/tmp \
--logpath=$HOME/mongodb/logs/syslog \
--fork
Если вы увидели подобное сообщение, значит запуск прошел успешно:
about to fork child process, waiting until server is ready for connections.
forked process: 194899
child process started successfully, parent exiting
В случае, если вы получили сообщение:
about to fork child process, waiting until server is ready for connections.
forked process: 196552
ERROR: child process failed, exited with 48
To see additional information in this output, start without the "--fork" option.
Значит порт уже занят другим клиентом.\\
Измените параметр назначения порта --port=27100
на другой, желательно в диапазоне 27000-30000.
Проверяем, что процесс сервера активен:
$ ps aux | grep mongod | grep -v "grep"
test 194899 0.4 0.3 2662040 102164 ? Sl 03:31 0:01 mongod --dbpath=/home/www/test/data/mongodb/data --port=27100 --unixSocketPrefix=/home/www/test/data/mongodb/tmp --logpath=/home/www/test/data/mongodb/logs/syslog --fork
$ ls -la ~/mongodb/tmp/*.sock
srwx------ 1 test test 0 сен 9 03:33 /home/www/test/data/mongodb/tmp/mongodb-27100.sock
Сервер успешно открыл порт 27100 на локальном интерфейсе 127.0.0.1 и создал сокет: **$HOME/mongodb/tmp/mongodb-27100.sock**
----
==== Защита сервера MongoDB ====
На сервере виртуального хостинга мы обязаны защитить наш MongoDB сервер от возможного доступа других клиентов по номеру порта.\\
Обязательно измените пароль. Пароль указанный в примере не является сложным паролем.
$ mongosh --port 27100
test> use admin
switched to db admin
admin> db.createUser( { user: "admin", pwd: "123456789", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
{ ok: 1 }
admin> .exit
Остановим mongodb-сервер, завершив его по PID сигналом **SIGTERM** и проверим что сервер прекратил работу и не отображается в списке процессов:
kill -s SIGTERM $(ps aux | grep "mongod" | grep -v "grep" | awk '{print $2}')
ps aux | grep "mongod" | grep -v "grep"
Последняя команда должна вывести пустой результат.\\
Если это не так -- сервер активен. Попробуйте применить первую команду повторно или изменить сигнал на "SIGKILL".
Перезапустим сервер с новым параметром: --auth
>>
mongod --dbpath=$HOME/mongodb/data \
--port=27100 \
--unixSocketPrefix=$HOME/mongodb/tmp \
--logpath=$HOME/mongodb/logs/syslog \
--fork \
--auth
MongoDB сервер установлен, запущен и готов к дальнейшей эксплуатации.\\
Но как быть, если хостовый сервер будет перезагружен?\\
Необходимо обязательно добавить автоматический запуск MongoDB сервера.
Завершим MongoDB сервер, прежде чем переходить к следующему шагу:
kill -s SIGTERM $(ps aux | grep "mongod" | grep -v "grep" | awk '{print $2}')
----
==== Настраиваем авто-запуск с помощью pm2 ====
Для того, чтобы установить pm2 нам понадобится NPM из пакета nodeJS.\\
Если вы еще не устанавливали nodeJS, рекомендуем сделать это [[nodejs|по нашей инструкции]].
Установим pm2:
npm install pm2 -g
Запустим MongoDB сервер через pm2 **БЕЗ ОПЦИИ ''--fork''** и сохраним результат:
$ pm2 start "\
mongod --dbpath=$HOME/mongodb/data \
--port=27100 \
--unixSocketPrefix=$HOME/mongodb/tmp \
--logpath=$HOME/mongodb/logs/syslog \
--auth" --name MongoDB
[PM2] Starting /usr/bin/bash in fork_mode (1 instance)
[PM2] Done.
$ pm2 save
Добавим в планировщик [[как_пользоваться_crontab|CRON]] следующую задачу (**точка в начале обязательна**):
. $HOME/.profile; pm2 resurrect
Назначим период "При перезагрузке" и сохраним задачу.
{{::cron-afterreboot.png?nolink|}}
----
Все готово! Теперь при перезапуске сервера, Cron будет запускать менеджер процессов pm2, который в свою очередь запустит MongoDB сервер и другие приложения, которые вы можете добавить для контроля в PM2.
> [[start|Вернуться к главной странице Wiki]]