bolt Valebyte VPS від $4/міс — NVMe, запуск за 60 секунд.

Отримати VPS arrow_forward
eco Початковий Туторіал

Встановлення MongoDB на

calendar_month Jul 24, 2026 schedule 22 хв. читання visibility 12 переглядів
info

Потрібен сервер для цього гайду? Ми пропонуємо виділені сервери та VPS у 50+ країнах з миттєвим налаштуванням.

Потрібен сервер для цього гайду?

Розгорніть VPS або виділений сервер за хвилини.

Встановлення MongoDB на VPS: базове налаштування та безпека

TL;DR

У цьому докладному посібнику ми крок за кроком налаштуємо захищений сервер MongoDB на віртуальному приватному сервері (VPS) під керуванням Ubuntu Server 24.04 LTS. Ви навчитеся встановлювати актуальну версію MongoDB (7.0), конфігурувати її для безпечної роботи з автентифікацією та TLS, налаштовувати брандмауер та створювати ефективну стратегію резервного копіювання, забезпечуючи надійну та продуктивну базу даних для ваших застосунків.

  • Встановлення MongoDB 7.0 на Ubuntu 24.04 LTS з офіційного репозиторію.
  • Базовий захист сервера: SSH-ключі, користувач sudo, UFW, Fail2Ban.
  • Конфігурація MongoDB з увімкненою автентифікацією та створенням користувачів.
  • Налаштування брандмауера для обмеження доступу до порту MongoDB.
  • Використання TLS/SSL для шифрування з'єднань з базою даних.
  • Розробка стратегії резервного копіювання з використанням mongodump та restic.
  • Вирішення поширених проблем та відповіді на часті запитання.

Що ми налаштовуємо і навіщо

У цьому посібнику ми зосередимося на встановленні та налаштуванні MongoDB на власному віртуальному приватному сервері (VPS). MongoDB — це популярна документоорієнтована база даних NoSQL, яка ідеально підходить для сучасних веб-застосунків, що вимагають гнучкої схеми, високої продуктивності та масштабованості. На відміну від традиційних реляційних баз даних, MongoDB зберігає дані у форматі BSON (двійковий JSON), що робить її дуже зручною для роботи з неструктурованими або напівструктурованими даними.

У підсумку, після завершення цього туторіалу, ви отримаєте повністю налаштований та захищений екземпляр MongoDB, який буде готовий до прийому підключень від ваших застосунків. Ви зможете керувати базою даних, створювати користувачів з різними правами доступу та бути впевненими у безпеці збережених даних.

Чому варто обрати self-hosted MongoDB на VPS замість хмарних рішень? Самостійне розміщення надає повний контроль над конфігурацією сервера, оптимізацією продуктивності та витратами. Для багатьох проєктів, особливо на початкових етапах або за наявності специфічних вимог до безпеки та місцезнаходження даних, власний VPS може бути значно економічнішим, ніж керовані хмарні сервіси, такі як MongoDB Atlas, AWS DocumentDB або Azure Cosmos DB. Це також чудовий спосіб глибоко зрозуміти роботу бази даних та інфраструктури.

Який VPS-конфіг потрібен для цього завдання

Вибір відповідного VPS-конфігу критично важливий для продуктивності та стабільності вашої бази даних MongoDB. Вимоги можуть сильно відрізнятися залежно від обсягу даних, інтенсивності запитів та кількості одночасних підключень. Ми орієнтуємося на типові завдання, такі як розгортання GitLab, Mattermost, Minecraft-сервера або ноди криптовалюти, де MongoDB може використовуватися як частина стека.

Мінімальні вимоги для невеликого навантаження (розробка, тестові середовища, особисті проєкти):

  • CPU: 2 ядра. Для MongoDB важлива не тільки кількість ядер, а й їх продуктивність.
  • RAM: 4 ГБ. MongoDB активно використовує оперативну пам'ять для кешування даних (WiredTiger Cache), що значно підвищує швидкість роботи. Менше 4 ГБ може призвести до інтенсивного використання диска та зниження продуктивності.
  • Диск: 50 ГБ NVMe SSD. Швидкість дискової підсистеми — один з найважливіших факторів для MongoDB. NVMe SSD забезпечують значно вищі показники IOPS (операцій введення-виведення за секунду) порівняно зі звичайними SSD або HDD.
  • Мережа: 1 Гбіт/с. Для більшості завдань цього достатньо.

Рекомендований VPS-план для помірного навантаження (невеликі продакшн-застосунки, середні проєкти):

Для більш серйозних завдань, де передбачається активна робота з даними та кілька одночасних користувачів, рекомендується наступний конфіг:

  • CPU: 4 ядра.
  • RAM: 8-16 ГБ. Чим більше даних кешується в RAM, тим швидші запити.
  • Диск: 160-320 ГБ NVMe SSD. Обсяг диска має бути достатнім для поточних даних та їх зростання протягом кількох років, а також для резервних копій.
  • Мережа: 1 Гбіт/с.

