MongoDB Kimlik Doğrulaması
docker-compose.override.yml dosyasını kullanarak Docker mongodb üzerinde kimlik doğrulamasını ayarlayın
Bu kılavuz, MongoDB için açık kimlik doğrulamasını etkinleştirmemize olanak tanıyan docker-compose.override.yml dosyasının nasıl kullanılacağını gösterecektir.
Geçersiz kılma dosyası hakkında daha fazla bilgi için lütfen şuraya başvurun: Docker Compose Override
Notlar:
- Varsayılan yapılandırma, harici port erişimini engelleyerek güvenli hale getirilmiştir, ancak erişim kimlik bilgileri ile bunu bir adım daha ileriye taşıyabiliriz.
- MongoDB geliştiricilerinin de belirttiği gibi, MongoDB'de kimlik doğrulama oldukça karmaşıktır. Çoğu durum için, özellikle de mevcut LibreChat yapılandırmaları için yeterli olacak basit bir yaklaşım izleyeceğiz. MongoDB kimlik doğrulamasının Docker ile nasıl çalıştığı hakkında daha fazla bilgi edinmek için buraya bakın: https://hub.docker.com/_/mongo/
- Bu kılavuz yalnızca terminal tabanlı kurulum prosedürlerine odaklanmaktadır.
- Belirtilen adımlar Docker Desktop ortamları veya Docker dışı, yerel MongoDB ya da diğer konteyner kurulumları için de geçerli olabilse de, bu senaryolara özel ayrıntılar sağlanmamıştır.
3 temel adım vardır:
- mongodb kapsayıcınız içinde bir yönetici kullanıcısı oluşturun
- Kimlik doğrulamayı etkinleştirin ve "LibreChat" için bir "readWrite" kullanıcısı oluşturun
- MONGO_URI değerini yeni oluşturulan kullanıcı ile yapılandırın
Özet
Bunlar, hızlıca gözden geçirmek veya referans olması için çalıştırmak isteyebileceğiniz tüm gerekli komutlardır:
Örnek
librechat.yaml yapılandırma dosyasını, MongoDB Kimlik Doğrulamasını ve MongoDB veritabanınızı yönetmek için mongo-express kullanan örnek docker-compose.override.yml dosyası:
Yönetici Kullanıcısı Oluşturma
İlk olarak, varsayılan container'ların çalışmasını durdurmalı ve yalnızca mongodb container'ını çalıştırmalıyız.
docker compose downdocker compose up -d mongodbNot:
-dbayrağı, konteyner arka planda çalışırken mevcut terminal örneğinin bağlantısını keser. mongodb günlük çıktılarını görmek isterseniz, bu bayrağı kaldırın ve ayrı bir terminalde devam edin.
Çalıştırdıktan sonra, konteynerin terminaline gireceğiz ve mongosh komutunu çalıştıracağız:
docker exec -it chat-mongodb mongoshAşağıdaki çıktıyı görmelisiniz:
~/LibreChat$ docker exec -it chat-mongodb mongosh
Current Mongosh Log ID: 65bfed36f7d7e3c2b01bcc3d
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.1.1
Using MongoDB: 7.0.4
Using Mongosh: 2.1.1
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
test> İsteğe bağlı: Buradayken, istenirse MongoDB için telemetriyi devre dışı bırakabiliriz; bu, anonim kullanım verilerinin toplanıp periyodik olarak MongoDB'ye gönderilmesidir:
Aşağıdaki komutu çalıştırın.
Notlar:
- Takip eden tüm komutlar, ortamdan (Docker, Linux,
mongoshvb.) bağımsız olarak mevcut terminal oturumunda çalıştırılmalıdır.- Gerçek terminal görünümünü # örnek girdi/çıktı ile veya bazı durumlarda sadece çıktıyı göstererek temsil edeceğim
Komut:
disableTelemetry()Örnek girdi/çıktı:
test> disableTelemetry()
Telemetry is now disabled.Şimdi, yönetici kullanıcımızı oluşturmak için mongodb'nin varsayılan olarak oluşturduğu admin veritabanına erişmemiz gerekiyor:
use admindb admin'e geçildi
Kimlik bilgilerini dilediğiniz gibi değiştirin ve kılavuzun geri kalanı için güvenli kayıtlarınızda saklayın.
Yönetici kullanıcısını oluşturmak için komutu çalıştırın:
db.createUser({ user: "adminUser", pwd: "securePassword", roles: ["userAdminAnyDatabase", "readWriteAnyDatabase"] })"ok" şeklinde bir çıktı görmelisiniz.
Ayrıca show users komutunu çalıştırarak yöneticinin oluşturulduğunu doğrulayabilirsiniz:
admin> show users
[
{
_id: 'admin.adminUser',
userId: UUID('86e90441-b5b7-4043-9662-305540dfa6cf'),
user: 'adminUser',
db: 'admin',
roles: [
{ role: 'userAdminAnyDatabase', db: 'admin' },
{ role: 'readWriteAnyDatabase', db: 'admin' }
],
mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
}
]:warning: Önemli: Veritabanınızı yönetmek için mongo-express kullanıyorsanız, mongo-express servisinin düzgün çalışması için ek izinlere ihtiyacınız vardır:
db.grantRolesToUser("adminUser", ["clusterAdmin", "readAnyDatabase"])exit komutunu çalıştırarak Mongosh/Container Terminal'den çıkın:
admin> exitVe çalışan konteyneri durdurun:
docker compose downKimlik Doğrulamayı Etkinleştirme ve readWrite Erişimine Sahip Bir Kullanıcı Oluşturma
mongodb kapsayıcımız için kimlik doğrulamasını etkinleştirmek üzere şimdi docker-compose.override.yml dosyasını oluşturmalı/düzenlemeliyiz. Başlatmak veya referans almak için bu yapılandırmayı kullanabilirsiniz:
version: '3.4'
services:
api:
volumes:
- ./librechat.yaml:/app/librechat.yaml # Optional for using the librechat config file.
mongodb:
command: mongod --auth # <--- Add this to enable authenticationGeçersiz kılma dosyasını yukarıdaki gibi yapılandırdıktan sonra, mongodb konteynerini tekrar çalıştırın:
docker compose up -d mongodbVe admin kullanıcısı olarak mongosh'a erişin:
docker exec -it chat-mongodb mongosh -u adminUser -p securePassword --authenticationDatabase adminKimliğinizin doğrulandığından emin olun:
db.runCommand({ connectionStatus: 1 })test> db.runCommand({ connectionStatus: 1 })
{
authInfo: {
authenticatedUsers: [ { user: 'adminUser', db: 'admin' } ],
authenticatedUserRoles: [
{ role: 'readWriteAnyDatabase', db: 'admin' },
{ role: 'userAdminAnyDatabase', db: 'admin' }
]
},
ok: 1
}
test>"LibreChat" veritabanına geçiş yapın
Not: MONGO_URI aracılığıyla değiştirmediğiniz sürece bu varsayılan veritabanıdır; varsayılan URI:
MONGO_URI=mongodb://mongodb:27017/LibreChat
use LibreChatŞimdi, "LibreChat" veritabanına okuma/yazma erişimiyle sınırlandırılacak olan Mongo bağlantı dizemiz tarafından kullanılacak gerçek kimlik bilgilerini oluşturacağız. Daha önce olduğu gibi, örneği kendi istediğiniz kimlik bilgileriyle değiştirin:
db.createUser({ user: 'user', pwd: 'userpasswd', roles: [ { role: "readWrite", db: "LibreChat" } ] });
Tekrar bir "ok" çıktısı görmelisiniz.
Kullanıcı oluşturma işlemini show users komutu ile doğrulayabilirsiniz.
exit komutuyla Mongosh/Container Terminal'den tekrar çıkın ve konteyneri kapatın:
exitdocker compose downYeni oluşturulan kullanıcının oluşturulduktan sonra kalıcı olmamasıyla ilgili bir sorun yaşadım. Bunu çözmek için, oluşturulduğundan emin olmak adına adımları basitçe tekrarladım. Kolaylık olması açısından işte adımlar:
docker compose downdocker compose up -d mongodbdocker exec -it chat-mongodb mongosh -u adminUser -p securePassword --authenticationDatabase adminuse LibreChatshow usersdb.createUser({ user: 'user', pwd: 'userpasswd', roles: [ { role: "readWrite", db: "LibreChat" } ] });Hâlâ kalıcı olmuyorsa, tüm konteynerler çalışır durumdayken komutları çalıştırmayı deneyebilirsiniz, ancak LibreChat konteynerinin hata/yeniden deneme durumunda olacağını unutmayın.
Yeni Kimlik Bilgilerini Kullanmak İçin MONGO_URI Değerini Güncelleyin
Son olarak, yeni oluşturduğumuz kimlik bilgilerini içeren bağlantı dizesini docker-compose.override.yml dosyamızdaki api servisinin altına ekliyoruz:
environment:
- MONGO_URI=mongodb://user:userpasswd@mongodb:27017/LibreChatBöylece geçersiz kılma dosyamız artık şu şekilde görünüyor:
version: '3.4'
services:
api:
volumes:
- ./librechat.yaml:/app/librechat.yaml
environment:
- MONGO_URI=mongodb://user:userpasswd@mongodb:27017/LibreChat
mongodb:
command: mongod --authArtık LibreChat veritabanına okuma/yazma erişimiyle başarıyla kimlik doğrulaması yapılmış şekilde docker compose up komutunu çalıştırabilirsiniz.
Başarılı bağlantı örneği:
LibreChat | 2024-02-04 20:59:43 info: Server listening on all interfaces at port 3080. Use http://localhost:3080 to access it
chat-mongodb | {"t":{"$date":"2024-02-04T20:59:53.880+00:00"},"s":"I", "c":"NETWORK", "id":22943, "ctx":"listener","msg":"Connection accepted","attr":{"remote":"192.168.160.4:58114","uuid":{"uuid":{"$uuid":"027bdc7b-a3f4-429a-80ee-36cd172058ec"}},"connectionId":17,"connectionCount":10}}Kimlik doğrulama hataları yaşıyorsanız, 2. Adımın son kısmını tekrar çalıştırın. Neden bu kadar hassas olduğundan emin değilim ancak birkaç denemeden sonra çalışacaktır.
Bu rehber nasıl?