mongod.conf, MongoDB sunucusunun (mongod) başlangıç ayarlarını tutan YAML biçimli yapılandırma dosyasıdır. Ubuntu ve Debian'da apt ile kurulan paketlerde dosya /etc/mongod.conf konumundadır ve MongoDB systemd ile başlatıldığında otomatik olarak yüklenir. Dosyadaki her ayarın bir komut satırı karşılığı vardır: net.bindIp ayarı --bind_ip, storage.dbPath ayarı --dbpath seçeneğine karşılık gelir. Değişiklikten sonra servisi sudo systemctl restart mongod ile yeniden başlatırsınız.

Bu yazıda dosyanın biçimini, en çok kullanılan bölümleri (systemLog, storage, net, security, processManagement, operationProfiling, replication, setParameter), paket kurulumunun beklediği varsayılanları, çalışan sunucunun hangi ayarlarla açıldığını nasıl doğrulayacağınızı ve güvenli bir VPS yapılandırması için dikkat etmeniz gerekenleri anlatıyoruz. Kurulum adımları için MongoDB Ubuntu kurulumu yazısına bakabilirsiniz.

Dosya nerede?

Dosya nerede? Linux, macOS, Windows, Her platform
PlatformKurulum yöntemiYapılandırma dosyası
Linuxapt, yum veya zypper paketi/etc/mongod.conf
macOSbrew/usr/local/etc/mongod.conf (Intel) veya /opt/homebrew/etc/mongod.conf (Apple Silicon)
WindowsMSI yükleyicikurulum dizini altında bin\mongod.cfg
Her platformTGZ veya ZIP arşiviDosyayı kendiniz oluşturursunuz

Paketle kurulumda varsayılan veri dizini Ubuntu ve Debian'da /var/lib/mongodb, RHEL, SUSE ve Amazon Linux'ta /var/lib/mongo olur; log dizini her ikisinde de /var/log/mongodb değeridir. Yapılandırma dosyası olmadan, elle başlatılan bir mongod için storage.dbPath varsayılanı Linux ve macOS'ta /data/db, Windows'ta \data\db değeridir.

YAML biçimi ve ilk kural: sekme yok

MongoDB yapılandırma dosyaları YAML kullanır. YAML girintiyi anlam taşıyan bir yapı olarak okur ve sekme (tab) karakterini girinti olarak kabul etmez; girintiyi her zaman boşlukla yapın. Bir bölümün alt ayarları aynı miktarda boşlukla hizalanmalıdır. Dosyaya # ile yorum ekleyebilirsiniz; ekipteki diğer kişilerin bir ayarın neden orada olduğunu anlaması için bu iyi bir alışkanlıktır.

Aşağıda tek sunuculu bir VPS için örnek bir yapılandırma var. Değerler, belgelerdeki örneklerle ve Ubuntu paket varsayılanlarıyla uyumludur; IP adresi yalnızca örnek olarak verilmiştir.

yaml
# /etc/mongod.conf
storage:
  dbPath: /var/lib/mongodb

systemLog:
  destination: file
  path: /var/log/mongodb/mongod.log
  logAppend: true

net:
  port: 27017
  # Yalnizca localhost ve ozel ag arayuzu (ornek IP)
  bindIp: 127.0.0.1,10.0.0.5

security:
  authorization: enabled

operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 200

Bu dosyada veri ve log yolları paket varsayılanlarında bırakılmış, sunucu yalnızca yerel arayüzü ve bir özel ağ adresini dinliyor, rol tabanlı erişim denetimi açık ve 200 milisaniyeyi aşan işlemler profiler'a kaydediliyor. Şimdi bölümleri tek tek inceleyelim.

systemLog: loglar nereye yazılır?

  • destination: file ya da syslog. file verirseniz path da vermek zorundasınız. Hiç belirtmezseniz loglar standart çıktıya gider. Belgeler, syslog servisinin zaman damgasını MongoDB mesajı ürettiğinde değil kendisi kaydettiğinde ürettiğini, bunun yoğun yükte yanıltıcı zamanlara yol açabileceğini belirtir ve üretimde file önerir.
  • path: Log dosyasının yolu.
  • logAppend: Varsayılan false. true olduğunda sunucu yeniden başlarken yeni kayıtları mevcut dosyanın sonuna ekler; aksi halde eski dosyayı yedekleyip yenisini açar.
  • logRotate: Varsayılan rename. Linux logrotate aracını kullanıyorsanız log kaybını önlemek için reopen seçin; bu durumda logAppend: true da zorunludur.
  • verbosity: Log ayrıntı düzeyi; varsayılan 0. Bileşen bazında (örneğin component.query.verbosity) ayrıca ayarlanabilir.

