Bu uygulama, çok kiracılı (multi-tenant) bir yapıya sahiptir. Her bir kiracıya özgü yapılandırmaları yönetmek için StarDB kullanılmıştır.
Çok kiracılı sistemler, tek bir uygulamanın birden fazla kiracıya (müşteri, kullanıcı) hizmet vermesini sağlar. Her bir kiracı kendi verilerini, yapılandırmalarını ve iş süreçlerini yönetebilir. Bu tür sistemler genellikle yazılım hizmet sağlayıcıları tarafından kullanılır ve genellikle paylaşılan bir altyapı üzerine inşa edilir.
Uygulamayı başlatmak için aşağıdaki adımları izleyin:
-
Gereksinimlerin Yüklenmesi
Uygulamayı çalıştırmak için öncelikle aşağıdaki paketlerin yüklü olduğundan emin olun:
npm install express stardb
-
Konfigürasyon ⚙️
Uygulamanın çalışması için her bir kiracıya özgü yapılandırmaları
database.json
dosyasına eklemeniz gerekmektedir. Aşağıdaki gibi bir örnek kullanılabilir:[ { "site": "example.com", "blocked": false, "maintenance": false }, { "site": "example2.com", "blocked": false, "maintenance": true } ]
-
Uygulamanın Başlatılması
Uygulamayı başlatmak için terminalde aşağıdaki komutu çalıştırın:
node app.js
veya
nodemon app.js
-
Test 🧪
Uygulamanın başarıyla çalıştığını doğrulamak için tarayıcınızda
http://localhost
adresine gidin.
Gerçek bir çok kiracılı uygulama için MongoDB gibi bir NoSQL veritabanı kullanılabilir. Her bir kiracıya ait verileri farklı koleksiyonlarda veya aynı koleksiyonda ayrı belgelerde saklayabilirsiniz.
Örneğin, kullanıcıları saklamak için bir User
şeması oluşturabilir ve her bir kullanıcı belgesinde domain
alanını tutabilirsiniz:
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
username: { type: String, required: true },
domain: { type: String, required: true }
});
const User = mongoose.model('User', userSchema);
module.exports = User;
Kullanıcıları domainlerine göre sorgulamak ve getirmek için bir yardımcı fonksiyon ekleyebilirsiniz:
const User = require('./userModel');
// Domain ve kullanıcı adına göre kullanıcıları getirme
async function getUserByDomain({ domain, username }) {
try {
const user = await User.findOne({ domain: domain, username: username });
return user;
} catch (error) {
console.error('Kullanıcı getirilemedi:', error);
throw error;
}
}
module.exports = { getUserByDomain };
Bu fonksiyon, belirli bir domain ve kullanıcı adına sahip olan kullanıcıyı MongoDB'den getirir. Uygulamanın başka yerlerinde bu fonksiyonu kullanarak, istenen domain ve kullanıcı adına sahip kullanıcıyı getirebilirsiniz.
const { getUserByDomain } = require('./userController');
// Örnek: "example.com" domainine ve "Can" kullanıcı adına sahip kullanıcıyı getirme
const user = await getUserByDomain({ domain: "example.com", username: "Can" });
console.log(user);
Bu şekilde, belirli bir domain ve kullanıcı adına sahip olan kullanıcıyı bulmak için kullanabilirsiniz.
Uygulama, aşağıdaki API rotalarını destekler:
GET /
: Ana sayfaya yönlendirir ve kiracının domain adını gösterir.
- Bu örnek uygulama performansı artırmak için basit bir dosya tabanlı veritabanı kullansa da, gerçek bir multi-tenant uygulaması için MongoDB veya Redis gibi veritabanları daha uygun olabilir.
- Her bir kiracıya özgü yapılandırmaları güncellemek veya yeni kiracılar eklemek için
database.json
dosyasını düzenleyebilirsiniz.