Учитывая веб-приложение, которое необходимо запустить на серверах клиента и установить системными администраторами на стороне клиента, какой технологический стек упростит развертывание с наименьшим количеством «операций с сервером», выполняемых системными администраторами?
Нашими целевыми платформами являются Windows / IIS / SQLServer и Linux / Apache / MySQL, но, поскольку хостом веб-сервера клиента может быть что угодно, от недавно открытого окна Windows до полностью исправленного и обновленного компьютера Ubuntu, мы пытаемся найти технологию, которая приведет к наименьшему объему работы системных администраторов (читайте, минимизируйте наши требования к поддержке).
Типичными вариантами, конечно же, являются PHP, Python, ASP.Net (запуск Mono для установок Linux), Rails, Java и т. Д.
Некоторые из вещей, которые следует учитывать, заключаются в том, будет ли средний веб-сервер «из коробки» с IIS или Apache иметь необходимые библиотеки для установки продукта, если он был построен с использованием одной технологии, а не другой. Например, решение на основе PHP, вероятно, будет проще для клиента развернуть на машине Linux, в отличие от необходимости устанавливать моно и любые другие зависимости, которые потребуются для запуска решения ASP.Net на машине Linux в качестве веб-приложения. .
Кроме того, возникают вопросы о правильном балансе между "готовой" функциональностью и "простой интеграцией", например: может ли встроенный веб-сервер помочь? Или это только сбивает с толку, когда Apache уже работает на 80-м порту?
Мы работаем исходя из предположения, что у клиента есть некоторый доступ к системному администратору, но, возможно, не постоянный / выделенный - что-то вроде общей учетной записи веб-хостинга.
Учитывая это, мы хотим, чтобы у клиента было наименьшее количество проблем при установке веб-приложения на свой веб-сервер, и мы обсуждаем, какой стек технологий для этого использовать.
Вы можете использовать Python. Он хорошо работает на разных платформах, устанавливается в большинстве дистрибутивов Linux и легко устанавливается в Windows (см. ActiveState Python). Вы можете написать свой собственный веб-сервер в несколько строк кода, который может работать в Linux или работать как служба Windows.
Вы можете написать свое приложение на PHP, и единственное добавление для администратора IIS - это fastcgi и PHP. (Руководство Вот). У вас будут зависимости от любой платформы, которые необходимо решить независимо от того, какой путь вы выберете. Со стороны поддержки гораздо меньше вариантов на стороне Windows, чем на стороне Linux. Если вы выберете таргетинг на ASP.net, вы можете получить массу отладочной информации прямо из коробки с платформы .net. Веб-хостинг Windows также стандартизирован (при условии, что веб-хостинг действительно имеет лицензию на веб-хостинг, что, безусловно, является предостережением, которое вы можете передать своим клиентам), и вы можете легко проверить, что сервер, который он настроил в соответствии со спецификацией.
Я видел много приложений, которые полагаются на стек для распределения всего стека, предварительно настроенного для их приложения. Примеры, с которыми я знаком, - это Zimbra и Knowledge Tree. С точки зрения локальных администраторов, у них есть только один установщик, содержащий все необходимое, уже настроенное и готовое к работе.
Другой вариант, который может сработать, - это использовать маршрут виртуального устройства. На основе чего-то вроде rpath или сверните свой собственный и сделайте его доступным в виде образов для Xen, VMWare и Hyper-V.
В большинстве случаев я ожидал, что ответ будет PHP / MySQL. или .NET / MSSQL. Я работаю с большим количеством клиентов (не в ИТ), которые находятся в одном магазине, и если приложение, которое им нужно установить, не находится в их существующей инфраструктуре, они могут поспорить над ним, но затем они будут двигаться дальше - даже если вы предоставите хорошую документацию и руководства по установке поддержки php в IIS или любой другой (на первый взгляд тривиальной) надстройке.
Если вы ориентируетесь на клиентов, у которых есть доступ только к системному администратору, работающему неполный рабочий день, или которые могут использовать общий хостинг, я думаю, вам действительно нужно предложить что-то столь же простое, как Wordpress установка за 5 минут. Если у вас уже есть план виртуального хостинга, вам не нужно устанавливать другой веб-сервер, и у вас может не хватить доступа для добавления поддержки PHP (если вы используете тарифный план хостинга Windows и наоборот).
Лично я бы посмотрел, какая платформа для вас самая легкая для разработки и как вы можете перенести ее на Другой сторона.
Это действительно зависит от того, что вы продаете - в магазин LAMP или в магазин .NET. Лучшим выбором для переносимости является PHP, но вы можете ускорить разработку с помощью .NET или Rails, что заблокирует вас в одном или другом стеке (если только Mono не лучше, чем я слышал, или Rails имеет хорошую поддержку IIS ...). Исходя из мира Windows, настройка базовой конфигурации IIS совершенно тривиальна, даже если вам также требуется SQL Express. Вы даже можете предоставить им файл ответов для servermanagercmd.exe и сказать «используйте это, и он установит ваш веб-сервер для вас».
Лучшее универсальное решение, которое я придумал до сих пор (и, как и вы, я задумался над этим), является Java. Достаточно легко установить Java в Linux / Windows / Mac / BSD или что-то еще, она почти всегда доступна. Недавно я использовал контейнер сервлетов Winstone Java:
http://winstone.sourceforge.net/
Это небольшой автономный веб-сервер - настолько автономный, что вы можете заархивировать все это как один файл JAR. Конечный пользователь просто запускает файл Jar (в наши дни в большинстве случаев это просто двойной щелчок), и ваш сервер запускается. Это, как вы указали, вызывает проблемы, если что-то уже работает на порту 80, но, поскольку это сервлет Java, который вы создаете в любом случае, не требуется дополнительных усилий, чтобы сделать этот сервлет доступным для пользователя - если они этого не сделают. Если вы не хотите запускать ваш универсальный веб-сервер, они могут установить сервлет стандартным способом в свой обычный контейнер сервлетов.