Server mongod punya ratusan opsi, dan hampir semuanya bisa diatur di satu file konfigurasi YAML. Tanpa file itu, setiap kali server dinyalakan kita harus mengulang seluruh flag di baris perintah — rawan salah ketik dan sulit diaudit. Chapter ini membahas anatomi file mongod.conf, padanan antara opsi CLI dan YAML, cara memeriksa konfigurasi yang benar-benar aktif lewat getCmdLineOpts, dan aturan prioritas ketika keduanya dipakai bersamaan.
Peta materi chapter ini:
- Struktur file
mongod.confdan arti tiap blok. - Padanan opsi CLI ↔ kunci YAML.
getCmdLineOptsuntuk membaca konfigurasi aktif.- Prioritas: flag CLI menimpa nilai dari file.
Anatomi File mongod.conf #
Kita sudah berkenalan dengan file ini singkat saat instalasi. Berikut konfigurasi lengkap server latihan yang dipakai sepanjang course ini:
storage:
dbPath: /home/z/my-project/mongo-data
wiredTiger:
engineConfig:
cacheSizeGB: 0.25
systemLog:
destination: file
path: /home/z/my-project/mongo-data/mongod.log
logAppend: true
net:
port: 27017
bindIp: 127.0.0.1
replication:
replSetName: rs0File ini memakai sintaks YAML: setiap tingkat diindentasi dua spasi, dan kunci bersarang seperti storage.wiredTiger.engineConfig.cacheSizeGB membentuk jalur hierarkis. Tabel berikut merangkum blok yang paling sering Anda sentuh:
| Kunci | Fungsi | Nilai umum |
|---|---|---|
storage.dbPath | Direktori penyimpanan data WiredTiger | /var/lib/mongodb (paket), direktori sendiri (tarball) |
storage.wiredTiger.engineConfig.cacheSizeGB | Batas atas cache WiredTiger | ~50% RAM dikurangi 1 GB; 0.25 di server latihan agar hemat |
systemLog.destination + path | Log ke file dan lokasinya | file + /var/log/mongodb/mongod.log |
net.port | Port yang didengarkan | 27017 |
net.bindIp | Alamat yang menerima koneksi | 127.0.0.1 lokal; daftar dipisah koma untuk LAN |
replication.replSetName | Nama replica set | rs0 |
security.authorization | Mengaktifkan role-based access control | enabled di produksi |
Server latihan kita sengaja tidak memakai blok security karena autentikasi dimatikan; pada produksi, blok security.authorization: enabled wajib ada — detailnya dibahas di section Keamanan.
Opsi Baris Perintah vs File #
Setiap kunci YAML punya padanan flag CLI. Keduanya sama kuatnya; bedanya hanya tempat hidupnya:
| Flag CLI | Padanan YAML |
|---|---|
--dbpath /data | storage.dbPath: /data |
--port 28018 | net.port: 28018 |
--bind_ip 127.0.0.1 | net.bindIp: 127.0.0.1 |
--replSet rs0 | replication.replSetName: rs0 |
--auth | security.authorization: enabled |
--wiredTigerCacheSizeGB 1 | storage.wiredTiger.engineConfig.cacheSizeGB: 1 |
File dimuat lewat --config mongod.conf (atau singkatnya -f mongod.conf). Praktik produksi hampir selalu memakai file: konfigurasi bisa masuk repositori, diaudit, dan dikopi ke server baru. Flag CLI cocok untuk eksperimen singkat — misalnya menaikkan cacheSizeGB sebentar untuk pengujian — tanpa menyentuh file resmi.
Membaca Konfigurasi Aktif dengan getCmdLineOpts #
Pertanyaan “server ini sebenarnya jalan dengan pengaturan apa?” dijawab oleh perintah administratif getCmdLineOpts. Perintah ini mengembalikan dua bagian: argv (argumen mentah saat proses dinyalakan) dan parsed (hasil gabungan file + CLI setelah diuraikan server):
const o = db.adminCommand({ getCmdLineOpts: 1 })
o.argvOutput yang Dihasilkan:
[ 'mongod', '--config', '/home/z/my-project/mongod.conf' ]Array argv membuktikan server dinyalakan hanya dengan satu flag --config. Nilai efektifnya ada di parsed:
o.parsed.storage
o.parsed.netOutput yang Dihasilkan:
{
dbPath: '/home/z/my-project/mongo-data',
wiredTiger: { engineConfig: { cacheSizeGB: 0.25 } }
}
{ bindIp: '127.0.0.1', port: 27017 }o.parsed.systemLog
o.parsed.replicationOutput yang Dihasilkan:
{
destination: 'file',
logAppend: true,
path: '/home/z/my-project/mongo-data/mongod.log'
}
{ replSetName: 'rs0' }Dokumen parsed adalah satu-satunya sumber yang bisa dipercaya, karena file di disk mungkin sudah diubah setelah server menyala — perubahan file baru berlaku saat proses dihidupkan ulang. Blok yang tidak ada di file (misalnya security pada server latihan) juga tidak muncul di parsed.
Prioritas: CLI Menimpa File #
Ketika satu opsi diberikan di dua tempat sekaligus, flag CLI menang. Mari kita buktikan dengan instance latihan terpisah di port lain, supaya server utama tidak tersentuh. Pertama, siapkan file yang menyebut port 28019:
storage:
dbPath: /tmp/latihan-cli/data
net:
port: 28019
bindIp: 127.0.0.1
systemLog:
destination: file
path: /tmp/latihan-cli/mongod.log
logAppend: trueLalu nyalakan instance itu dengan flag --port 28018 yang berbeda dari isi file:
mkdir -p /tmp/latihan-cli/data
mongod --config /tmp/latihan-cli/mongod.conf --port 28018 --forkOutput yang Dihasilkan:
about to fork child process, waiting until server is ready for connections.
forked process: 31276
child process started successfully, parent exitingProses berhasil hidup. Sekarang periksa konfigurasi yang dipakainya:
mongosh "mongodb://127.0.0.1:28018/?directConnection=true" --quiet --eval \
'const o = db.adminCommand({ getCmdLineOpts: 1 }); printjson(o.argv); printjson(o.parsed.net)'Output yang Dihasilkan:
[
'mongod',
'--config',
'/tmp/latihan-cli/mongod.conf',
'--port',
'28018',
'--fork'
]
{
bindIp: '127.0.0.1',
port: 28018
}Bukti prioritas terlihat jelas: file menulis 28019, CLI menulis 28018, dan parsed.net.port memuat 28018. Setelah eksperimen selesai, hentikan instance latihan dengan kill -TERM <pid> (sinyal ini mematikan mongod dengan sopan — mekanismenya dibahas di chapter Proses Server Database).
Rangkuman #
mongod.confberformat YAML dengan blok utamastorage,systemLog,net,replication, dansecurity— satu sumber kebenaran yang bisa diaudit.- Setiap kunci YAML punya padanan flag CLI; file untuk pengaturan permanen, flag untuk eksperimen.
db.adminCommand({ getCmdLineOpts: 1 })menampilkanargvmentah danparsedefektif — satu-satunya gambaran konfigurasi yang benar-benar berlaku.- Flag CLI menimpa nilai file untuk opsi yang sama; gabungan keduanya terlihat di
parsed.