MongoDB to baza dokumentowa chętnie używana w API, aplikacjach Node.js i analityce. Ubuntu nie zawiera jej w swoich repozytoriach, dlatego instaluje się ją z oficjalnego repozytorium MongoDB. Ten poradnik konfiguruje ją na VPS Linux Infrawire, włącza uwierzytelnianie i ogranicza dostęp.
📋 Wymagania wstępne
- Serwer VPS z Ubuntu 24.04 (noble) na x86_64 lub ARM64 i dostępem SSH jako root (adres IP i hasło roota znajdziesz w panelu klienta)
- Procesor udostępniający zestaw instrukcji AVX (wymagany od MongoDB 5.0):
grep -c avx /proc/cpuinfomusi zwrócić liczbę większą od 0 - Zalecane co najmniej 2 GB RAM
1. Dodanie oficjalnego repozytorium
Zaimportuj klucz podpisu i zadeklaruj repozytorium dla Ubuntu 24.04.
Bashapt update && apt install -y curl gnupg curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor echo 'deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse' > /etc/apt/sources.list.d/mongodb-org-8.0.list
2. Instalacja i uruchomienie usługi
Bashapt update apt install -y mongodb-org systemctl enable --now mongod systemctl status mongod --no-pager
Metapakiet mongodb-org instaluje serwer (mongod), powłokę (mongosh) i narzędzia. Dane znajdują się w /var/lib/mongodb, a logi w /var/log/mongodb/mongod.log.
3. Utworzenie administratora
Uwierzytelnianie jest jeszcze wyłączone, więc lokalna powłoka łączy się bez danych logowania. Utwórz pierwszego administratora w bazie admin; passwordPrompt() pyta o hasło, dzięki czemu nie trafia ono do historii powłoki.
Bashmongosh
JavaScript1use admin 2db.createUser({ 3 user: 'admin', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'userAdminAnyDatabase', db: 'admin' }, 'readWriteAnyDatabase' ] 6})
4. Włączenie uwierzytelniania
Edytuj /etc/mongod.conf i dodaj (lub odkomentuj) blok security:
YAMLsecurity: authorization: enabled
Bashsystemctl restart mongod
Od tej chwili każde połączenie musi się uwierzytelnić.
5. Utworzenie użytkownika aplikacji
Aplikacja nigdy nie powinna korzystać z konta administratora. Daj jej użytkownika ograniczonego do jej własnej bazy.
Bashmongosh -u admin -p --authenticationDatabase admin
JavaScript1use appdb 2db.createUser({ 3 user: 'appuser', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'readWrite', db: 'appdb' } ] 6})
Odpowiedni ciąg połączenia to mongodb://appuser:PASSWORD@127.0.0.1:27017/appdb?authSource=appdb.
6. Dostęp sieciowy i zapora
Domyślnie MongoDB nasłuchuje wyłącznie na 127.0.0.1, co jest najbezpieczniejszym ustawieniem, gdy aplikacja działa na tym samym VPS. Aby dopuścić inny serwer, dodaj adres VPS w /etc/mongod.conf:
YAMLnet: port: 27017 bindIp: 127.0.0.1,VPS_IP
Następnie w zaporze zezwól tylko serwerowi aplikacji i nigdy nie otwieraj portu 27017 dla całego Internetu:
Bashufw allow OpenSSH ufw allow from APP_SERVER_IP to any port 27017 proto tcp ufw enable systemctl restart mongod
✅ Weryfikacja instalacji
Bashmongod --version mongosh --eval 'db.runCommand({ ping: 1 })' mongosh -u appuser -p --authenticationDatabase appdb appdb --eval 'db.test.insertOne({ ok: true })' ss -ltnp | grep 27017
Ostatnie polecenie pokazuje, na jakim adresie nasłuchuje MongoDB. Nieuwierzytelnione zapytanie, np. db.getUsers(), powinno teraz zakończyć się błędem autoryzacji.
🔧 Rozwiązywanie problemów
mongod nie startuje (Illegal instruction lub kod wyjścia 132) : wirtualny procesor nie udostępnia AVX. Sprawdź grep avx /proc/cpuinfo; bez AVX MongoDB 8.0 nie uruchomi się na tej maszynie.
Start kończy się błędami uprawnień : popraw właściciela plików danych i gniazda poleceniem chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb, usuń stary /tmp/mongodb-27017.sock i zrestartuj usługę. Szczegóły znajdziesz w journalctl -u mongod.
Authentication failed : użytkownik został utworzony w konkretnej bazie. Podaj właściwą przez --authenticationDatabase (lub authSource w URI).
Połączenie zdalne kończy się przekroczeniem czasu : sprawdź bindIp, reguły w ufw status oraz czy adres IP klienta zgadza się z dopuszczonym.
🎉 MongoDB 8.0 jest zainstalowane, chronione uwierzytelnianiem i gotowe dla Twojej aplikacji!