====== Установка 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]]