Puncte:1

Cum să găzduiești o aplicație pentru mai mulți clienți?

drapel cn

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.
drapel ua
Ne pare rău, dar reinventați o aplicație bine implementată. Întrebarea dvs. arată că aveți mult de lucru - mai mult decât să fie discutat într-o singură întrebare aici.
drapel jp
Trebuie să vă uitați la modelul de aplicație Multi-Tenant.
Puncte:0
drapel ar

Probabil ar trebui să căutați o soluție de găzduire în cloud, cum ar fi Azure.

Vă sugerez să analizați containerizarea aplicației dvs. și să o conectați la o bază de date externă pe placul dvs. Azure, AWS și Google acceptă rularea unui container docker cu aplicația dvs. în interior - pentru asta sunt mai mult sau mai puțin concepute containerele.

Puteți să scriptați crearea de resurse în toate serviciile cloud, astfel încât să aveți o configurare simplă cu un singur clic pentru integrare.

Combinat cu un depozit privat pentru imagini docker, acest lucru poate simplifica și actualizarea aplicației, astfel încât întreținerea este mai puțin o durere de cap.

Detaliile exacte despre cum să configurați acest lucru depind în mare măsură de modul în care este structurată aplicația dvs.

PhilHarmonie avatar
drapel cn
Nu știu cum ar arăta containerizarea, dar se pare că unui nou client ia din nou același timp pentru a se pregăti. Mai mult, cum ar fi crearea unui nou subdomeniu și a unei intrări MySQL pentru configurația clienților, este prea mult de făcut pentru o scară. Cu un domeniu wildcard aș putea chiar să evit crearea subdomeniului și este doar o postare în baza mea de date și gata. Dar este aceasta o abordare solidă și de încredere?
vidarlo avatar
drapel ar
Sigur, puteți rula mai mulți clienți pe un container dacă doriți. Dar aș argumenta în favoarea separării clienților pe cât posibil, iar containerizarea poate minimiza timpul de configurare.
PhilHarmonie avatar
drapel cn
Când fiecare aplicație rulează într-un container diferit, toate rulează pe porturi diferite. Astfel, trebuie să mă ocup de maparea subdomeniului și a portului și a config. Este un nivel în plus, de care trebuie să mă ocup, corect?
vidarlo avatar
drapel ar
Depinde. Dacă îl rulați pe un serviciu de furnizori de cloud, ei se vor ocupa de această magie. Dacă rulați cu propria casetă, veți avea nevoie de un proxy invers sau similar în fața acestuia.
PhilHarmonie avatar
drapel cn
Vreau să prefer VPS-ul meu. Pot proxy acolo cu nginx.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.