Я создал веб-приложение с NextJS, которое я продаю b2b, где пользователи (мои клиенты-клиенты) могут регистрироваться в определенном месте. Они сообщают свое имя и получают регистрационный номер. Приложение показывает информацию о клиенте (часы работы, адрес,…)
Вторая часть приложения — это панель администратора, с помощью которой мои клиенты могут войти в систему, увидеть все имена и проверить номера и предоставить дополнительную информацию.
В настоящее время я нахожусь на стадии бета-тестирования, и моими клиентами являются компании друзей, но приложение очень хорошо масштабируется, и мне нужен лучший подход, чем следующий:
- мой клиент покупает VPS и домен
- Я устанавливаю стек LEMP
- Проксирую домен в nginx на localhost:3000
- Я настраиваю базу данных для хранения клиентов
- Я копирую корень своего приложения на сервер и запускаю его (npm run build && npm run start)
Я делаю это для каждого клиента (в настоящее время 25). Когда появляется новый клиент или обновляется приложение, это тяжелая ручная работа.
Очень важно, чтобы мои клиенты не видели, что мое приложение используют другие компании.
Сейчас я хочу реализовать следующую идею, и я хочу знать, есть ли лучший подход или это хорошая практика:
- Я хочу масштабироваться до 500+ клиентов
- Я использую свой собственный VPS
- Каждый клиент получает поддомен моего собственного домена (это нормально для моих клиентов)
- Моим клиентам больше не нужны дополнительные серверы
- Я создаю таблицу в своей базе данных MySQL с информацией о клиенте (часы работы, адрес,…)
- В приложении Nextjs я обнаруживаю поддомен и запрашиваю свою базу данных.
- У меня есть один таблица для зарегистрированных клиентов, связанных с таблицей конфигурации
- Я начал один экземпляр моего приложения
- Я нахожу все поддомены в этом экземпляре
- У моих клиентов есть один экран входа администратора, и после входа в систему они загружают данные, связанные с входом в систему (используя JWT, чтобы клиенты не могли получать данные от других клиентов)
- Для новых клиентов я просто добавляю новый поддомен и одну строку MySQL, и они готовы к работе. Этим легко управлять, и если есть обновление, я просто обновляю свой единственный экземпляр приложения.