В данной статье мы будем работать с хостингом через терминал.
Предполагается, что вы уже умеете подключаться к терминалу.
Найти ссылку на последнюю версию 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 сервером.
Найти последнюю версию клиента можно на странице: 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 завершена.
Попробуем запустить сервер в режиме фонового процесса, с указанием параметров:
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 сервер от возможного доступа других клиентов по номеру порта.
Обязательно измените пароль. Пароль указанный в примере не является сложным паролем.
$ 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 нам понадобится 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.