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.conf dan arti tiap blok.
  • Padanan opsi CLI ↔ kunci YAML.
  • getCmdLineOpts untuk 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:

text
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: rs0

File 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:

KunciFungsiNilai umum
storage.dbPathDirektori penyimpanan data WiredTiger/var/lib/mongodb (paket), direktori sendiri (tarball)
storage.wiredTiger.engineConfig.cacheSizeGBBatas atas cache WiredTiger~50% RAM dikurangi 1 GB; 0.25 di server latihan agar hemat
systemLog.destination + pathLog ke file dan lokasinyafile + /var/log/mongodb/mongod.log
net.portPort yang didengarkan27017
net.bindIpAlamat yang menerima koneksi127.0.0.1 lokal; daftar dipisah koma untuk LAN
replication.replSetNameNama replica setrs0
security.authorizationMengaktifkan role-based access controlenabled 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 CLIPadanan YAML
--dbpath /datastorage.dbPath: /data
--port 28018net.port: 28018
--bind_ip 127.0.0.1net.bindIp: 127.0.0.1
--replSet rs0replication.replSetName: rs0
--authsecurity.authorization: enabled
--wiredTigerCacheSizeGB 1storage.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):

js
const o = db.adminCommand({ getCmdLineOpts: 1 })
o.argv

Output yang Dihasilkan:

text
[ 'mongod', '--config', '/home/z/my-project/mongod.conf' ]

Array argv membuktikan server dinyalakan hanya dengan satu flag --config. Nilai efektifnya ada di parsed:

js
o.parsed.storage
o.parsed.net

Output yang Dihasilkan:

text
{
  dbPath: '/home/z/my-project/mongo-data',
  wiredTiger: { engineConfig: { cacheSizeGB: 0.25 } }
}
{ bindIp: '127.0.0.1', port: 27017 }
js
o.parsed.systemLog
o.parsed.replication

Output yang Dihasilkan:

text
{
  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:

text
storage:
  dbPath: /tmp/latihan-cli/data
net:
  port: 28019
  bindIp: 127.0.0.1
systemLog:
  destination: file
  path: /tmp/latihan-cli/mongod.log
  logAppend: true

Lalu nyalakan instance itu dengan flag --port 28018 yang berbeda dari isi file:

bash
mkdir -p /tmp/latihan-cli/data
mongod --config /tmp/latihan-cli/mongod.conf --port 28018 --fork

Output yang Dihasilkan:

text
about to fork child process, waiting until server is ready for connections.
forked process: 31276
child process started successfully, parent exiting

Proses berhasil hidup. Sekarang periksa konfigurasi yang dipakainya:

bash
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:

text
[
  '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.conf berformat YAML dengan blok utama storage, systemLog, net, replication, dan security — satu sumber kebenaran yang bisa diaudit.
  • Setiap kunci YAML punya padanan flag CLI; file untuk pengaturan permanen, flag untuk eksperimen.
  • db.adminCommand({ getCmdLineOpts: 1 }) menampilkan argv mentah dan parsed efektif — satu-satunya gambaran konfigurasi yang benar-benar berlaku.
  • Flag CLI menimpa nilai file untuk opsi yang sama; gabungan keduanya terlihat di parsed.