Відповідний VPS із зазначеними характеристиками можна орендувати у перевіреного провайдера, який пропонує NVMe SSD та гарантовану продуктивність.

Коли потрібен dedicated сервер, а не VPS

Dedicated сервер слід розглядати, якщо:

  • Дуже великі обсяги даних: Сотні гігабайт або терабайти даних, що вимагають максимальної продуктивності дискової підсистеми.
  • Високі вимоги до IOPS: Інтенсивні операції читання/запису, які можуть бути обмежені на VPS через спільне використання ресурсів.
  • Максимальна ізоляція та безпека: Повний контроль над апаратним забезпеченням, відсутність "сусідів" на тому ж фізичному сервері.
  • Спеціалізоване обладнання: Необхідність у специфічних RAID-контролерах, високопродуктивних мережевих картах або GPU для певних завдань.

Для більшості середніх проєктів VPS з хорошими NVMe SSD буде цілком достатньо. Якщо ви плануєте розгорнути великий GitLab, високонавантажений SaaS або вимогливу криптовалютну ноду, то відповідний dedicated сервер може бути більш виправданим вибором.

Локація: на що впливає

Вибір локації VPS впливає на:

  • Затримку (latency): Чим ближче сервер до ваших користувачів або до сервера застосунку, який підключатиметься до MongoDB, тим нижчою буде затримка.
  • Відповідність законодавству: У деяких випадках вимагається зберігати дані в певній юрисдикції (наприклад, GDPR у Європі).
  • Вартість: Ціни на VPS можуть варіюватися залежно від дата-центру та регіону.

Завжди вибирайте локацію, яка максимально скорочує відстань між базою даних та основним застосунком.

Підготовка сервера

Перед встановленням MongoDB необхідно провести мінімальне налаштування свіжого VPS. Це забезпечить базову безпеку та зручність керування. Ми будемо використовувати Ubuntu Server 24.04 LTS як найпоширенішу та підтримувану операційну систему.

1. Підключення по SSH та оновлення системи

Підключіться до вашого VPS як користувач root (або користувач, наданий провайдером) через SSH. Потім оновіть усі пакети до останніх версій.


ssh root@ВАШ_IP_АДРЕС_VPS
sudo apt update && sudo apt upgrade -y
    

Ця команда оновлює список доступних пакетів та встановлює всі оновлення системи.

2. Створення нового користувача з правами sudo

Робота під користувачем root небезпечна. Створіть нового користувача та надайте йому права sudo.


adduser ваш_пользователь
    

Дотримуйтесь інструкцій, щоб встановити пароль та заповнити інформацію про користувача. Потім додайте користувача до групи sudo:


usermod -aG sudo ваш_пользователь
    

Тепер ви можете вийти з сесії root та підключитися під новим користувачем:


exit
ssh ваш_пользователь@ВАШ_IP_АДРЕС_VPS
    

Усі наступні команди, що вимагають прав адміністратора, виконуйте з префіксом sudo.

3. Налаштування SSH-ключів (рекомендується)

Для підвищення безпеки рекомендується використовувати SSH-ключі замість паролів. Якщо у вас ще немає пари ключів, створіть їх на своїй локальній машині:


ssh-keygen -t rsa -b 4096
    

Потім скопіюйте публічний ключ на ваш VPS:


ssh-copy-id ваш_пользователь@ВАШ_IP_АДРЕС_VPS
    

Після успішного копіювання ключа, відредагуйте файл конфігурації SSH на сервері, щоб вимкнути автентифікацію за паролем та заборонити вхід для root.


sudo nano /etc/ssh/sshd_config
    

Знайдіть та змініть (або додайте) наступні рядки:


# Запретить вход для root
PermitRootLogin no

# Отключить аутентификацию по паролю (после проверки входа по ключу)
PasswordAuthentication no

# Убедитесь, что аутентификация по ключам разрешена
PubkeyAuthentication yes
    

Збережіть зміни (Ctrl+O, Enter) та вийдіть (Ctrl+X). Перезапустіть службу SSH:


sudo systemctl restart sshd
    

ВАЖЛИВО: Перш ніж закрити поточну SSH-сесію, відкрийте нове вікно терміналу та спробуйте підключитися до сервера, використовуючи нового користувача та SSH-ключ. Переконайтеся, що ви можете увійти. Якщо ні, виправте помилки, перш ніж закривати поточну сесію, інакше ви можете втратити доступ до сервера.

4. Налаштування брандмауера (UFW)

UFW (Uncomplicated Firewall) — це зручний інструмент для керування брандмауером. За замовчуванням він блокує всі вхідні з'єднання. Спочатку дозвольте SSH, потім увімкніть UFW.


sudo ufw allow OpenSSH         # Разрешить SSH-соединения
sudo ufw enable                # Включить UFW. Подтвердите 'y'
sudo ufw status                # Проверить статус UFW
    

Поки порт MongoDB (27017) закритий. Ми відкриємо його пізніше, після встановлення та базового налаштування.

5. Встановлення Fail2Ban

