
- MongoDB
- Ubuntu
- Database
- Security
- Next.js
MongoDB 8.0 uzstādīšanas rokasgrāmata
Visaptveroša rokasgrāmata MongoDB 8.0 instalēšanai, konfigurēšanai un drošināšanai Ubuntu 24.04 – ar autentifikāciju, tīkla saistīšanu, TLS/SSL, automatizētiem dublējumiem un Next.js integrāciju.
Šī rokasgrāmata vada cauri MongoDB 8.0 instalēšanai Ubuntu 24.04.2, tās drošināšanai ar autentifikāciju un TLS/SSL, automatizētu dublējumu iestatīšanai un savienošanai ar Next.js lietotni.
Instalēšana
1. MongoDB GPG atslēgas importēšana
Importē parakstīšanas atslēgu pakotnes integritātes pārbaudei:
sudo apt-get install gnupg curl
curl -fsSL https://pgp.mongodb.com/server-8.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg \
--dearmor
2. MongoDB repozitorija pievienošana
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 multiverse" | \
sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
3. MongoDB instalēšana
Atjaunini pakotņu datubāzi un instalē:
sudo apt-get update
sudo apt-get install -y mongodb-org
Tiek instalēts MongoDB serveris, mongosh un standarta rīki.
4. Pakalpojuma startēšana un aktivizēšana
sudo systemctl start mongod
sudo systemctl enable mongod
Pārbaudi, vai pakalpojums darbojas:
sudo systemctl status mongod
Izvadē vajadzētu redzēt statusu active (running).
5. Noklusējuma konfigurācijas pārskatīšana
MongoDB konfigurācija atrodas /etc/mongod.conf:
sudo nano /etc/mongod.conf
Svarīgākie noklusējuma iestatījumi:
# Tīkla iestatījumi
net:
port: 27017 # Noklusējuma ports
bindIp: 127.0.0.1 # Noklusējumā pieļauj tikai lokālos savienojumus
# Krātuve
storage:
dbPath: /var/lib/mongodb
# Procesa pārvaldība
processManagement:
timeZoneInfo: /usr/share/zoneinfo
Pēc katras konfigurācijas izmaiņas restartē MongoDB:
sudo systemctl restart mongod
Drošība
1. Administratora lietotāja izveide
Pieslēdzies MongoDB apvalkam:
mongosh
Izveido saknes administratora lietotāju:
use admin
db.createUser(
{
user: "adminUser",
pwd: "secure_password_here",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
exit
2. Autentifikācijas iespējošana
Rediģē /etc/mongod.conf un pievieno drošības sadaļu:
security:
authorization: enabled
Restartē MongoDB:
sudo systemctl restart mongod
3. Tīkla saistīšanas konfigurēšana
Noklusējumā MongoDB klausās tikai uz lokālā resursdatora. Ja lietotne atrodas uz tā paša servera, atstāj šo iestatījumu nemainītu. Lai atļautu savienojumus no konkrētiem attālinātiem resursdatoriem:
net:
port: 27017
bindIp: 127.0.0.1 # Tikai lokālais (noklusējums)
# bindIp: 127.0.0.1,192.168.1.100 # Atļaut konkrētu IP
# bindIp: 0.0.0.0 # Atļaut visus IP (nav ieteicams)
Drošības brīdinājums: Attāliem savienojumiem vienmēr jābūt apvienotiem ar ugunsmūra noteikumiem, TLS/SSL un spēcīgu autentifikāciju.
4. TLS/SSL iestatīšana
Ģenerē pašparakstītu sertifikātu (testēšanai; ražošanā izmanto CA parakstītu sertifikātu):
# Izveido sertifikātu mapi
sudo mkdir -p /etc/ssl/mongodb
cd /etc/ssl/mongodb
# Ģenerē pašparakstītu sertifikātu
sudo openssl req -newkey rsa:4096 -x509 -sha256 -days 365 -nodes \
-out mongodb-cert.pem \
-keyout mongodb-key.pem
# Iestata atbilstošas atļaujas
sudo chmod 600 mongodb-key.pem mongodb-cert.pem
sudo chown mongodb:mongodb mongodb-key.pem mongodb-cert.pem
Atjaunini /etc/mongod.conf, lai pieprasītu SSL:
net:
port: 27017
bindIp: 127.0.0.1
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb/mongodb-cert.pem
PEMKeyPassword: "tava_parole_ja_ir"
5. Automatizētu dublējumu iestatīšana
Izveido dublējumu mapi un skriptu:
sudo mkdir -p /var/backups/mongodb
sudo nano /usr/local/bin/mongodb-backup.sh
Dublējuma skripta saturs:
#!/bin/bash
BACKUP_DIR="/var/backups/mongodb/$(date +%Y-%m-%d_%H-%M-%S)"
LOG_FILE="/var/log/mongodb/backup_$(date +%Y-%m-%d).log"
mkdir -p $BACKUP_DIR
echo "Dublējums sākts $(date)" >> $LOG_FILE
mongodump --port 27017 \
--authenticationDatabase "admin" \
--username "adminUser" \
--password "secure_password_here" \
--out $BACKUP_DIR \
--gzip
echo "Dublējums pabeigts $(date)" >> $LOG_FILE
# Noņem dublējumus vecākus par 14 dienām
find /var/backups/mongodb -type d -mtime +14 -exec rm -rf {} \; 2>/dev/null || true
Padari skriptu izpildāmu un ieplāno to ar cron:
sudo chmod +x /usr/local/bin/mongodb-backup.sh
# Rediģē crontab – pievieno ikdienas palaišanu plkst. 2:00
sudo crontab -e
# Pievieno: 0 2 * * * /usr/local/bin/mongodb-backup.sh
Atjaunot no dublējuma:
# Apskata pieejamos dublējumus
ls -la /var/backups/mongodb/
# Atjauno no konkrēta dublējuma
mongorestore --port 27017 \
--authenticationDatabase "admin" \
--username "adminUser" \
--password "secure_password_here" \
--gzip \
/var/backups/mongodb/2025-03-25_02-00-00/
Drošības labākā prakse
- Izmanto spēcīgas, unikālas paroles visiem MongoDB lietotājiem.
- Ievēro minimālo privilēģiju principu – piešķir lietotājiem tikai tās atļaujas, kuras tiem patiešām nepieciešamas.
- Regulāri atjaunini MongoDB, lai piemērotu drošības ielāpus.
- Ievies IP baltās sarakstu, lai ierobežotu piekļuvi uzticamiem avotiem.
- Izmanto TLS/SSL visiem savienojumiem ražošanas vidēs.
- Regulāri pārbaudi dublējumu atjaunošanas procesu, ne tikai dublējumu izveidi.
- Uzrauga žurnālus aizdomīgas darbības gadījumā un iestata automatizētus brīdinājumus.
MongoDB integrācija ar Next.js
Savienojuma utilīta
Izveido savienojuma vienīgpeldēķni lib/mongodb.ts, lai izvairītos no jauna savienojuma atvēršanas ar katru pieprasījumu:
// lib/mongodb.ts
import { MongoClient } from 'mongodb'
if (!process.env.MONGODB_URI) {
throw new Error('Please add your MongoDB URI to .env.local')
}
const uri = process.env.MONGODB_URI
const options = {}
let client: MongoClient
let clientPromise: Promise<MongoClient>
if (process.env.NODE_ENV === 'development') {
// Izstrādē saglabā savienojumu pāri HMR pārlādēm
const globalWithMongo = global as typeof globalThis & {
_mongoClientPromise?: Promise<MongoClient>
}
if (!globalWithMongo._mongoClientPromise) {
client = new MongoClient(uri, options)
globalWithMongo._mongoClientPromise = client.connect()
}
clientPromise = globalWithMongo._mongoClientPromise
} else {
client = new MongoClient(uri, options)
clientPromise = client.connect()
}
export default clientPromise
Vides mainīgie
Pievieno savienojuma virkni .env.local:
MONGODB_URI=mongodb://adminUser:secure_password@127.0.0.1:27017/mydb?authSource=admin
Savienojuma izmantošana API maršrutos
// app/api/users/route.ts
import { NextResponse } from 'next/server'
import clientPromise from '@/lib/mongodb'
export async function GET() {
try {
const client = await clientPromise
const db = client.db("mydb")
const users = await db.collection("users").find({}).limit(10).toArray()
return NextResponse.json({ users })
} catch (e) {
console.error(e)
return NextResponse.json({ error: 'Failed to fetch users' }, { status: 500 })
}
}
Bieži uzdotie jautājumi
Vai MongoDB un Next.js var darboties uz viena servera?
Jā, mazām un vidējām lietotnēm tas ir pieņemami. Lielākām slodzēm apsver to atdalīšanu – dedikēti datubāzes serveri nodrošina labāku mērogojamību, neatkarīgu resursu regulēšanu un skaidrākas drošības robežas.
Kā uzraudzīt MongoDB veiktspēju?
Izmanto iebūvētos rīkus (db.stats(), db.serverStatus()), vai trešo pušu risinājumus, piemēram, Prometheus ar MongoDB eksportētāju, MongoDB Atlas uzraudzību vai komerciālus rīkus kā Datadog.
Vai vajadzētu izmantot MongoDB Atlas, nevis pašhostu?
Atlas piedāvā automātiskus dublējumus, mērogošanu un pārvaldītus drošības atjauninājumus par mazāku kontroli un pastāvīgiem abonēšanas maksājumiem. Pašhostings dod pilnu kontroli, taču prasa lielāku operacionālo darbu. Lielākajai daļai ražošanas lietotņu Atlas ir pragmatiska izvēle, ja vien izmaksas vai datu atrašanās vietas prasības neliek dot priekšroku pašhostingam.
Kā dublēt un atjaunot datubāzi?
Izmanto mongodump dublējumu izveidei un mongorestore atjaunošanai, kā parādīts dublējumu sadaļā. Vienmēr pārbaudi, ka atjaunošanas process darbojas, pirms tev tas patiešām nepieciešams.