Рейтинг:1

Как разместить приложение для нескольких клиентов?

флаг cn

Я создал веб-приложение с NextJS, которое я продаю b2b, где пользователи (мои клиенты-клиенты) могут регистрироваться в определенном месте. Они сообщают свое имя и получают регистрационный номер. Приложение показывает информацию о клиенте (часы работы, адрес,…)

Вторая часть приложения — это панель администратора, с помощью которой мои клиенты могут войти в систему, увидеть все имена и проверить номера и предоставить дополнительную информацию.

В настоящее время я нахожусь на стадии бета-тестирования, и моими клиентами являются компании друзей, но приложение очень хорошо масштабируется, и мне нужен лучший подход, чем следующий:

  • мой клиент покупает VPS и домен
  • Я устанавливаю стек LEMP
  • Проксирую домен в nginx на localhost:3000
  • Я настраиваю базу данных для хранения клиентов
  • Я копирую корень своего приложения на сервер и запускаю его (npm run build && npm run start)

Я делаю это для каждого клиента (в настоящее время 25). Когда появляется новый клиент или обновляется приложение, это тяжелая ручная работа. Очень важно, чтобы мои клиенты не видели, что мое приложение используют другие компании.

Сейчас я хочу реализовать следующую идею, и я хочу знать, есть ли лучший подход или это хорошая практика:

  • Я хочу масштабироваться до 500+ клиентов
  • Я использую свой собственный VPS
  • Каждый клиент получает поддомен моего собственного домена (это нормально для моих клиентов)
  • Моим клиентам больше не нужны дополнительные серверы
  • Я создаю таблицу в своей базе данных MySQL с информацией о клиенте (часы работы, адрес,…)
  • В приложении Nextjs я обнаруживаю поддомен и запрашиваю свою базу данных.
  • У меня есть один таблица для зарегистрированных клиентов, связанных с таблицей конфигурации
  • Я начал один экземпляр моего приложения
  • Я нахожу все поддомены в этом экземпляре
  • У моих клиентов есть один экран входа администратора, и после входа в систему они загружают данные, связанные с входом в систему (используя JWT, чтобы клиенты не могли получать данные от других клиентов)
  • Для новых клиентов я просто добавляю новый поддомен и одну строку MySQL, и они готовы к работе. Этим легко управлять, и если есть обновление, я просто обновляю свой единственный экземпляр приложения.
флаг ua
Извините, но вы заново изобретаете хорошо реализованное приложение. Ваш вопрос показывает, что вам предстоит проделать большую работу - больше, чем можно обсудить здесь в одном вопросе.
флаг jp
Вам нужно изучить шаблон многопользовательского приложения.
Рейтинг:0
флаг ar

Вероятно, вам следует изучить решение для облачного хостинга, такое как Azure.

Я бы посоветовал изучить контейнеризацию вашего приложения и связать его с внешней базой данных по вашему вкусу. Azure, AWS и Google поддерживают запуск док-контейнера с вашим приложением внутри — это более или менее то, для чего созданы контейнеры.

Вы можете создать сценарий для создания ресурса во всех облачных службах, чтобы вы могли выполнить простую настройку одним щелчком мыши для адаптации.

В сочетании с частным репозиторием для образов Docker это также может упростить обновление приложения, поэтому обслуживание становится менее головной болью.

Точные детали того, как это настроить, во многом зависят от того, как структурировано ваше приложение.

PhilHarmonie avatar
флаг cn
Я не знаю, как будет выглядеть контейнеризация, но похоже, что новому клиенту снова требуется то же время, чтобы подготовиться. Все, что больше похоже на создание нового поддомена и запись MySQL для конфигурации клиентов, слишком сложно для масштабирования. С подстановочным доменом я мог бы даже избежать создания поддомена, и это просто публикация в моей базе данных и готово. Но является ли это солидным надежным подходом?
vidarlo avatar
флаг ar
Конечно, вы можете запускать несколько клиентов в одном контейнере, если хотите. Но я бы высказался за максимально возможное разделение клиентов, а контейнеризация может минимизировать время установки.
PhilHarmonie avatar
флаг cn
Когда каждое приложение запускается в другом контейнере, все они запускаются на разных портах. Таким образом, мне нужно позаботиться о сопоставлении субдомена, порта и конфигурации. Это еще один уровень, о котором мне нужно позаботиться, верно?
vidarlo avatar
флаг ar
Это зависит. Если вы запустите его в службе облачных провайдеров, они позаботятся об этом волшебстве. Если вы работаете со своим собственным ящиком, вам понадобится обратный прокси-сервер или что-то подобное перед ним.
PhilHarmonie avatar
флаг cn
Я хочу предпочесть свой VPS. Я могу проксировать там с nginx.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.