Fail2Ban сканує логи сервера на предмет підозрілої активності (наприклад, численних невдалих спроб входу по SSH) та тимчасово блокує IP-адреси зловмисників.


sudo apt install -y fail2ban   # Установить Fail2Ban
sudo systemctl enable fail2ban # Включить автозапуск при загрузке
sudo systemctl start fail2ban  # Запустить службу
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Создать локальную копию для настроек
    

Відкрийте /etc/fail2ban/jail.local та переконайтеся, що секція [sshd] активна (enabled = true). Ви також можете налаштувати bantime (час блокування) та findtime (період для виявлення спроб).


sudo nano /etc/fail2ban/jail.local
    

Знайдіть секцію [DEFAULT] і, за бажанням, змініть:


bantime = 1d                 # Блокировать на 1 день
findtime = 10m               # Если за 10 минут...
maxretry = 5                 # ...было 5 неудачных попыток
    

Перезапустіть Fail2Ban для застосування змін:


sudo systemctl restart fail2ban
    

Тепер ваш сервер має базовий захист, і ми готові до встановлення MongoDB.

Встановлення ПЗ — покроково

Ми будемо встановлювати MongoDB версії 7.0, яка є актуальною та стабільною на 2026 рік, на Ubuntu Server 24.04 LTS. Встановлення буде здійснюватися з офіційного репозиторію MongoDB, що гарантує отримання актуальних оновлень та патчів безпеки.

1. Імпорт публічного GPG-ключа MongoDB

Для перевірки цілісності пакетів MongoDB необхідно імпортувати публічний GPG-ключ.


sudo apt install -y gnupg curl # Встановлення утиліт gnupg та curl, якщо вони ще не встановлені
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
   sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg # Імпорт ключа та збереження в keyring
    

Ця команда завантажує ключ і зберігає його в директорії /usr/share/keyrings/, роблячи його доступним для APT.

2. Додавання репозиторію MongoDB до списку джерел APT

Тепер необхідно додати URL офіційного репозиторію MongoDB до списку джерел пакетів вашої системи. Це дозволить APT знаходити та встановлювати пакети MongoDB.


echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
    

