Am construit o aplicație web cu NextJS pe care o vând b2b, unde utilizatorii (clienții mei) se pot înregistra într-o locație. Își oferă numele și primesc un număr de check-in. Aplicația arată informații legate de client (orele de deschidere, adresă,...)
A doua parte a aplicației este un panou de administrare pentru ca clienții mei să se autentifice și să vadă toate numele și să înregistreze numerele și pot oferi mai multe informații.
Momentan sunt în faza beta și clienții mei sunt companii ale prietenilor, dar aplicația se scalează foarte bine și am nevoie de o abordare mai bună decât următoarea:
- clientul meu cumpără un VPS și un domeniu
- Instalez o stivă LEMP
- Proxy domeniul în nginx la localhost:3000
- Configurez baza de date pentru a stoca clienții
- Copiez rădăcina aplicației mele pe server și o rulez (npm run build && npm run start)
Fac asta pentru fiecare client (în prezent 25). Când există un client nou sau o actualizare a aplicației, este o muncă manuală grea.
Foarte important este că clienții mei clienți nu văd că există alte companii care folosesc aplicația mea.
Ceea ce vreau să realizez acum este următoarea idee și vreau să știu dacă există o abordare mai bună sau dacă aceasta este o bună practică:
- Vreau să mă extind la peste 500 de clienți
- Eu folosesc propriul meu VPS
- Fiecare client primește un subdomeniu al propriului meu domeniu (acest lucru este în regulă pentru clienții mei)
- Clienții mei nu mai au nevoie de servere suplimentare
- Creez un tabel în baza mea de date MySQL cu informații despre client (orele de deschidere, adresa,...)
- În aplicația Nextjs detectez subdomeniul și interog baza de date
- eu am unu tabel pentru clienții înregistrați aferent tabelului de configurare
- eu incep unu instanță a aplicației mele
- Localizez toate subdomeniile în acea instanță
- Clienții mei au unu ecran de conectare de administrator și odată conectat, încarcă datele legate de autentificare (folosind JWT, astfel încât clienții să nu poată obține date de la alți clienți)
- Pentru clienții noi, adaug un nou subdomeniu și un rând MySQL și sunt gata de plecare. Acest lucru este ușor de gestionat și, dacă există o actualizare, îmi actualizez doar o instanță a aplicației.