Sto costruendo una app nodejs che vorrei rendere disponibile sotto varie impostazioni dai miei clienti.
Voglio che i miei clienti costruiscano i loro siti web sulla mia app, quindi:
- l'app può essere configurata in modo che i domini "A.com" e "B.com" utilizzino la configurazione "X" dell'app, mentre "C.com" utilizza "Y", ecc.
- Sto pensando di usare i contenitori Kubernetes e Dockers per isolare la versione "X", "Y" ecc della mia app
- Sto anche pensando di usare nginx per reverse-proxy
Ogni dominio avrà i suoi documenti distinti in una collezione mongodb. Perché ho bisogno di un modo per recuperare i dati giusti, sto dando a ciascun dominio un token unico che corrisponda ai loro documenti. Tutti i token vengono anche salvati in mongodb e verranno recuperati all'avvio o aggiornati del mio server (nodejs) al volo. I token verranno salvati su una variabile "app.locals":
- Sto pensando di avere un middleware che grap il dominio da ogni richiesta (req.hostname) e ottenere il token corrispondente
// set locals
app.locals.domainTokens = {};
dopo aver recuperato e assegnato i token, "domainTokens" avrà il seguente aspetto:
app.locals.domainToken = {
"Acom" : "token_1",
"Bcom" " "token_2" // and so on
}
// the middleware
function grabToken(req, res, next) {
var tokens = app.locals.domainToken,
host = req.hostname;
req.params.token = host ? tokens[host] : undefined;
next();
}
Quando i nuovi clienti si registrano, i token saranno assegnati al volo per il loro dominio (i contenitori parlano tra loro, giusto?).
Quindi, in pratica, quando viene effettuata una richiesta per "A.com", il mio middleware imposta il "token" in modo che i documenti mongodb relativi a "A.com" possano essere trovati e inviati al client con la versione "X" in esecuzione della mia app (nginx).
Cosa ne pensi di questo approccio? è pericoloso? una cattiva pratica? hai un suggerimento migliore per implementarlo?
Sto meglio usando un container per dominio? (Dovrei monitorare centinaia di istanze di nodejs invece di 3 o 4)
Inoltre, è possibile configurare dinamicamente un server Nginx?