Ця команда додає новий рядок до файлу /etc/apt/sources.list.d/mongodb-org-7.0.list, вказуючи APT, де шукати пакети MongoDB 7.0 для вашої архітектури (amd64 або arm64) та версії Ubuntu ($(lsb_release -cs) автоматично визначить кодове ім'я вашої версії Ubuntu, наприклад, noble для 24.04 LTS).

3. Оновлення індексу пакетів APT

Після додавання нового репозиторію необхідно оновити індекс пакетів, щоб APT дізнався про доступні пакети MongoDB.


sudo apt update # Оновити список доступних пакетів
    

Ви повинні побачити інформацію про пакети з репозиторію MongoDB у виводі цієї команди.

4. Встановлення пакетів MongoDB

Тепер, коли репозиторій налаштовано, можна встановити MongoDB та пов'язані утиліти. Пакет mongodb-org включає в себе сервер MongoDB (mongod), клієнт командного рядка (mongosh), а також утиліти для роботи з базою даних (mongodump, mongorestore, mongoimport, mongoexport).


sudo apt install -y mongodb-org # Встановити всі компоненти MongoDB
    

Ця команда встановить MongoDB 7.0 та всі необхідні залежності.

5. Запуск та увімкнення служби MongoDB

Після встановлення необхідно запустити службу mongod та налаштувати її на автоматичний запуск при кожному завантаженні сервера.


sudo systemctl start mongod    # Запустити службу MongoDB
sudo systemctl enable mongod   # Увімкнути автозапуск MongoDB при старті системи
    

Тепер MongoDB повинна бути запущена та готова до роботи.

6. Перевірка статусу служби MongoDB

Переконайтеся, що служба MongoDB працює коректно.


sudo systemctl status mongod   # Перевірити статус служби MongoDB
    

Ви повинні побачити вивід, що вказує на те, що служба mongod активна (active (running)).

7. Перевірка з'єднання з MongoDB через mongosh

Підключіться до локальної бази даних MongoDB за допомогою клієнта командного рядка mongosh.


mongosh # Підключитися до локального екземпляра MongoDB
    

Якщо ви бачите запрошення test> або >, значить, MongoDB успішно встановлена та працює. Введіть exit, щоб вийти з клієнта.

Конфігурація

Після встановлення MongoDB за замовчуванням працює без автентифікації та приймає з'єднання лише з localhost (127.0.0.1). Для продакшн-середовища це неприйнятно. Ми налаштуємо автентифікацію, обмежимо мережевий доступ та, опціонально, увімкнемо TLS/SSL для шифрування з'єднань.

1. Налаштування файлу конфігурації MongoDB (mongod.conf)

Основний файл конфігурації MongoDB знаходиться за адресою /etc/mongod.conf. Відкрийте його для редагування:


sudo nano /etc/mongod.conf
    
Увімкнення автентифікації

Це найважливіший крок для безпеки. Знайдіть секцію security та додайте або розкоментуйте рядок authorization: enabled:


# /etc/mongod.conf
...
security:
  authorization: enabled
...
    
Налаштування мережевого доступу (bindIp)

За замовчуванням bindIp встановлено в 127.0.0.1, що означає, що MongoDB приймає з'єднання лише з локальної машини. Якщо ваша програма знаходиться на тому ж VPS, це безпечно. Якщо ж програма знаходиться на іншому сервері або ви хочете отримати доступ до MongoDB віддалено, вам потрібно змінити bindIp. НІКОЛИ не встановлюйте bindIp: 0.0.0.0 без адекватного налаштування брандмауера та автентифікації!

Якщо ви плануєте доступ з певної IP-адреси, вкажіть її:


# /etc/mongod.conf
...
net:
  port: 27017
  bindIp: 127.0.0.1,ВАШ_IP_ПРИЛОЖЕНИЯ # Додайте IP вашої програми або іншого сервера
...
    

Якщо ви впевнені, що ваш брандмауер UFW налаштований дуже строго, можна тимчасово вказати 0.0.0.0, але це має бути лише після налаштування UFW, як описано нижче.

Збереження та перезапуск MongoDB

Збережіть зміни (Ctrl+O, Enter) та вийдіть (Ctrl+X). Потім перезапустіть службу MongoDB:


sudo systemctl restart mongod
    

Тепер MongoDB вимагає автентифікації для всіх підключень.

2. Створення адміністративного користувача

Після увімкнення автентифікації ви не зможете підключитися до MongoDB без облікових даних. Тому необхідно створити адміністративного користувача. Для цього підключіться до mongosh, але вже з автентифікацією. Оскільки автентифікація щойно була увімкнена, ви можете підключитися як localhost без облікових даних один раз, щоб створити першого користувача.


mongosh --port 27017 --authenticationDatabase admin # Підключаємося до бази admin
    

Всередині mongosh виконайте наступні команди:


use admin
db.createUser(
   {
     user: "mongoAdmin",
     pwd: passwordPrompt(), // Введіть пароль при запиті
     roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
   }
)
exit
    

Тепер ви можете підключитися до MongoDB з використанням створеного користувача:


mongosh --port 27017 --authenticationDatabase admin -u mongoAdmin -p # Вас попросять ввести пароль
    

Після успішного входу ви побачите запрошення admin> або >.

3. Створення користувача для програми

Для кожної програми, що використовує MongoDB, рекомендується створювати окремого користувача з мінімально необхідними правами.


use your_app_db # Переключитися на базу даних вашої програми (створить її, якщо не існує)
db.createUser(
   {
     user: "appUser",
     pwd: passwordPrompt(), // Введіть пароль при запиті
     roles: [ { role: "readWrite", db: "your_app_db" } ] // Надати права лише на читання/запис у конкретній БД
   }
)
exit
    

Це гарантує, що навіть якщо облікові дані програми будуть скомпрометовані, зловмисник не отримає повний доступ до всіх баз даних.

4. Налаштування брандмауера (UFW) для MongoDB

Тепер, коли MongoDB захищена автентифікацією, можна відкрити порт 27017, але тільки для дозволених IP-адрес.


sudo ufw allow from ВАШ_IP_ПРИЛОЖЕНИЯ to any port 27017 # Дозволити доступ лише з IP-адреси вашої програми
sudo ufw status # Перевірити статус UFW
    

Якщо ви хочете дозволити доступ з кількох IP-адрес, повторіть команду ufw allow для кожної з них. Якщо ваша програма знаходиться на тому ж сервері, вам не потрібно відкривати порт 27017 назовні, достатньо bindIp: 127.0.0.1.

5. Налаштування TLS/SSL для шифрування з'єднань (опціонально, але рекомендується)

Для забезпечення конфіденційності та цілісності даних при передачі між клієнтом і сервером MongoDB рекомендується використовувати TLS/SSL. Це особливо важливо, якщо MongoDB доступна ззовні локальної мережі.

Для налаштування TLS вам знадобляться сертифікати. Ви можете використовувати самопідписані сертифікати для тестування або внутрішні корпоративні сертифікати. Для публічних серверів рекомендується використовувати сертифікати від довіреного центру сертифікації (CA), наприклад, Let's Encrypt.

Створення самопідписаного сертифіката (для прикладу)

Для генерації самопідписаного сертифіката та ключа в одному файлі .pem:


sudo mkdir -p /etc/ssl/mongodb
sudo openssl req -newkey rsa:2048 -new -nodes -x509 -days 365 -keyout /etc/ssl/mongodb/mongodb.key -out /etc/ssl/mongodb/mongodb.crt
sudo cat /etc/ssl/mongodb/mongodb.key /etc/ssl/mongodb/mongodb.crt | sudo tee /etc/ssl/mongodb/mongodb.pem
sudo chown -R mongodb:mongodb /etc/ssl/mongodb/
sudo chmod -R 600 /etc/ssl/mongodb/
    

При запиті інформації (Common Name, Organization тощо) введіть відповідні дані.

Конфігурація MongoDB для використання TLS

Відредагуйте /etc/mongod.conf знову:


sudo nano /etc/mongod.conf
    

Додайте або змініть секцію net.ssl:


# /etc/mongod.conf
...
net:
  port: 27017
  bindIp: 127.0.0.1,ВАШ_IP_ПРИЛОЖЕНИЯ
  ssl:
    mode: requireTLS # Всі з'єднання повинні використовувати TLS
    PEMKeyFile: /etc/ssl/mongodb/mongodb.pem
    CAFile: /etc/ssl/mongodb/mongodb.pem # Якщо використовуєте самопідписаний, CAFile може бути тим самим
    allowConnectionsWithoutCertificates: false # Вимагати клієнтські сертифікати (можна встановити в true, якщо не потрібні)
...
    

Збережіть зміни та перезапустіть MongoDB:


sudo systemctl restart mongod
    

Тепер для підключення до MongoDB вам потрібно буде вказати параметри TLS у клієнті mongosh або в драйвері вашої програми:


mongosh --host ВАШ_IP_АДРЕС_VPS --port 27017 --authenticationDatabase admin -u mongoAdmin -p --tls --tlsCAFile /etc/ssl/mongodb/mongodb.pem --tlsAllowInvalidHostnames # --tlsAllowInvalidHostnames тільки для самопідписаних
    

Для продакшн-сертифікатів від Let's Encrypt або інших CA, вам потрібно буде вказати шлях до вашого сертифіката та за необхідності до CA-ланцюжка.

6. Перевірка працездатності

Переконайтеся, що MongoDB працює, приймає з'єднання та автентифікація увімкнена:

  • Перевірка статусу служби:
    
    sudo systemctl status mongod
                

    Має бути active (running).

  • Перевірка відкритих портів:
    
    sudo netstat -tuln | grep 27017
                

    Вивід повинен показувати, що порт 27017 прослуховується на вказаних вами IP-адресах (наприклад, 127.0.0.1:27017 або 0.0.0.0:27017, якщо налаштовано).

  • Тест підключення з автентифікацією:
    
    mongosh --host ВАШ_IP_АДРЕС_VPS --port 27017 --authenticationDatabase admin -u mongoAdmin -p --tls --tlsCAFile /etc/ssl/mongodb/mongodb.pem # З TLS
                

    Без TLS, якщо ви його не налаштовували:

    
    mongosh --host ВАШ_IP_АДРЕС_VPS --port 27017 --authenticationDatabase admin -u mongoAdmin -p
                

    Успішний вхід підтверджує коректну роботу.

Резервні копії та обслуговування

Резервне копіювання — критично важливий аспект будь-якої системи, особливо бази даних. Втрата даних може призвести до катастрофічних наслідків. Ми розглянемо, що потрібно резервувати, як це робити за допомогою mongodump та restic, і куди зберігати резервні копії.

1. Що резервувати

  • Дані MongoDB: Це найголовніше. Самі бази даних, колекції, індекси.
  • Файл конфігурації MongoDB: /etc/mongod.conf. Містить важливі налаштування сервера.
  • SSL/TLS сертифікати та ключі: Якщо ви використовуєте TLS, переконайтеся, що файли .pem, .key, .crt також резервуються.
  • Скрипти резервного копіювання: Якщо ви створюєте свої скрипти, їх також потрібно зберігати.

2. Простий скрипт авторезервування (mongodump + restic)

Для створення резервних копій MongoDB ми будемо використовувати утиліту mongodump, яка створює бінарний дамп даних. Для безпечного та ефективного зберігання резервних копій ми будемо використовувати restic — сучасний інструмент для резервного копіювання, який підтримує дедуплікацію, шифрування та різні сховища.

Встановлення restic

sudo apt install -y restic # Встановлення restic
    
Створення скрипта резервного копіювання

Створіть файл /usr/local/bin/backup_mongodb.sh:


sudo nano /usr/local/bin/backup_mongodb.sh
    

Вставте наступний код, замінивши заповнювачі своїми значеннями:


#!/bin/bash

# Параметри MongoDB
MONGO_USER="mongoAdmin"
MONGO_PASS="ВАШ_ПАРОЛЬ_АДМІНА" # У продакшені краще використовувати .env або змінні оточення
MONGO_AUTH_DB="admin"
MONGO_HOST="127.0.0.1" # Або IP, з якого дозволено доступ
MONGO_PORT="27017"

# Параметри резервного копіювання
BACKUP_DIR="/var/backups/mongodb_tmp"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
LOG_FILE="/var/log/mongodb_backup.log"

# Параметри Restic
# ВАЖЛИВО: Замість прямого зазначення пароля, використовуйте змінну оточення RESTIC_PASSWORD
# або файл з паролем, захищений правами доступу.
# export RESTIC_PASSWORD="ВАШ_RESTIC_ПАРОЛЬ"
RESTIC_REPO="s3:s3.amazonaws.com/ВАШ_S3_БАКЕТ/mongodb_backups" # Приклад S3. Може бути minio, B2, SFTP тощо.
# export AWS_ACCESS_KEY_ID="ВАШ_AWS_KEY_ID"
# export AWS_SECRET_ACCESS_KEY="ВАШ_AWS_SECRET_KEY"

# Створення тимчасової директорії для дампу
mkdir -p $BACKUP_DIR/$TIMESTAMP || { echo "Не вдалося створити директорію $BACKUP_DIR/$TIMESTAMP" >> $LOG_FILE; exit 1; }

echo "[$TIMESTAMP] Розпочато резервне копіювання MongoDB..." >> $LOG_FILE

# Створення дампу MongoDB
mongodump --host $MONGO_HOST --port $MONGO_PORT --authenticationDatabase $MONGO_AUTH_DB \
          -u $MONGO_USER -p "$MONGO_PASS" --out $BACKUP_DIR/$TIMESTAMP >> $LOG_FILE 2>&1

if [ $? -ne 0 ]; then
    echo "[$TIMESTAMP] Помилка при створенні дампу MongoDB." >> $LOG_FILE
    rm -rf $BACKUP_DIR/$TIMESTAMP # Видалити невдалий дамп
    exit 1
fi

echo "[$TIMESTAMP] Дамп MongoDB успішно створено. Розмір: $(du -sh $BACKUP_DIR/$TIMESTAMP | awk '{print $1}')" >> $LOG_FILE

# Ініціалізація репозиторію restic, якщо він ще не існує
# restic init --repo $RESTIC_REPO # Виконати вручну один раз

# Створення резервної копії за допомогою restic
echo "[$TIMESTAMP] Завантаження резервної копії до репозиторію Restic..." >> $LOG_FILE
restic backup $BACKUP_DIR/$TIMESTAMP \
              --repo $RESTIC_REPO \
              --host $(hostname) \
              --tag "mongodb-daily" \
              --verbose >> $LOG_FILE 2>&1

if [ $? -ne 0 ]; then
    echo "[$TIMESTAMP] Помилка при завантаженні резервної копії Restic." >> $LOG_FILE
    exit 1
fi

echo "[$TIMESTAMP] Резервне копіювання Restic успішно завершено." >> $LOG_FILE

# Очищення старих знімків (політика зберігання)
echo "[$TIMESTAMP] Очищення старих резервних копій (keep-daily 7, keep-weekly 4, keep-monthly 6)..." >> $LOG_FILE
restic forget --repo $RESTIC_REPO \
              --prune \
              --tag "mongodb-daily" \
              --keep-daily 7 \
              --keep-weekly 4 \
              --keep-monthly 6 \
              --verbose >> $LOG_FILE 2>&1

if [ $? -ne 0 ]; then
    echo "[$TIMESTAMP] Помилка при очищенні старих резервних копій Restic." >> $LOG_FILE
    exit 1
fi

echo "[$TIMESTAMP] Очищення старих резервних копій завершено." >> $LOG_FILE

# Видалення тимчасових файлів дампу
rm -rf $BACKUP_DIR/$TIMESTAMP
echo "[$TIMESTAMP] Тимчасова директорія $BACKUP_DIR/$TIMESTAMP видалена." >> $LOG_FILE

echo "[$TIMESTAMP] Резервне копіювання завершено. Перевірка репозиторію:" >> $LOG_FILE
restic check --repo $RESTIC_REPO >> $LOG_FILE 2>&1
if [ $? -ne 0 ]; then
    echo "[$TIMESTAMP] Помилка при перевірці репозиторію Restic." >> $LOG_FILE
    exit 1
fi
echo "[$TIMESTAMP] Репозиторій Restic перевірено." >> $LOG_FILE
    

Зробіть скрипт виконуваним:


sudo chmod +x /usr/local/bin/backup_mongodb.sh
    
Ініціалізація репозиторію Restic

Перед першим використанням скрипта, вам потрібно ініціалізувати репозиторій restic. Переконайтеся, що у вас налаштовані змінні оточення для доступу до S3 (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) та змінна RESTIC_PASSWORD.


# Встановіть змінні оточення для поточної сесії
export AWS_ACCESS_KEY_ID="ВАШ_AWS_KEY_ID"
export AWS_SECRET_ACCESS_KEY="ВАШ_AWS_SECRET_KEY"
export RESTIC_PASSWORD="ВАШ_RESTIC_ПАРОЛЬ"

# Ініціалізація репозиторію (виконується ОДИН раз)
restic init --repo s3:s3.amazonaws.com/ВАШ_S3_БАКЕТ/mongodb_backups
    

Якщо ви використовуєте інший тип репозиторію (наприклад, SFTP), замініть s3:s3.amazonaws.com/... на відповідний шлях.

3. Куди зберігати резервні копії

Ніколи не зберігайте резервні копії на тому ж сервері, що й вихідні дані. У разі відмови сервера ви втратите і дані, і резервні копії.

  • Зовнішній S3-сумісний сервіс: Хмарні сховища, такі як Amazon S3, DigitalOcean Spaces, Backblaze B2, або MinIO на власному сервері, є чудовим вибором. Вони надійні, масштабовані та відносно недорогі.
  • Окремий VPS: Ви можете налаштувати другий, менш потужний VPS виключно для зберігання резервних копій.
  • Віддалений SFTP-сервер: Якщо у вас є доступ до іншого сервера через SFTP, restic підтримує цей протокол.

4. Налаштування Cron для автоматичного запуску резервного копіювання

Щоб скрипт виконувався автоматично, додайте його до розкладу cron.


sudo crontab -e
    

Додайте наступний рядок для щоденного резервного копіювання о 03:00 ночі. Переконайтеся, що змінні оточення для restic доступні в контексті cron-завдання. Найкраще прописати їх у самому скрипті або в окремому файлі, який скрипт буде "source"ити.


0 3 * * * /usr/local/bin/backup_mongodb.sh >> /var/log/mongodb_backup_cron.log 2>&1
    

Цей запис запускатиме скрипт щодня о 3 годині ночі та перенаправлятиме весь вивід у файл /var/log/mongodb_backup_cron.log.

5. Оновлення: rolling vs maintenance window

  • Оновлення ОС: Регулярно запускайте sudo apt update && sudo apt upgrade -y. Для продакшн-серверів рекомендується проводити оновлення у заздалегідь визначене вікно обслуговування (maintenance window), щоб мінімізувати ризики.
  • Оновлення MongoDB: Оновлення самої MongoDB (наприклад, з 7.0 до 8.0) вимагає ретельного планування та тестування. Для одиночної ноди на VPS це зазвичай означає зупинку служби (maintenance window). Для кластерів (replica sets) можливі rolling upgrades без простою, але це виходить за рамки цього посібника. Завжди читайте офіційну документацію MongoDB щодо оновлення для вашої версії.

Вирішення проблем + FAQ

Навіть при ретельному налаштуванні можуть виникнути проблеми. Цей розділ допоможе вам діагностувати та вирішувати найпоширеніші з них.

MongoDB не запускається або недоступна

Проблема: Після перезавантаження сервера або зміни конфігурації MongoDB не запускається, або ви не можете до неї підключитися.

Що перевірити:

  1. Статус служби: sudo systemctl status mongod. Шукайте помилки у виводі, наприклад, failed або exited.
  2. Логи MongoDB: sudo tail -f /var/log/mongodb/mongod.log. Тут будуть докладні повідомлення про помилки під час запуску або роботи.
  3. Файл конфігурації: sudo nano /etc/mongod.conf. Перевірте синтаксис YAML, особливо відступи. Неправильний bindIp або помилки в секції security/net.ssl є частими причинами.
  4. Доступ до файлів: Переконайтеся, що користувач mongodb має права на читання/запис у /var/lib/mongodb та /var/log/mongodb, а також на читання /etc/mongod.conf та TLS-сертифікатів.
  5. Зайнятий порт: sudo netstat -tuln | grep 27017. Переконайтеся, що інший процес не займає порт 27017.

Як виправити: Виправте помилки в mongod.conf, перевірте права доступу (sudo chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb), потім спробуйте перезапустити службу: sudo systemctl restart mongod.

Помилка "Authentication failed"

Проблема: Ви намагаєтеся підключитися до MongoDB, але отримуєте помилку "Authentication failed".

Що перевірити:

  1. Ім'я користувача та пароль: Переконайтеся, що ви використовуєте правильні облікові дані.
  2. База даних автентифікації: Переконайтеся, що ви вказуєте правильну базу даних для автентифікації (наприклад, --authenticationDatabase admin для адміністративного користувача).
  3. Чи ввімкнена автентифікація: Перевірте, що в /etc/mongod.conf присутнє security.authorization: enabled. Якщо ні, увімкніть, перезапустіть MongoDB та створіть користувача.

Як виправити: Перевірте облікові дані ще раз. Якщо ви забули пароль адміністратора, див. FAQ нижче.

Який VPS-конфіг мінімально підійде для MongoDB?

Для базових завдань, таких як розробка, невеликі особисті проєкти або тестові середовища, мінімально достатнім буде VPS з 2 ядрами CPU, 4 ГБ оперативної пам'яті та 50 ГБ NVMe SSD диска. Однак, для будь-якого продакшн-середовища, навіть з невеликим навантаженням, настійно рекомендується мати не менше 4 ядер CPU, 8 ГБ RAM та 160 ГБ NVMe SSD. Це забезпечить стабільну роботу та достатню продуктивність для кешування даних та обробки запитів.

Що обрати — VPS чи dedicated для цього завдання?

Вибір між VPS та dedicated сервером залежить від масштабу вашого проєкту, вимог до продуктивності, безпеки та бюджету. VPS чудово підходить для більшості середніх проєктів, де потрібна гнучкість, масштабованість та економічність. Він ідеальний для стартапів, невеликих SaaS-додатків, ігрових серверів для невеликої групи користувачів або криптовалютних нод, які не потребують екстремальної продуктивності. Dedicated сервер необхідний для високонавантажених систем, великих обсягів даних (терабайти), критично важливих додатків з високими вимогами до IOPS, або якщо вам потрібна повна ізоляція та максимальний контроль над апаратним забезпеченням. Якщо ваш проєкт активно зростає і впирається в ліміти VPS, перехід на dedicated буде логічним кроком.

Як скинути пароль адміністратора MongoDB?

Якщо ви забули пароль адміністратора, вам потрібно тимчасово вимкнути автентифікацію. Відредагуйте /etc/mongod.conf, закоментуйте або видаліть рядок security.authorization: enabled. Перезапустіть MongoDB. Підключіться до mongosh без автентифікації, перейдіть на базу admin, видаліть старого адміністративного користувача (або оновіть його пароль), потім створіть нового. Після цього поверніть security.authorization: enabled до конфігу та перезапустіть MongoDB.

Чому MongoDB споживає так багато RAM?

MongoDB активно використовує оперативну пам'ять для кешування даних (через рушій WiredTiger). Це нормальна поведінка, призначена для підвищення продуктивності, оскільки читання даних з RAM значно швидше, ніж з диска. Якщо ви бачите, що MongoDB споживає багато RAM, це часто хороший знак, що вказує на ефективне кешування. Однак, якщо система починає використовувати своп, це ознака нестачі RAM, і вам слід розглянути можливість збільшення обсягу пам'яті.

Чи потрібно використовувати реплікацію для однієї ноди на VPS?

Для одиночної ноди на VPS реплікація в класичному сенсі (створення кількох копій даних на різних серверах) не має сенсу, оскільки немає інших серверів. Однак, ви можете налаштувати "одиночний реплікасет" (single-node replica set). Це необхідно, якщо ви плануєте використовувати певні функції MongoDB, такі як транзакції або Change Streams, які вимагають реплікасета для роботи. Для базової установки без цих специфічних вимог, одиночний реплікасет не є обов'язковим, але й не зашкодить.

Як обмежити доступ до MongoDB лише для мого застосунку?

Це досягається двома ключовими кроками:

  1. Налаштування bindIp у /etc/mongod.conf: Вкажіть конкретну IP-адресу вашого застосунку (або кількох IP-адрес), з якої дозволені підключення. Якщо застосунок на тому ж сервері, використовуйте 127.0.0.1.
  2. Налаштування брандмауера (UFW): Дозвольте вхідні з'єднання на порт 27017 лише з IP-адреси вашого застосунку: sudo ufw allow from ВАША_IP_ЗАСТОСУНКУ to any port 27017. Це забезпечить захист на рівні мережі.

MongoDB не запускається після перезавантаження сервера. Що робити?

Насамперед перевірте логи MongoDB: sudo tail -n 100 /var/log/mongodb/mongod.log. Часті причини:

  • Пошкодження бази даних: Іноді при некоректному завершенні роботи або нестачі місця на диску дані можуть пошкодитися. Спробуйте запустити MongoDB з опцією --repair (обережно, може зайняти багато часу).
  • Нестача місця на диску: Перевірте df -h. Якщо диск заповнений, MongoDB не зможе створити нові файли або лог-записи.
  • Неправильні права доступу: Переконайтеся, що користувач mongodb має повні права на директорії /var/lib/mongodb та /var/log/mongodb.
  • Помилки в mongod.conf: Неправильний синтаксис або невірні параметри можуть перешкоджати запуску.
Якщо проблема не вирішується, можливо, знадобиться відновлення з останнього робочого бекапу.

Висновки та наступні кроки

Вітаємо! Ви успішно встановили, налаштували та захистили екземпляр MongoDB 7.0 на вашому VPS під керуванням Ubuntu Server 24.04 LTS. Тепер у вас є надійна та продуктивна база даних, готова до інтеграції з вашими застосунками. Ви реалізували базові, але вкрай важливі заходи безпеки, такі як автентифікація, обмеження мережевого доступу через брандмауер та, опціонально, шифрування трафіку за допомогою TLS/SSL. Також ви налаштували автоматичне резервне копіювання, що є наріжним каменем будь-якої продакшн-системи.

Подальші кроки для оптимізації та масштабування вашої установки MongoDB можуть включати:

  • Моніторинг продуктивності: Інтегруйте MongoDB із системами моніторингу, такими як Prometheus та Grafana, для відстеження метрик продуктивності, використання ресурсів та стану бази даних у реальному часі.
  • Оптимізація запитів та індексація: Аналізуйте повільні запити та створюйте відповідні індекси для покращення швидкості виконання операцій читання у вашій базі даних.
  • Реплікація та шардинг: У міру зростання вашого застосунку та збільшення навантаження розгляньте можливість налаштування реплікації для забезпечення високої доступності та стійкості до відмов, а також шардингу для горизонтального масштабування та розподілу даних по кількох серверах.

Чи був цей гайд корисним?

Ваш відгук допомагає нам покращувати гайди.

Share this post:

Надішліть гайд тому, кому він може стати в пригоді.

Telegram VKVK WhatsApp Facebook LinkedIn XX

встановлення mongodb на vps: базове налаштування і безпека
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.