Takip et

CentOS 7 Üzerine MongoDB Kurulumu: Kapsamlı Bir Rehber

CentOS 7 Üzerine MongoDB Kurulumu: Kapsamlı Bir Rehber Bu makale, CentOS 7 işletim sistemi üzerine MongoDB’nin topluluk sürümünü (Community

CentOS 7 Üzerine MongoDB Kurulumu: Kapsamlı Bir Rehber

Bu makale, CentOS 7 işletim sistemi üzerine MongoDB’nin topluluk sürümünü (Community Edition) adım adım nasıl kuracağınızı, yapılandıracağınızı ve temel güvenlik ayarlarını yapacağınızı detaylı bir şekilde açıklamaktadır. MongoDB, modern uygulamalar için tasarlanmış, esnek ve ölçeklenebilir bir NoSQL veritabanıdır. Doküman tabanlı yapısı sayesinde, geliştiricilere JSON benzeri verileri depolama ve sorgulama konusunda büyük bir esneklik sunar. CentOS 7 ise, sunucu ortamlarında yaygın olarak kullanılan stabil ve güvenilir bir Linux dağıtımıdır. Bu kombinasyon, birçok web uygulaması ve büyük veri projesi için güçlü bir temel oluşturur.

Geleneksel ilişkisel veritabanlarının aksine, MongoDB şemasız bir yapıya sahiptir. Bu, veritabanı yapısını önceden tanımlama zorunluluğu olmadan, farklı türdeki verileri aynı koleksiyonda depolayabileceğiniz anlamına gelir. Bu esneklik, özellikle hızlı geliştirme döngülerine sahip projeler ve veri yapısının zamanla değişebileceği uygulamalar için büyük bir avantajdır. Ölçeklenebilirlik açısından, MongoDB yatay ölçeklendirmeyi (sharding) destekleyerek, büyük veri kümelerini ve yüksek trafikli uygulamaları kolayca yönetmenize olanak tanır. Bu makale boyunca, bu güçlü veritabanı sistemini CentOS 7 sunucunuza sorunsuz bir şekilde entegre etmenizi sağlayacak tüm adımları bulacaksınız.

MongoDB Nedir ve Neden Kullanılır?

MongoDB, açık kaynaklı, doküman tabanlı bir NoSQL veritabanıdır. “NoSQL” terimi, “Not only SQL” (Sadece SQL değil) anlamına gelir ve geleneksel ilişkisel veritabanlarının aksine farklı veri depolama ve erişim modelleri sunan veritabanı sistemlerini ifade eder. MongoDB’de veriler, JSON benzeri BSON (Binary JSON) formatında depolanan “belgeler” (documents) halinde düzenlenir. Bu belgeler, “koleksiyonlar” (collections) adı verilen gruplar içinde saklanır. Koleksiyonlar, ilişkisel veritabanlarındaki tablolara benzetilebilir, ancak MongoDB’nin şemasız yapısı sayesinde aynı koleksiyon içindeki belgeler farklı alanlara ve yapılara sahip olabilir.

MongoDB’nin temel özellikleri ve kullanım nedenleri şunlardır:

  • Esneklik ve Çeviklik: Şemasız yapısı sayesinde, uygulama gereksinimleri değiştikçe veritabanı şemasını kolayca adapte edebilirsiniz. Bu, hızlı geliştirme ve sürekli entegrasyon/dağıtım (CI/CD) ortamları için idealdir.
  • Yüksek Performans: Büyük veri kümeleri üzerinde hızlı okuma ve yazma işlemleri için optimize edilmiştir. Dizinler (indexes) ve sorgu optimizasyonları ile performansı daha da artırmak mümkündür.
  • Yatay Ölçeklenebilirlik: Sharding (parçalama) özelliği sayesinde, veri kümelerini birden fazla sunucuya dağıtarak yatay ölçeklenebilirlik sağlar. Bu, çok büyük veri hacimlerini ve yüksek eş zamanlı kullanıcı yüklerini yönetmek için kritik öneme sahiptir.
  • Yüksek Erişilebilirlik: Replica Set’ler (çoğaltma kümeleri) ile veritabanının yüksek erişilebilirliğini ve veri yedekliliğini garanti eder. Birincil sunucu (primary) arızalandığında, ikincil sunuculardan (secondary) biri otomatik olarak birincil sunucu rolünü üstlenir.
  • Zengin Sorgu Dili: Agregasyon çerçevesi (Aggregation Framework) ve güçlü sorgu operatörleri ile karmaşık veri analizleri ve dönüşümleri yapma imkanı sunar.
  • Geliştirici Dostu: JSON benzeri belgeler ve çeşitli programlama dilleri için kapsamlı sürücüler (drivers) sayesinde geliştiricilerin MongoDB ile çalışması oldukça kolaydır.

MongoDB genellikle aşağıdaki senaryolarda tercih edilir:

  • İçerik Yönetim Sistemleri (CMS) ve Blog Platformları
  • E-ticaret uygulamaları
  • Mobil uygulamaların arka uçları (backend)
  • Gerçek zamanlı analitik uygulamalar
  • IoT (Nesnelerin İnterneti) veri depolama
  • Kullanıcı profilleri ve kişiselleştirme motorları

Ön Gereksinimler

MongoDB kurulumuna başlamadan önce, CentOS 7 sunucunuzun belirli ön gereksinimleri karşıladığından emin olmalısınız. Bu adımlar, kurulum sürecinin sorunsuz ilerlemesini ve sistemin güvenliğini sağlamak için kritik öneme sahiptir.

Sistem Güncelleme

Herhangi bir yazılım kurulumuna başlamadan önce işletim sisteminizin paketlerini güncelleyerek en son güvenlik yamalarına ve yazılım sürümlerine sahip olduğunuzdan emin olmak iyi bir uygulamadır. Bu, potansiyel uyumluluk sorunlarını önler ve sistem kararlılığını artırır.

sudo yum update -y
sudo yum upgrade -y

yum update komutu mevcut paketleri güncellerken, yum upgrade komutu daha kapsamlı bir güncelleme yaparak sistemdeki tüm paketleri en yeni sürümlerine yükseltir. -y bayrağı, tüm sorulara otomatik olarak “evet” yanıtı verilmesini sağlar.

Gerekli Araçların Kurulumu

MongoDB deposunu eklemek ve bazı temel işlemleri gerçekleştirmek için wget gibi araçlara ihtiyacınız olabilir. Çoğu CentOS 7 sisteminde bu araçlar zaten yüklüdür, ancak yüklü değillerse aşağıdaki komutla kurabilirsiniz:

sudo yum install -y wget nano vim
  • wget: Uzak sunuculardan dosya indirmek için kullanılır.
  • nano veya vim: Metin dosyalarını düzenlemek için kullanışlı metin düzenleyicileridir. Bu makalede yapılandırma dosyalarını düzenlemek için bunlardan birini kullanacağız.

Firewall Ayarları

CentOS 7, varsayılan olarak firewalld güvenlik duvarı hizmetini kullanır. MongoDB sunucusuna dışarıdan erişim sağlamak istiyorsanız (örneğin, başka bir makineden bağlanmak için), MongoDB’nin varsayılan portu olan 27017’yi güvenlik duvarından açmanız gerekir. Eğer MongoDB’yi yalnızca yerel sunucuda kullanacaksanız bu adımı atlayabilirsiniz, ancak genel olarak bir güvenlik duvarı kuralı eklemek iyi bir uygulamadır.

sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent
sudo firewall-cmd --reload
  • --zone=public: Kuralın genel ağ bölgesi için geçerli olduğunu belirtir.
  • --add-port=27017/tcp: TCP protokolü üzerinden 27017 numaralı portun açılmasını sağlar.
  • --permanent: Kuralın kalıcı olmasını, yani sistem yeniden başlatıldığında da geçerli olmasını sağlar.
  • --reload: Güvenlik duvarı ayarlarını yeniden yükleyerek değişikliklerin anında etkinleşmesini sağlar.

Bu adımları tamamladıktan sonra, MongoDB kurulumuna geçmeye hazırsınız.

MongoDB Deposu Ekleme

MongoDB, CentOS’un varsayılan depolarında bulunmaz. Bu nedenle, MongoDB’nin kendi resmi deposunu sisteminize eklemeniz gerekir. Bu sayede yum paket yöneticisi aracılığıyla MongoDB paketlerini kolayca kurabilir ve güncelleyebilirsiniz. MongoDB Community Edition’ın en son stabil sürümünü kurmak için aşağıdaki adımları izleyeceğiz.

MongoDB Sürümünü Seçme

MongoDB’nin birden fazla sürümü bulunur. Genellikle en son stabil sürüm tercih edilir. Bu makale yazıldığı sırada en son kararlı sürüm 6.0’dır (veya 7.0 gibi daha yeni sürümler). Hangi sürümü kurmak istediğinize karar vermeniz önemlidir. MongoDB’nin resmi dokümantasyonundan en güncel sürümleri kontrol edebilirsiniz. Genellikle, en yeni sürüm için depo yapılandırması benzerdir, sadece sürüm numarasını değiştirmeniz yeterlidir.

.repo Dosyası Oluşturma ve İçeriği

MongoDB deposunu eklemek için /etc/yum.repos.d/ dizini altında bir .repo dosyası oluşturmalısınız. Bu dosya, yum‘a MongoDB paketlerinin nereden indirileceğini söyler. Aşağıdaki örnekte, MongoDB 6.0 sürümü için bir depo dosyası oluşturulacaktır. Farklı bir sürüm kurmak isterseniz, baseurl içindeki sürüm numarasını (örneğin 6.0) değiştirebilirsiniz.

Bir metin düzenleyici (örneğin nano veya vim) kullanarak mongodb-org-6.0.repo adında bir dosya oluşturun:

sudo nano /etc/yum.repos.d/mongodb-org-6.0.repo

Açılan dosyaya aşağıdaki içeriği yapıştırın:

[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc

Dosyayı kaydedin ve kapatın (Nano için Ctrl+X, Y, Enter).

Bu dosyadaki her bir satırın anlamı şöyledir:

  • [mongodb-org-6.0]: Bu, deponun benzersiz adıdır.
  • name=MongoDB Repository: Deponun insan tarafından okunabilir adıdır.
  • baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/: Paketlerin indirileceği URL’yi belirtir.
    • $releasever: CentOS’un ana sürüm numarasını (örneğin 7) otomatik olarak alır.
    • 6.0: Kurmak istediğiniz MongoDB sürümüdür. Eğer 7.0 kurmak istiyorsanız burayı 7.0 olarak değiştirmelisiniz.
    • x86_64: Sistem mimarisini belirtir.
  • gpgcheck=1: Paketlerin GPG anahtarı ile imzalanıp imzalanmadığını kontrol etmesini sağlar. Bu, indirilen paketlerin bütünlüğünü ve güvenliğini doğrular.
  • enabled=1: Bu deponun yum tarafından kullanılabilir olduğunu belirtir.
  • gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc: Paketleri imzalamak için kullanılan GPG anahtarının URL’sidir.

Depo dosyasını oluşturduktan sonra, yum önbelleğini temizleyerek yeni deponun tanınmasını sağlayabilirsiniz:

sudo yum clean all

Artık yum paket yöneticisi MongoDB paketlerini bulabilir ve kurabilir durumda olmalıdır.

MongoDB Kurulumu

MongoDB deposunu sisteminize ekledikten sonra, yum komutunu kullanarak MongoDB’nin tüm gerekli bileşenlerini kurabilirsiniz. MongoDB Community Edition, mongodb-org meta paketi aracılığıyla kurulur. Bu meta paket, MongoDB sunucusu, kabuk ve diğer yardımcı programları içeren birden fazla paketi içerir.

yum install mongodb-org Komutu

Aşağıdaki komutu çalıştırarak MongoDB Community Edition’ı kurun:

sudo yum install -y mongodb-org

Bu komut, mongodb-org meta paketini ve onun bağımlılıklarını kuracaktır. Kurulacak başlıca paketler şunlardır:

  • mongodb-org-server: MongoDB sunucu daemon’ını (mongod) içerir.
  • mongodb-org-mongos: MongoDB Shard Router’ı içerir (sharding için kullanılır).
  • mongodb-org-shell: MongoDB kabuğunu (mongo) içerir, bu kabuk ile veritabanı ile etkileşim kurabilirsiniz.
  • mongodb-org-tools: MongoDB yardımcı programlarını (örneğin mongodump, mongorestore, mongoimport, mongoexport) içerir.

Kurulum sırasında, yum size paketlerin listesini ve disk alanı kullanımını gösterecektir. -y bayrağı sayesinde herhangi bir onay istenmeden kurulum otomatik olarak tamamlanacaktır.

Kurulum Sonrası Doğrulama

Kurulum tamamlandıktan sonra, MongoDB’nin doğru bir şekilde kurulduğundan emin olmak için birkaç kontrol yapabilirsiniz. Örneğin, mongod ve mongo komutlarının mevcut olup olmadığını kontrol edebilirsiniz:

mongod --version
mongo --version

Bu komutlar, kurulu MongoDB sürümünü ve diğer ilgili bilgileri göstermelidir. Eğer komutlar bulunamazsa veya hata verirse, kurulumda bir sorun olabilir ve adımları tekrar gözden geçirmeniz gerekebilir.

Varsayılan olarak, MongoDB’nin veri dizini /var/lib/mongo ve log dizini /var/log/mongodb olarak ayarlanır. Bu dizinlerin otomatik olarak oluşturulduğunu ve mongod kullanıcısının bunlara erişim izinlerine sahip olduğunu kontrol edebilirsiniz:

ls -ld /var/lib/mongo
ls -ld /var/log/mongodb

Çıktıda genellikle mongod kullanıcısı ve grubunun bu dizinlerin sahibi olduğu görülmelidir. Bu, MongoDB servisinin sorunsuz çalışması için önemlidir.

MongoDB Servisini Yönetme

MongoDB başarıyla kurulduktan sonra, servis yönetimi için systemd kullanacağız. systemd, CentOS 7’de sistem ve servis yöneticisidir ve servisleri başlatma, durdurma, yeniden başlatma ve durumlarını kontrol etme gibi işlemleri kolaylaştırır.

Servisi Başlatma

MongoDB servisini başlatmak için aşağıdaki komutu kullanın:

sudo systemctl start mongod

Bu komut, mongod daemon’ını başlatır ve MongoDB sunucusunun çalışmaya başlamasını sağlar.

Servisi Otomatik Başlatma

Sistemin yeniden başlatılması durumunda MongoDB servisinin otomatik olarak başlamasını sağlamak için aşağıdaki komutu kullanın:

sudo systemctl enable mongod

Bu komut, mongod servisi için bir systemd sembolik bağlantısı oluşturur ve sistem önyüklendiğinde servisin otomatik olarak başlatılmasını garanti eder.

Servis Durumunu Kontrol Etme

MongoDB servisinin çalışıp çalışmadığını, durumunu ve son log mesajlarını kontrol etmek için aşağıdaki komutu kullanın:

sudo systemctl status mongod

Çıktıda Active: active (running) ifadesini görmeniz, servisin başarılı bir şekilde çalıştığı anlamına gelir. Ayrıca, servisin PID’si (Process ID), bellek kullanımı ve son log girdileri gibi faydalı bilgiler de gösterilir.

Servisi Durdurma ve Yeniden Başlatma

Herhangi bir yapılandırma değişikliği yaptıktan sonra veya sorun giderme amacıyla servisi durdurmanız veya yeniden başlatmanız gerekebilir:

  • Servisi Durdurma:
    sudo systemctl stop mongod

    Bu komut, MongoDB sunucusunu güvenli bir şekilde kapatır.

  • Servisi Yeniden Başlatma:
    sudo systemctl restart mongod

    Bu komut, servisi durdurur ve ardından tekrar başlatır. Yapılandırma dosyalarında yaptığınız değişikliklerin etkinleşmesi için genellikle servisi yeniden başlatmanız gerekir.

Bu komutlarla MongoDB servisinin yaşam döngüsünü kolayca yönetebilirsiniz. Servisin düzgün çalıştığından emin olmak için her zaman systemctl status mongod komutunu kullanmayı unutmayın.

MongoDB Yapılandırması (Configuration)

MongoDB’nin davranışını ve çalışma şeklini özelleştirmek için yapılandırma dosyalarını düzenlemeniz gerekir. Varsayılan yapılandırma dosyası CentOS 7’de /etc/mongod.conf konumundadır. Bu dosya, YAML formatında yazılmıştır ve çeşitli ayarları içerir. Bu bölümde, en önemli yapılandırma parametrelerini inceleyeceğiz ve gerektiğinde nasıl değiştireceğinizi göstereceğiz.

Yapılandırma dosyasını bir metin düzenleyici ile açın:

sudo nano /etc/mongod.conf

İşte /etc/mongod.conf dosyasında sıkça karşılaşılan ve ayarlanması gerekebilecek bazı bölümler:

systemLog Bölümü

Bu bölüm, MongoDB’nin log (günlük) dosyalarının nerede tutulacağını ve nasıl kaydedileceğini belirler.

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
  • destination: file: Logların bir dosyaya yazılacağını belirtir. Diğer seçenek syslog olabilir.
  • logAppend: true: Mevcut log dosyasının üzerine yazmak yerine, yeni logların dosyanın sonuna eklenmesini sağlar. Bu, eski log verilerini korumak için önemlidir.
  • path: /var/log/mongodb/mongod.log: Log dosyasının tam yolunu belirtir. Bu varsayılan değer genellikle uygun olacaktır.

storage Bölümü

Bu bölüm, MongoDB’nin veri dosyalarını nerede depolayacağını ve depolama motorunu belirler.

storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true

engine: wiredTiger

  • dbPath: /var/lib/mongo: MongoDB’nin tüm veri dosyalarını (koleksiyonlar, indeksler vb.) depolayacağı dizini belirtir. Bu dizini farklı bir konuma taşımak isterseniz, yeni dizini oluşturmanız ve mongod kullanıcısına gerekli izinleri vermeniz gerekir.
  • journal.enabled: true: Günlükleme (journaling) özelliğinin etkin olduğunu belirtir. Günlükleme, beklenmedik kapanmalar durumunda veri bütünlüğünü sağlamak için önemlidir ve varsayılan olarak etkindir.
  • engine: wiredTiger: MongoDB 3.2 ve sonraki sürümlerinde varsayılan depolama motoru WiredTiger’dır. Genellikle bu ayarı değiştirmeye gerek yoktur.

processManagement Bölümü

Bu bölüm, MongoDB işleminin yönetimiyle ilgili ayarları içerir.

processManagement:
  fork: true
  pidFilePath: /var/run/mongodb/mongod.pid
  • fork: true: MongoDB’nin arka planda bir daemon olarak çalışmasını sağlar. Bu, systemd ile yönetilirken genellikle otomatik olarak ayarlanır.
  • pidFilePath: /var/run/mongodb/mongod.pid: MongoDB sürecinin PID (Process ID) numarasını içeren dosyanın yolunu belirtir.

net Bölümü

Bu bölüm, MongoDB’nin ağ bağlantılarıyla ilgili ayarlarını içerir. Burası en sık değiştirilen bölümlerden biridir.

net:
  port: 27017
  bindIp: 127.0.0.1
  • port: 27017: MongoDB’nin dinleyeceği port numarasını belirtir. Varsayılan port 27017’dir.
  • bindIp: 127.0.0.1: MongoDB’nin hangi IP adresleri üzerinden gelen bağlantıları kabul edeceğini belirtir.
    • 127.0.0.1 (varsayılan): Yalnızca yerel makineden (sunucunun kendisinden) gelen bağlantıları kabul eder. Bu, en güvenli ayardır ve MongoDB’ye dışarıdan erişim gerekmiyorsa bu şekilde bırakılmalıdır.
    • 0.0.0.0: Tüm ağ arayüzlerinden gelen bağlantıları kabul eder. Bu ayar, MongoDB’ye dışarıdan erişim sağlamak için gereklidir ancak güvenlik riskleri taşır. Bu durumda, güvenlik duvarı kurallarının doğru yapılandırıldığından emin olmalısınız.
    • 192.168.1.100, 10.0.0.5: Belirli IP adreslerinden gelen bağlantıları kabul eder. Daha güvenli bir uzaktan erişim sağlamak için belirli istemci IP adreslerini veya ağları virgülle ayırarak listeleyebilirsiniz.

    Eğer MongoDB’ye uzaktan erişim sağlamak istiyorsanız ve güvenlik duvarı ayarlarını yaptıysanız, bindIp değerini sunucunuzun dışarıdan erişilebilir IP adresine veya 0.0.0.0 olarak değiştirmelisiniz. Örneğin, tüm arayüzlerden erişime izin vermek için:

    net:
              port: 27017
              bindIp: 0.0.0.0

    UYARI: bindIp: 0.0.0.0 ayarını yaparsanız, sunucunuzun güvenlik duvarının 27017 portunu yalnızca güvenilir IP adreslerine açtığından veya başka güvenlik önlemleri aldığınızdan (örneğin kimlik doğrulama) emin olun. Aksi takdirde, veritabanınız internete açık ve savunmasız kalabilir.

security Bölümü

Bu bölüm, MongoDB’nin güvenlik ayarlarını içerir. En önemli ayar, kimlik doğrulamanın (authentication) etkinleştirilmesidir.

security:
  authorization: enabled
  • authorization: enabled: Bu ayarı etkinleştirmek, MongoDB’ye bağlanmak için kullanıcı adı ve parola gerektirecektir. Bu, üretim ortamlarında kesinlikle önerilen bir güvenlik önlemidir. Varsayılan olarak bu ayar yorum satırı halindedir veya disabled durumundadır, yani kimlik doğrulama olmadan herkes bağlanabilir.

Yapılandırma dosyasında değişiklik yaptıktan sonra, dosyayı kaydedin ve MongoDB servisini yeniden başlatın ki değişiklikler etkinleşsin:

sudo systemctl restart mongod
sudo systemctl status mongod

Servisin sorunsuz bir şekilde yeniden başladığından emin olun. Herhangi bir hata durumunda, log dosyalarını (/var/log/mongodb/mongod.log) kontrol ederek sorunun kaynağını belirleyebilirsiniz.

MongoDB Güvenliği

MongoDB’nin güvenliğini sağlamak, üretim ortamlarında veri bütünlüğü ve gizliliği için kritik öneme sahiptir. Güvenlik, yalnızca veritabanı sunucusunun kendisiyle ilgili değil, aynı zamanda sunucunun çalıştığı işletim sistemi ve ağ ortamıyla da ilgilidir. İşte MongoDB kurulumunuzu güvence altına almak için atmanız gereken temel adımlar:

Firewall (Güvenlik Duvarı) Ayarları

Daha önce de belirtildiği gibi, güvenlik duvarı, sunucunuza gelen ve giden ağ trafiğini kontrol eden ilk savunma hattıdır. MongoDB’nin varsayılan portu 27017’dir. Bu portu yalnızca güvenilir kaynaklardan gelen bağlantılara açmalısınız.

  • Yalnızca Yerel Erişim: Eğer MongoDB’ye yalnızca sunucunun kendisinden erişilecekse (örneğin, aynı sunucuda çalışan bir uygulama), 27017 portunu güvenlik duvarında açmaya gerek yoktur. Ayrıca, /etc/mongod.conf dosyasındaki bindIp ayarını 127.0.0.1 olarak bırakın.
  • Belirli IP Adreslerinden Erişim: Eğer belirli bir IP adresinden veya IP aralığından erişim gerekiyorsa, güvenlik duvarında bu IP adreslerine izin verin.
    sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="27017" protocol="tcp" accept' --permanent
    sudo firewall-cmd --reload

    Bu örnek, 192.168.1.0/24 ağına 27017 portu üzerinden erişim izni verir. bindIp ayarını da sunucunuzun dış IP adresine veya 0.0.0.0 olarak değiştirmelisiniz.

  • Tüm IP Adreslerinden Erişim (Kaçının!): bindIp: 0.0.0.0 ayarını yapmak ve güvenlik duvarında 27017 portunu herkese açmak, veritabanınızı internete tamamen açık hale getirir ve ciddi güvenlik riskleri oluşturur. Bu, yalnızca test ortamlarında veya çok sıkı ağ kısıtlamaları altındaki özel durumlarda düşünülmelidir.

Yetkilendirme (Authentication) Etkinleştirme

MongoDB’ye bağlanmak için kullanıcı adı ve parola gereksinimini etkinleştirmek, en önemli güvenlik adımlarından biridir. Varsayılan olarak, MongoDB kimlik doğrulama olmadan çalışır, bu da herkesin veritabanına bağlanabileceği anlamına gelir. Yetkilendirme etkinleştirildiğinde, kullanıcıların belirli roller ve izinlerle oluşturulması gerekir.

1. Yönetici Kullanıcı Oluşturma

Kimlik doğrulamayı etkinleştirmeden önce, bir yönetici kullanıcısı oluşturmanız gerekir. Aksi takdirde, kimlik doğrulama etkinleştirildikten sonra veritabanına erişemezsiniz.

İlk olarak, mongod.conf dosyasında security.authorization ayarı devre dışı bırakılmışken (veya yorum satırı halindeyken) MongoDB’ye bağlanın:

mongo

Ardından, admin veritabanına geçin ve yönetici kullanıcınızı oluşturun:

use admin
db.createUser(
   {
     user: "adminUser",
     pwd: passwordPrompt(), // Parolayı güvenli bir şekilde girmenizi sağlar
     roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
   }
)
  • user: "adminUser": Oluşturacağınız kullanıcının adı.
  • pwd: passwordPrompt(): Parolayı komut satırından güvenli bir şekilde girmenizi ister.
  • roles: Kullanıcının sahip olacağı rolleri tanımlar.
    • userAdminAnyDatabase: Tüm veritabanları üzerinde kullanıcıları ve rolleri yönetme yetkisi verir.
    • readWriteAnyDatabase: Tüm veritabanları üzerinde okuma ve yazma yetkisi verir.

Kullanıcı oluşturulduktan sonra exit yazarak mongo kabuğundan çıkın.

2. mongod.conf Dosyasında Yetkilendirmeyi Etkinleştirme

Şimdi /etc/mongod.conf dosyasını açın ve security bölümünün altındaki authorization ayarını etkinleştirin:

sudo nano /etc/mongod.conf

Aşağıdaki satırı bulun ve yorum işaretini kaldırın veya ekleyin:

security:
  authorization: enabled

Dosyayı kaydedin ve kapatın.

3. Servisi Yeniden Başlatma

Değişikliklerin etkinleşmesi için MongoDB servisini yeniden başlatın:

sudo systemctl restart mongod
4. Kullanıcı ile Bağlanma

Artık MongoDB’ye bağlanmak için oluşturduğunuz yönetici kullanıcısını kullanmanız gerekecek:

mongo -u adminUser -p --authenticationDatabase admin
  • -u adminUser: Kullanıcı adını belirtir.
  • -p: Parola girmenizi ister.
  • --authenticationDatabase admin: Kullanıcının hangi veritabanında tanımlandığını belirtir (bu durumda admin veritabanı).

Doğru parolayı girdikten sonra mongo kabuğuna başarıyla bağlanmalısınız. Eğer bağlanamazsanız, log dosyalarını kontrol edin ve kullanıcı adı/parola veya yapılandırma ayarlarınızı gözden geçirin.

IP Kısıtlamaları (bindIp)

/etc/mongod.conf dosyasındaki net.bindIp ayarı, MongoDB’nin hangi ağ arayüzlerinden bağlantıları kabul edeceğini belirler. Bu ayarı doğru yapılandırmak, yetkisiz erişimi engellemek için güvenlik duvarı ayarlarıyla birlikte çalışır. Varsayılan olarak 127.0.0.1 (localhost) olarak ayarlanmıştır, bu da yalnızca aynı sunucu üzerindeki uygulamaların bağlanabileceği anlamına gelir. Uzaktan erişim gerekiyorsa, bu değeri belirli IP adreslerine veya ağlara kısıtlayın.

SSL/TLS Kullanımı

Üretim ortamlarında, MongoDB istemcileri ile sunucu arasındaki iletişimi şifrelemek için SSL/TLS kullanılması şiddetle tavsiye edilir. Bu, ağ üzerinden gönderilen hassas verilerin dinlenmesini (eavesdropping) önler. SSL/TLS yapılandırması, sertifika yetkilileri, sertifikalar ve anahtarlar gerektirdiğinden daha karmaşık bir konudur ve bu makalenin kapsamı dışındadır. Ancak, ciddi bir güvenlik önlemi olarak aklınızda bulundurmalısınız.

MongoDB’ye Bağlanma ve Temel İşlemler

MongoDB’yi kurup temel güvenlik ayarlarını yaptıktan sonra, veritabanı ile etkileşim kurmaya başlayabilirsiniz. MongoDB, etkileşimli bir JavaScript kabuğu olan mongo ile gelir. Bu kabuk, veritabanı üzerinde CRUD (Create, Read, Update, Delete) işlemleri yapmanıza ve yönetim görevlerini gerçekleştirmenize olanak tanır.

mongo Kabuğu ile Bağlanma

Eğer kimlik doğrulama etkin değilse, doğrudan bağlanabilirsiniz:

mongo

Eğer kimlik doğrulama etkinse, kullanıcı adı ve parola ile bağlanmanız gerekir (önceki bölümde oluşturduğumuz adminUser ile örnek):

mongo -u adminUser -p --authenticationDatabase admin

Başarılı bir şekilde bağlandığınızda, > ile başlayan bir komut istemi göreceksiniz.

Veritabanı Oluşturma/Seçme

MongoDB’de bir veritabanı oluşturmak için use komutunu kullanmanız yeterlidir. Eğer belirtilen veritabanı yoksa, otomatik olarak oluşturulur. Örneğin, mydatabase adında bir veritabanı oluşturmak veya seçmek için:

use mydatabase

Hangi veritabanında olduğunuzu kontrol etmek için:

db

Mevcut veritabanlarını listelemek için (içinde en az bir koleksiyon ve belge olan veritabanları görünür):

show dbs

Koleksiyon Oluşturma

MongoDB’de koleksiyonlar, veritabanına ilk belge eklendiğinde otomatik olarak oluşturulur. Ancak, isterseniz createCollection() metodunu kullanarak da açıkça bir koleksiyon oluşturabilirsiniz:

db.createCollection("users")

Mevcut koleksiyonları listelemek için:

show collections

Belge Ekleme (Create)

Koleksiyonlara belge eklemek için insertOne() veya insertMany() metodlarını kullanabilirsiniz.

  • Tek Belge Ekleme:
    db.users.insertOne(
               {
                 name: "Ali Can",
                 age: 30,
                 email: "ali.can@example.com",
                 status: "active"
               }
            )
  • Birden Fazla Belge Ekleme:
    db.users.insertMany([
               {
                 name: "Ayşe Yılmaz",
                 age: 25,
                 email: "ayse.yilmaz@example.com",
                 status: "active"
               },
               {
                 name: "Mehmet Demir",
                 age: 35,
                 email: "mehmet.demir@example.com",
                 status: "inactive"
               }
            ])

Belge Sorgulama (Read)

Koleksiyonlardaki belgeleri sorgulamak için find() metodunu kullanabilirsiniz. find() metoduna sorgu kriterleri belirterek belirli belgeleri filtreleyebilirsiniz.

  • Tüm Belgeleri Sorgulama:
    db.users.find()

    Okunabilir bir formatta görmek için pretty() metodunu ekleyebilirsiniz:

    db.users.find().pretty()
  • Belirli Kriterlere Göre Sorgulama:
    db.users.find({ age: { $gt: 28 }, status: "active" }).pretty()

    Bu sorgu, yaşı 28’den büyük ve durumu “active” olan kullanıcıları getirir.

  • Tek Belge Sorgulama:
    db.users.findOne({ name: "Ali Can" })

    Bu, belirtilen kritere uyan ilk belgeyi getirir.

Belge Güncelleme (Update)

Belgeleri güncellemek için updateOne() veya updateMany() metodlarını kullanabilirsiniz.

  • Tek Belge Güncelleme:
    db.users.updateOne(
               { name: "Ali Can" },
               { $set: { age: 31, status: "pending" } }
            )

    Bu, adı “Ali Can” olan ilk belgenin age ve status alanlarını günceller.

  • Birden Fazla Belge Güncelleme:
    db.users.updateMany(
               { status: "inactive" },
               { $set: { status: "archived" } }
            )

    Bu, durumu “inactive” olan tüm belgelerin status alanını “archived” olarak günceller.

Belge Silme (Delete)

Belgeleri silmek için deleteOne() veya deleteMany() metodlarını kullanabilirsiniz.

  • Tek Belge Silme:
    db.users.deleteOne({ name: "Mehmet Demir" })

    Bu, adı “Mehmet Demir” olan ilk belgeyi siler.

  • Birden Fazla Belge Silme:
    db.users.deleteMany({ status: "archived" })

    Bu, durumu “archived” olan tüm belgeleri siler.

  • Tüm Belgeleri Silme (Koleksiyonu Boşaltma):
    db.users.deleteMany({})

    Boş bir filtre ile deleteMany(), koleksiyondaki tüm belgeleri siler.

Kullanıcı Listeleme, Rol Atama

Yönetimsel görevler için, admin veritabanında kullanıcıları listeleme ve rollerini yönetme işlemleri de yapabilirsiniz. Örneğin, mevcut kullanıcıları listelemek için:

use admin
db.getUsers()

Bu temel işlemler, MongoDB ile çalışmaya başlamanız için yeterlidir. Daha karmaşık sorgular ve yönetim görevleri için MongoDB’nin resmi dokümantasyonuna başvurabilirsiniz.

MongoDB’yi Kaldırma (İsteğe Bağlı)

Eğer MongoDB’yi sisteminizden kaldırmak isterseniz, bu adımları takip edebilirsiniz. Bu, test ortamlarını temizlemek veya farklı bir sürümü kurmak istediğinizde faydalı olabilir.

Servisi Durdurma

İlk olarak, MongoDB servisini durdurun ve otomatik başlatılmasını devre dışı bırakın:

sudo systemctl stop mongod
sudo systemctl disable mongod

Paketleri Kaldırma

MongoDB paketlerini sisteminizden kaldırmak için yum remove komutunu kullanın:

sudo yum remove -y mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools

Veya tüm mongodb-org paketlerini tek bir komutla kaldırmak için:

sudo yum remove -y mongodb-org*

Bu komut, MongoDB ile ilgili tüm kurulu paketleri kaldıracaktır. -y bayrağı, onay istemeden kaldırma işlemini tamamlar.

Veri Dizinlerini Silme

Paketleri kaldırmak, veri dizinlerini ve log dosyalarını otomatik olarak silmez. Bu dizinler, daha sonra tekrar MongoDB kurmak isterseniz eski verilerinizi korumak için bırakılır. Eğer tüm verileri ve logları da silmek istiyorsanız, bunları manuel olarak kaldırmanız gerekir:

sudo rm -rf /var/lib/mongo
sudo rm -rf /var/log/mongodb

DİKKAT: Bu komutlar, MongoDB’nin tüm veri ve log dosyalarını kalıcı olarak silecektir. Bu işlemi yapmadan önce önemli verilerinizin yedeğini aldığınızdan emin olun.

Depo Dosyasını Silme

Son olarak, daha önce eklediğiniz MongoDB depo dosyasını da kaldırmak isteyebilirsiniz:

sudo rm /etc/yum.repos.d/mongodb-org-6.0.repo

Bu adımları tamamladıktan sonra MongoDB, CentOS 7 sisteminizden tamamen kaldırılmış olacaktır.

Sorun Giderme (Troubleshooting)

MongoDB kurulumu ve yapılandırması sırasında çeşitli sorunlarla karşılaşmak mümkündür. İşte sık karşılaşılan sorunlar ve olası çözümleri:

Servis Başlatılamıyor

MongoDB servisi (mongod) başlatılamıyorsa, ilk yapmanız gereken log dosyalarını kontrol etmektir. Log dosyaları, sorunun nedenini anlamanıza yardımcı olacak önemli bilgiler içerir.

sudo systemctl status mongod
sudo journalctl -u mongod --since "5 minutes ago"
sudo tail -f /var/log/mongodb/mongod.log

Sık karşılaşılan nedenler:

  • Yapılandırma Dosyası Hatası: /etc/mongod.conf dosyasında YAML formatında bir hata (örneğin, yanlış girinti, eksik karakter) olabilir. YAML formatının boşluklara karşı hassas olduğunu unutmayın.
  • Veri Dizini İzinleri: /var/lib/mongo veya /var/log/mongodb dizinlerinin mongod kullanıcısı için doğru izinlere sahip olmaması. sudo chown -R mongod:mongod /var/lib/mongo /var/log/mongodb komutuyla izinleri düzeltebilirsiniz.
  • Port Çakışması: MongoDB’nin dinlemeye çalıştığı 27017 portunun başka bir servis tarafından kullanılıyor olması. sudo netstat -tulnp | grep 27017 komutuyla kontrol edebilirsiniz.
  • Disk Alanı Sorunu: Veri dizininin bulunduğu disk bölümünde yeterli boş alan olmaması.

Bağlantı Sorunları (Firewall, bindIp)

MongoDB’ye uzaktan bağlanamıyorsanız, genellikle ağ veya yapılandırma sorunları vardır:

  • Firewall Engeli: CentOS 7 sunucunuzdaki güvenlik duvarının (firewalld) 27017 portunu kapatmış olması. Daha önce belirtildiği gibi, portu açtığınızdan ve güvenlik duvarını yeniden yüklediğinizden emin olun.
    sudo firewall-cmd --list-all

    komutuyla mevcut kuralları kontrol edebilirsiniz.

  • bindIp Ayarı: /etc/mongod.conf dosyasındaki net.bindIp ayarının yanlış olması. Eğer uzaktan erişim gerekiyorsa, bu değeri 0.0.0.0 veya belirli bir IP adresine ayarladığınızdan emin olun. Değişiklikten sonra servisi yeniden başlatmayı unutmayın.
  • Ağ Bağlantısı: İstemci makinenizin sunucuya ağ üzerinden erişebildiğinden emin olun (ping testi yapabilirsiniz).

Yetkilendirme Hataları

Kimlik doğrulama etkinleştirildiğinde bağlanma sorunları yaşıyorsanız:

  • Yanlış Kullanıcı Adı/Parola: En yaygın neden. Kullanıcı adı ve parolanın doğru olduğundan emin olun.
  • Yanlış authenticationDatabase: mongo kabuğu ile bağlanırken --authenticationDatabase parametresini doğru veritabanına (genellikle admin) ayarladığınızdan emin olun.
Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.