MongoDb Notlarım
Docker ile MongoDb kurmak
Varsa cdb adında bir konteyner silinerek başlanabilinir veya farklı bir konteyner adıyla (–-name yeniad) devam edilebilinir.$ docker rm -f cdb
docker run komutu arka planda önce mongo isimli docker yansısını çeker ve ondan bir konteyner oluşturmak için devam eder.Bu aşamayı ikiye bölerek önce$ docker pull mongo
komutuyla mongo isimli docker yansısını/kalıbını (image) kendi bilgisayarımıza çekerek, yereldeki yansıların arasına katabilir ve ardından$ docker run --name cdb --restart=always -d -p 27017:27017 mongo
komutuyla devam ederek konteyner yaratabilirsiniz. Komutun en sonunda yer alan mongo, docker yansı adını bu şekilde bıraktığımızda konteyner ayaklandığında "/usr/local/bin/docker-entrypoint.sh" dosyası ENTRYPOINT olarak çalışacak.
Docker yansısını ayaklandırırken ortam değişkenlerine atayacağımız değerler ile mongodb’nin varsayılan kullanıcıyı oluşturmasını sağlarız.
MongoDb'nin yönetici kullanıcısı ve şifresi
ME_CONFIG_MONGODB_ADMINUSERNAME
ME_CONFIG_MONGODB_ADMINPASSWORDBirlikte kullanılan bu değişkenler yeni bir kullanıcı yaratır ve o kullanıcının şifresini belirler.
MONGO_INITDB_ROOT_USERNAME
MONGO_INITDB_ROOT_PASSWORD
Kullanıcı Doğrulama Mekanizması
mongo --help
ile baktığımızda"--authenticationDatabase"
için tanım şöyledir: user source (defaults to dbname)Kullanıcı kimlik bilgilerinin mongo kabuğunun bağlandığı (
test
) varsayılan veritabanında değil,admin
veritabanında depolanır. Doğrulama yapabilmek içinadmin
veritabanını bağlantı tümcesiyle ya da "--authenticationDatabase" anahtarıyla vermemiz gerekir.
# mongo localhost:27017/admin -u mongoadmin -p secret
mongoHost:mongoPort(default:27017)/kullanıcıBilgileriDoğrulamaVeritabanı
Bulunduğumuz veritabanını getirir:
> db
Aşağıdaki komutla docker konteyner yaratıp içinde mongo uygulamasına bağlanıyoruz.
c:\> docker run -d --name cdb \
--restart=always \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
-e MONGO_INITDB_ROOT_PASSWORD=secret \
mongo
Aşağıdaki komutla localhost:27017 adresini varsayılan olarak bağlantı kurup, varsayılan olarak "test" veri tabanına bağlanırroot@828dba6deea5:/# mongo -u mongoadmin -p secret
MongoDB shell version v4.4.3
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb...
---
> db
test
>Aşağıdaki komutla localhost:27017 adresini varsayılan olarak bağlantı kurup, varsayılan olarak "test" veri tabanına bağlanırroot@828dba6deea5:/# mongo localhost:27017/admin -u mongoadmin -p secret
..connecting to: mongodb://localhost:27017/admin?compressors=disabled&gssapiServiceName=mongodb...
---
> db
admin
>Aşağıdaki komutta bağlanılacak veri tabanı ornekDb ama kullanıcı bilgilerini doğrulayacağı veri tabanı admin.root@828dba6deea5:/# mongo ornekDb \
-u mongoadmin -p secret \
--authenticationDatabase admin
... connecting to: mongodb://127.0.0.1:27017/ornekDb?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
...
---
> db
ornekDb
>
ornekDb
Veri tabanı oluşturulmuş ancak kullanıcı doğrulama için hedef veri tabanı “admin” olmalı. Aşağıdaki bağlantı localhost:27017/ornekDb
bağlantı tümcesinde kullanıcı doğrulama için ornekDb
veri tabanı işaret ediliyor ancak kullanıcı bilgileri admin
veri tabanında olduğu için doğal olarak bağlantı kuramıyor.
Artık kullanıcı doğrulamayı öğrendik. Şimdi MongoDb servisini yetkisiz erişimlere kapatma için --auth
argümanını kullanabiliriz.
$ docker run -d --name cdb \
-e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
-e MONGO_INITDB_ROOT_PASSWORD=secret \
mongo--auth argümanı mongod servisine geçirilirse erişim kontrolü ile başlatılır.$ docker run --name cdb --restart=always -d -p 27017:27017 mongo --auth
Veritabanlarını listele
> db.adminCommand( { listDatabases: 1 } )
Kullanıcı Oluşturma
admin
Veri tabanı bir meta veri tutan veri tabanıdır. Burada tanımlı bilgiler bir uygulamanın verileri değil, MongoDb içinde kullanılan verilerdir. Kullanıcı tanımladığımızda
admin Veritabanına geç
> use adminTanımlı kullanıcıları görmek için:
> db.getUsers()Belirli bir kullanıcı bilgilerini görmek için
> db.getUser("cnrusr")Kullanıcıyı silmek için
> dn.dropUser("cnrusr")Farklı bir kullanıcıyla giriş yapabilmek için:
> db.auth("kullanıcı adı", "şifresi")Veri tabanında kayıtlı kolleksiyonları listeler:
> db.getCollectionNames()
ornekDb veritabanını oluşturmak için use kullanırız
> use ornekDbveritabanı içinde kolleksiyon oluşturduğumuzda kalıcı olacaktır
> db.createCollection("tablo adı")admin veritabanına tanımlı kullanıcıyı oluşturmak
> db.createUser({user:"cem",pwd:"sifre123",roles:[{role: "userAdminAnyDatabase", db:"admin"}, { role:"dbAdmin", db:"ornekDb"} ]})Yarattığımız kullanıcıyla veritabanına tekrar yetkilendirilmek için (mongod hizmeti -auth ile başlatılmış veya /etc/mongod.conf.orig dosyasındaki "security: authorization: enabled" varsa) :> db.auth("cem", "sifre123")
Kolleksiyonu daha ayrıntılı ayarlarla oluşturmak
> db.createCollection("tabloo", { capped : false, autoIndexId : true, size : 6142800, max : 10000 } )
Başlangıçta kullanıcı tanımımızı yapıyor ve docker komutumuzla veri tabanı ve kolleksiyonlar oluşturmak istiyorsak:
$ docker run -d --name cdb \
-e MONGO_INITDB_ROOT_USERNAME=cem \
-e MONGO_INITDB_ROOT_PASSWORD=ccc \
mongo$ docker exec -it cdb# mongo --authenticationDatabase admin -u cem -p ccc ornekDb --eval "db.createCollection('col1'); db.getCollectionNames()"