storage: veri dizini ve önbellek

storage: veri dizini ve önbellek

storage.dbPath, mongod'un verilerini sakladığı dizindir ve yalnızca mongod için geçerlidir. Bu dizinin sahibi MongoDB servis kullanıcısı olmalıdır. Belgeler, servisi çalıştıran kullanıcıyı ya da dizinleri değiştirirseniz bu kullanıcıya veri ve log dizinlerinde yetki vermeniz gerektiğini vurgular.

storage.wiredTiger.engineConfig.cacheSizeGB, WiredTiger'ın iç önbelleği için üst sınırı belirler. Varsayılan iç önbellek boyutu, (RAM - 1 GB) değerinin yüzde 50'si ile 0.256 GB'tan büyük olanıdır; belgelerin örneğinde 4 GB RAM'li bir sistemde önbellek 1.5 GB olur. MongoDB hem bu iç önbelleği hem de işletim sisteminin dosya sistemi önbelleğini kullanır. Belgeler iç önbelleği varsayılanın üzerine çıkarmaktan kaçınmanızı önerir; gerekiyorsa dikey ölçeklemeye uyum sağlamak için yüzde cinsinden cacheSizePct (komut satırında --wiredTigerCacheSizePct) kullanılabilir. Aynı VPS'te başka servisler de çalışıyorsa bu değeri bilinçli olarak düşürmek isteyebilirsiniz; bellek planlaması için MongoDB production notları yazısına bakın.

yaml
storage:
  dbPath: /var/lib/mongodb
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1

net: port ve dinlenen adresler

net.port varsayılan olarak 27017'dir (shard üyesi için 27018, config server üyesi için 27019). net.bindIp sunucunun istemci bağlantısı kabul edeceği adresleri belirler ve varsayılanı localhost değeridir. Birden çok adresi virgülle ayırarak yazarsınız; IPv6 adresleri ve Unix domain socket yolları da verilebilir. IPv6 adresi kullanıyorsanız ayrıca net.ipv6: true gerekir.

