Содержание

Установка MongoDB на виртуальный хостинг

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


Скачивание бинарных файлов 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»:

Скачаем последнюю версию 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):

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, рекомендуем сделать это по нашей инструкции.

Установим 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

Добавим в планировщик CRON следующую задачу (точка в начале обязательна):

. $HOME/.profile; pm2 resurrect

Назначим период «При перезагрузке» и сохраним задачу.


Все готово! Теперь при перезапуске сервера, Cron будет запускать менеджер процессов pm2, который в свою очередь запустит MongoDB сервер и другие приложения, которые вы можете добавить для контроля в PM2.