Как создать экземпляр MongoDB на VPS

Развертывание MongoDB на виртуальном частном сервере (VPS) дает вам полный контроль над инфраструктурой базы данных – идеальное решение для разработчиков, стартапов и организаций, для которых важны производительность, гибкость и суверенитет данных. В этом руководстве вы узнаете, как установить, настроить, защитить и оптимизировать MongoDB на VPS.

🛠️ Шаг 1: Обновите систему

sudo apt update && sudo apt upgrade -y

Установите имя хоста и часовой пояс:

hostnamectl set-hostname mongodb-server
timedatectl set-timezone UTC

📦 Шаг 2: Установите MongoDB

1. Импортируйте GPG-ключ MongoDB

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-6.0.gpg

2. Добавьте репозиторий MongoDB

echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

Примечание: Замените focal на jammy или вашу версию, если используете Ubuntu 22.04.

3. Установите MongoDB

sudo apt update
sudo apt install -y mongodb-org

🧪 Шаг 3: Запустите и включите MongoDB

sudo systemctl start mongod
sudo systemctl enable mongod

Проверьте статус:

sudo systemctl status mongod

🔐 Шаг 4: Защитите свой сервер MongoDB

По умолчанию MongoDB привязывается к 127.0.0.1. Если вам нужен удаленный доступ:

1. Отредактируйте конфиг

sudo nano /etc/mongod.conf

Найдите строку bindIp под net: и измените ее:

bindIp: 127. 0.0.1,0.0.0.0

2. Включите аутентификацию

В разделе безопасность: добавьте:

безопасность:
авторизация: включена

Перезапустите MongoDB:

sudo systemctl restart mongod

👤 Шаг 5: Создание пользователя Admin

Войдите в оболочку MongoDB:

mongosh

Создайте пользователя-администратора:

use admin
db.createUser({
пользователь: "admin",
pwd: "StrongPassword123!",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})

Выйдите с помощью exit, затем проверьте вход в систему:

mongosh -u admin -p --authenticationDatabase admin

🛡️ Шаг 6: Защита VPS и MongoDB

1. Брандмауэр UFW

sudo ufw allow OpenSSH
sudo ufw allow 27017/tcp
sudo ufw enable

Для удаленного доступа с одного IP:

sudo ufw allow from YOUR.IP.ADDRESS to any port 27017

2. Fail2Ban (защита SSH)

sudo apt install fail2ban -y
sudo systemctl enable fail2ban

⚙️ Шаг 7: Расширенная оптимизация (необязательно)

1. Набор реплик для высокой доступности

Измените /etc/mongod.conf:

replication:
replSetName: "rs0"

Инициализация:

mongosh
rs.initiate()

2. Стратегия резервного копирования

Для резервного копирования используйте mongodump:

mongodump --out /var/backups/mongodb/$(date %F)

Автоматизируйте с помощью cron:

crontab -e
# Ежедневно в 2 часа ночи
0 2 * * * /usr/bin/mongodump --out /var/backups/mongodb/$(date \%F)

3. Использование TLS/SSL для зашифрованных соединений

Сгенерируйте сертификаты и настройте секцию net.ssl в mongod.conf. Это требует дополнительных настроек и доверенного центра сертификации (CA).

🧪 Шаг 8: Проверка развертывания

Вы можете протестировать удаленное подключение:

mongosh "mongodb://admin:StrongPassword123!@your-server-ip:27017/admin"

Замените your-server-ip на IP-адрес вашего VPS или доменное имя.

📊 Шаг 9: Мониторинг MongoDB

Рассмотрите такие инструменты, как:

  • Агент мониторинга MongoDB Atlas (опционально)

  • Prometheus Grafana с экспортерами

  • Пользовательские оповещения с помощью cron и logwatch

Вы также можете просматривать журналы напрямую:

sudo tail -f /var/log/mongodb/mongod.log

✅ Заключительный контрольный список

  • MongoDB установлена и работает

  • Удаленный доступ защищен

  • Обеспечена аутентификация администратора

  • Брандмауэр настроен

  • Созданы резервные копии

  • Включен дополнительный мониторинг

🧩 Заключение

Запуск MongoDB на VPS дает вам непревзойденную гибкость, но требует пристального внимания к безопасности, резервному копированию и производительности. Следуя этому руководству, вы создали безопасный и готовый к производству экземпляр MongoDB, готовый к масштабированию по мере роста вашего приложения.