Tüm IPv4 adreslerini dinlemek için 0.0.0.0, tüm IPv4 ve IPv6 adresleri için ::,0.0.0.0 ya da tırnak içinde yıldız "*" yazılır (tırnak, YAML'ın yıldızı alias sanmasını önler). Aynı işi net.bindIpAll: true da yapar. bindIp ve bindIpAll birbirini dışlar: ikisini birden verirseniz mongod hata verip kapanır. Komut satırındaki --bind_ip dosyadaki net.bindIp değerini ezer.

Uygulamanız MongoDB ile aynı sunucudaysa bindIp değerini 127.0.0.1 olarak bırakmak en güvenli seçenektir. Uygulama başka bir sunucudaysa, mümkünse sağlayıcınızın özel ağındaki arayüzü ekleyin; herkese açık arayüzü dinletmekten kaçının. Bağlantı sorunlarında ilk bakılacak yer çoğunlukla bu ayardır; MongoDB bağlantı hataları yazısında teşhis adımlarını anlatıyoruz.

security: erişim denetimi

security.authorization rol tabanlı erişim denetimini (RBAC) açar ya da kapatır ve varsayılanı disabled değeridir. disabled iken her kullanıcı her veritabanına erişip her işlemi yapabilir; enabled iken kullanıcı yalnızca kendisine yetki verilmiş kaynak ve eylemlere erişebilir. Komut satırı karşılığı --auth seçeneğidir. Erişim denetimini açmadan önce bir yönetici kullanıcı oluşturmanız gerekir; doğru sıralama MongoDB authentication etkinleştirme yazısında.

Replica set üyeleri arasında kimlik doğrulama için security.keyFile (komut satırında --keyFile) kullanılır. security.javascriptEnabled sunucu tarafında JavaScript çalıştırmayı açıp kapatır (varsayılan true); kapalıyken $where, mapReduce, $accumulator ve $function kullanılamaz. Sürüm notlarına göre MongoDB 9.0 ile bu sunucu tarafı JavaScript fonksiyonları artık kullanımdan kaldırılmış (deprecated) sayılmıyor ve WebAssembly tabanlı bir motorla yeniden etkinleştirildi; ayrıntılar MongoDB 9.0 yenilikleri yazısında.

processManagement, operationProfiling ve replication

processManagement.fork (varsayılan false) mongod'u arka planda daemon olarak çalıştırır; Windows'ta desteklenmez. systemd gibi bir süreç yöneticisi kullanıyorsanız daemon işini o üstlenir. processManagement.pidFilePath PID dosyasının yerini belirtir; belgeler Linux'ta PID yönetiminin genellikle init sisteminin işi olduğunu ve bu ayarı yalnızca init sistemi kullanmıyorsanız vermenizi önerir. systemd ile servis yönetimi için systemd servis yönetimi yazısına bakabilirsiniz.

operationProfiling.mode profiler düzeyini seçer: off (varsayılan, düzey 0), slowOp (eşiği aşan işlemler, düzey 1) ve all (tüm işlemler, düzey 2). slowOpThresholdMs varsayılan olarak 100'dür ve mongod'da hem tanılama logunu hem de açıksa profiler'ı etkiler; mongos'ta yalnızca logu etkiler. slowOpSampleRate (varsayılan 1.0) yavaş işlemlerin ne kadarının kaydedileceğini belirler. Profiler kullanımını MongoDB yavaş sorgu ve profiler yazısında ayrıntılı anlatıyoruz.

replication.replSetName mongod'un ait olduğu replica set'in adıdır; tüm üyelerde aynı olmalıdır ve komut satırı karşılığı --replSet seçeneğidir. replication.oplogSizeMB oplog'un en büyük boyutunu belirler; belgelere göre bu ayar yalnızca oplog ilk kez oluşturulurken etkilidir, sonradan boyutu değiştirmek için replSetResizeOplog komutu kullanılır. Replica set kurulumu MongoDB replica set kurulumu yazısında.

yaml
replication:
  replSetName: rs0

security:
  authorization: enabled
  keyFile: /etc/mongodb/anahtar

setParameter:
  enableLocalhostAuthBypass: false

setParameter bölümü, sunucu parametrelerini başlangıçta ayarlamanın yoludur. Belgelerdeki örnek, enableLocalhostAuthBypass parametresini kapatır. Çalışma anında değiştirilebilen parametreler için aynı işi db.adminCommand( { setParameter: 1, ... } ) ile de yapabilirsiniz, ama yeniden başlatmada kalıcı olması için değeri dosyaya da yazmalısınız.

Dosya ayarları ve komut satırı karşılıkları

Dosya ayarları ve komut satırı karşılıkları: net.port, net.bindIp, net.bindIpAll, storage.dbPath
mongod.conf ayarıKomut satırı seçeneği
net.port--port
net.bindIp--bind_ip
net.bindIpAll--bind_ip_all
storage.dbPath--dbpath
systemLog.path--logpath
systemLog.logAppend--logappend
security.authorization--auth (kapatmak için --noauth)
security.keyFile--keyFile
processManagement.fork--fork
operationProfiling.mode--profile
operationProfiling.slowOpThresholdMs--slowms
replication.replSetName--replSet
storage.wiredTiger.engineConfig.cacheSizeGB--wiredTigerCacheSizeGB

Dosyayı elle başlattığınız bir mongod'a vermek için --config ya da kısa hali -f kullanılır. Paketle kurup init sistemiyle başlattıysanız zaten bir yapılandırma dosyası kullanıyorsunuz demektir.

bash
mongod --config /etc/mongod.conf
mongod -f /etc/mongod.conf

# Paket kurulumunda servis olarak yeniden baslatma
sudo systemctl restart mongod
sudo systemctl status mongod

Paket kurulumunun beklediği değerler

Belgeler önemli bir tuzağa dikkat çeker: resmî Linux paketlerindeki init betikleri systemLog.path, storage.dbPath ve processManagement.fork (ya da MONGODB_CONFIG_OVERRIDE_NOFORK ortam değişkeni) için belirli değerlere dayanır. Bu ayarları varsayılan dosyada değiştirirseniz mongod başlamayabilir. Paketlerin kendi betikleriyle bu değerleri değiştirmek istiyorsanız, belgelere göre kendi init betiklerinizi kullanıp yerleşik betikleri devre dışı bırakmanız gerekir.

Pratikte veri dizinini ayrı bir diske taşımak istiyorsanız yolu değiştirmenin yanında yeni dizinin sahipliğini ve izinlerini servis kullanıcısına göre ayarlamanız, ardından servisin gerçekten başladığını systemctl status mongod ve log dosyasıyla doğrulamanız gerekir. Dosya izinleri ve sahiplik temelleri için Linux sunucu yönetimi temelleri yazısına bakabilirsiniz. Böyle bir değişiklikten önce mutlaka yedek alın; araçlar mongodump ve mongorestore yazısında.

Çalışan sunucunun ayarlarını doğrulamak

Dosyada yazanla sunucunun gerçekte kullandığı değer farklı olabilir; örneğin komut satırı seçeneği dosyayı ezmiş olabilir. Bunu görmek için admin veritabanında getCmdLineOpts komutunu çalıştırın:

javascript
db.adminCommand( { getCmdLineOpts: 1 } )

Komut iki alan döndürür. argv, mongod'u başlatan komut satırının parçalarını; parsed ise hem komut satırından hem yapılandırma dosyasından okunan tüm çalışma seçeneklerini içerir. Bir ayarın etkili olup olmadığını anlamanın en güvenilir yolu parsed altındaki değere bakmaktır.

Dış kaynaklı değerler: __rest ve __exec

Parola gibi hassas değerleri dosyaya düz metin olarak yazmak istemiyorsanız MongoDB'nin genişletme yönergelerini (expansion directives) kullanabilirsiniz. __rest bir REST uç noktasından, __exec bir kabuk komutunun çıktısından tek bir ayarı ya da dosyanın tamamını yükler. Bu yönergeleri kullanan bir dosyayla başlatırken --configExpand seçeneğini vermeniz zorunludur; vermezseniz mongod başlamaz.

bash
mongod --config /etc/mongod.conf --configExpand "rest,exec"

Sık yapılan hatalar

  • Girintide sekme kullanmak: YAML girintide sekmeyi desteklemez; girintiyi her zaman boşlukla yapın.
  • bindIp ile bindIpAll'ı birlikte yazmak: mongod hata verip kapanır; yalnızca birini kullanın.
  • Erişim denetimi olmadan 0.0.0.0 dinletmek: Veritabanınız internete açık hale gelir. Önce kullanıcı ve authorization: enabled, sonra güvenlik duvarı, en son bindIp.
  • Paket varsayılanlarını rastgele değiştirmek: dbPath, log yolu ve fork değerleri init betiklerinin beklentisidir.
  • logRotate: reopen verip logAppend'i unutmak: reopen için logAppend: true zorunludur.
  • Değişiklikten sonra yeniden başlatmamak: Dosya yalnızca başlangıçta okunur; çalışma anında değişen parametreleri de dosyaya yazmazsanız yeniden başlatmada kaybolur.
  • Yıldızı tırnaksız yazmak: bindIp: * YAML'da alias olarak yorumlanır; "*" yazın.

Sık Sorulan Sorular

Değişiklikten önce dosyanın geçerli YAML olduğunu nasıl kontrol ederim?

En basit yol değişiklikten sonra servisi yeniden başlatıp systemctl status mongod çıktısına ve log dosyasına bakmaktır. Üretim sunucusunda risk almamak için dosyanın bir kopyasını saklayın, değişikliği yapın ve sorun olursa kopyayı geri koyun. Elinizde bir YAML ayrıştırıcı varsa dosyayı onunla da okutabilirsiniz.

mongod.conf'ta kaç ayar var?

Çok fazla. Bu yazı yalnızca tek sunuculu bir VPS'te en sık dokunulan ayarları kapsar. TLS (net.tls), denetim logu (auditLog), sharding ve şifreleme gibi bölümlerin tamamı resmî yapılandırma sayfasında listelenir.

Windows'ta da aynı dosya mı kullanılır?

Biçim aynıdır, dosya adı ve yeri farklıdır: MSI ile kurulumda kurulum dizini altındaki bin\mongod.cfg kullanılır. processManagement.fork Windows'ta desteklenmez. Ayrıntılar MongoDB Windows kurulumu yazısında.

Bağlantı adresini değiştirdim ama bağlanamıyorum, neden?

Önce getCmdLineOpts ile yeni bindIp değerinin gerçekten etkili olduğunu doğrulayın, sonra güvenlik duvarını ve bağlantı dizesini kontrol edin. Bağlantı dizesi biçimi için MongoDB connection string yazısına bakın.

Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.

İlgili içerikler: MongoDB öğrenme rehberi · Ubuntu kurulumu · Authentication etkinleştirme · Güvenlik kontrol listesi · VPS güvenlik sertleştirme