Я разработал своеобразное клиент-серверное приложение для своей фирмы и мне нужно, чтобы если я вношу изменения в приложение, то оно доставлялось автоматически всем сотрудникам, у которых оно установлено.
Были мысли сделать своё приложения в виде node_module, выложить его на npm и добавить скрипт, чтобы при запуске прописывался npm install. Но мне кажется, что это в корне неверный подход.
Обновления будут выходить достаточно часто, всякие мелкие правки и прочее, и часто без обратной совместимости, поэтому большие задержки между проверкой обновления неприемлемы.
Подскажите как решить эту задачу?
Решение в лоб:
Клиент в каждом запросе на сервер посылает свою версию.
Сервер в ответ может вместо исполнения запроса прислать ошибку "необходимо обновление клиента"
Ну и дальше обновляем.
Но вообще совсем без обратной совместимости делать опасно. Если попадет в разрыв какого-то критичного процесса, будет много негатива от юзеров.
нет, будет около десяти независимых сервер-клиентов со своей бд каждый, они иногда будут обмениваться с друг другом информацией (не реалтайм), поэтому нужно доставлять своевременно обновления, чтобы они могли общаться, так как обратной совместимости скорее всего не будет. У меня стоит проблема каким образом доставлять обновления. Потому что, чтобы установить обновление нужно как минимум перезапуск. Помимо этого нужна автоматическая сборка и запуск сразу после обновления. Я могу конечно всё делать руками, но с увеличением к-ва пользователей это будет невозможно.
Дмитрий Энтелис: я не правильно выразился. Есть приложение состоящее из 3 основных модулей: express, request, mssql. Экспресс выступает в виде restapi и отдаёт данные пользуясь модулем mssql. request же наоборот запрашивает данные с других серверов и добавляет себе в бд. Такая своеобразная репликация на коленке. Я всю это конструкцию назвал сервер-клиентом. И вопрос в том, что приложение в активной разработке и нужно чтобы оно обновлялось у клиентов автоматически. Я не знаю какой подход выбрать в данном случае. Нужно удалённое выполнение скриптов для изменение структуры бд с любой момент. Но это я кажется знаю как решить, просто добавить endpoit в апи выводящий на банальный exec . А вот как обновлять сам код, собирать и перезапускать автоматом я хз
roskom_nadzor: node.js же не компилируемый, в чем именно сборка заключается?
В простейшем виде, можно положить весь код в репозиторий.
У клиентов настроить кроны которые будут апать все изменения.
Решение получше: в репозитории настроить hook до серверов клиентов, далее аналогично.
Изменения структуры базы делаем через миграции которые лежат в том же репозитории, гугл выдает ссылку на https://www.npmjs.com/package/db-migrate но сам не щупал.
Дмитрий Энтелис: я понял, скорее всего так и будет. Действительно node.js не компилируемый и нужен всего лишь способ доставки актуальных исходников. Я использую babel и gulp для сервер сайда, именно это я подразумивал под сборкой. У меня mssql поэтому скорее всего буду юзать sequelize не потому что мне нужен orm (я ведь уже написал строк 500 для mssql-node) а потому, что там есть migration. Спасибо за идею. На счёт доставки исходников, что в данном случае лучше использовать github, svn или что-то другое? Я бы не отказался хранить исходники на своём внутреннем сервере и доставлять их оттуда. Это более приемлемо. Есть ли какое-то готовое решение для этого?
нет, будет около десяти независимых сервер-клиентов со своей бд каждый, они иногда будут обмениваться с друг другом информацией (не реалтайм), поэтому нужно доставлять своевременно обновления, чтобы они могли общаться, так как обратной совместимости скорее всего не будет. У меня стоит проблема каким образом доставлять обновления. Потому что, чтобы установить обновление нужно как минимум перезапуск. Помимо этого нужна автоматическая сборка и запуск сразу после обновления. Я могу конечно всё делать руками, но с увеличением к-ва пользователей это будет невозможно.
так же нужен инструмент для быстрого деплоя для новых серверов, причем ОС Windows. Я даже не знаю в какую сторону смотреть, не хочется усложнять сильно архитектуру, нужно просто решение для автоматизации.