1 votes

Comment héberger une application pour plusieurs clients ?

J'ai construit une application web avec NextJS que je vends en B2B, où les utilisateurs (les clients de mes clients) peuvent s'enregistrer dans un lieu. Ils fournissent leur nom et obtiennent un numéro d'enregistrement. L'application montre les informations relatives au client (heures d'ouverture, adresse, ).

La deuxième partie de l'application est un panneau d'administration permettant à mes clients de se connecter et de voir tous les noms et les numéros d'enregistrement et de fournir plus d'informations.

Actuellement, je suis en phase bêta et mes clients sont des entreprises d'amis, mais l'application se développe très bien et j'ai besoin d'une meilleure approche que la suivante :

  • mon client achète un VPS et un domaine
  • J'installe une pile LEMP
  • J'utilise un proxy pour le domaine dans nginx vers localhost:3000.
  • Je configure la base de données pour stocker les clients
  • Je copie la racine de mon application sur le serveur et je la lance (npm run build && npm run start).

Je fais cela pour chaque client (actuellement 25). Quand il y a un nouveau client, ou une mise à jour de l'application, c'est un travail manuel difficile. Il est très important que les clients de mes clients ne voient pas que d'autres entreprises utilisent mon application.

Ce que je veux accomplir maintenant est l'idée suivante et je veux savoir s'il existe une meilleure approche ou si c'est une bonne pratique :

  • Je veux passer à plus de 500 clients
  • J'utilise mon propre VPS
  • Chaque client obtient un sous-domaine de mon propre domaine (cela convient à mes clients).
  • Mes clients n'ont plus besoin de serveurs supplémentaires
  • Je crée une table dans ma base de données MySQL avec les informations sur le client (heures d'ouverture, adresse, ).
  • Dans l'application Nextjs, je détecte le sous-domaine et interroge ma base de données.
  • J'ai un pour les clients enregistrés liés à la table de configuration.
  • Je commence un instance de mon application
  • Je localise tous les sous-domaines dans cette seule instance.
  • Mes clients ont un écran de connexion de l'administrateur et, une fois connecté, chargement des données liées à la connexion (en utilisant JWT pour que les clients ne puissent pas obtenir de données d'autres clients).
  • Pour les nouveaux clients, j'ajoute simplement un nouveau sous-domaine et une ligne MySQL et ils sont prêts à partir. C'est facile à gérer et s'il y a une mise à jour, il me suffit de mettre à jour mon unique instance de l'application.

0 votes

Désolé, mais vous êtes en train de réinventer une application bien mise en œuvre. Votre question montre que vous avez beaucoup de travail à faire - plus que ce qui peut être discuté dans une seule question ici.

0 votes

Vous devez vous pencher sur le modèle d'application Multi-Tenant.

0voto

vidarlo Points 3169

Vous devriez probablement envisager une solution d'hébergement en nuage, telle qu'Azure.

Je vous suggère d'envisager de conteneuriser votre application et de la relier à une base de données externe de votre choix. Azure, AWS et Google prennent tous en charge l'exécution d'un conteneur docker avec votre application à l'intérieur - c'est plus ou moins ce pour quoi les conteneurs sont faits.

Vous pouvez script la création de ressources dans tous les services de cloud, de sorte que vous pouvez avoir une configuration simple en 1 clic pour l'onboarding.

Combiné à un dépôt privé pour les images Docker, cela peut également rationaliser la mise à jour de l'application, de sorte que la maintenance est moins un casse-tête.

Les détails exacts de cette mise en place dépendent largement de la structure de votre application.

0 votes

Je ne sais pas à quoi ressemble la conteneurisation, mais il semble qu'un nouveau client ait besoin du même temps pour être prêt. Tout ce qui est de l'ordre de la création d'un nouveau sous-domaine et d'une entrée MySQL pour la configuration des clients est trop lourd à faire pour une échelle. Avec un wildcard domain, je pourrais même éviter la création d'un sous-domaine et il suffirait d'envoyer un message à ma base de données et le tour serait joué. Mais est-ce une approche solide et fiable ?

0 votes

Bien sûr, vous pouvez faire fonctionner plusieurs clients sur un seul conteneur si vous le souhaitez. Mais je suis partisan de séparer les clients autant que possible, et la conteneurisation peut minimiser le temps d'installation.

0 votes

Lorsque chaque application s'exécute dans un conteneur différent, elles s'exécutent toutes sur des ports différents. Je dois donc m'occuper du mappage du sous-domaine, du port et de la configuration. C'est un niveau de plus dont je dois m'occuper, n'est-ce pas ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X