Вопрос или проблема
Я ищу самодостаточный HTTP веб-сервер, который я могу развернуть на машинах с Windows и Linux для обслуживания статических файлов.
Он должен быть маленьким и простым. Желательно, чтобы я мог запускать его (и выключать) из командной строки, указывая, на каком порту он будет работать, и указывая, какой каталог будет его домашним каталогом.
Кто-нибудь знает что-то подобное?
Я бы предложил Jetty. Я в процессе встраивания этого в приложение. Он основан на Java и совместим с различными платформами.
Вы также можете встроить Jetty прямо в ваше приложение довольно легко.
Особенности
- Полнофункциональный и основанный на стандартах
- С открытым исходным кодом и коммерчески используемый
- Гибкий и расширяемый
- Небольшой объем памяти
- Можно встраивать
- Асинхронный
- Масштабируемый для предприятий
- Двойная лицензия под Apache и Eclipse
ИЗМЕНЕНИЕ: В итоге я использовал встраиваемую версию Tomcat, так что я добавлю это как рекомендацию. Простой и легкий в использовании из кода. И, как указано в вопросе, может быть запущен из командной строки.
Я лично использовал Mongoose. Он полностью кроссплатформенный и является самодостаточным исполняемым файлом. Он обслуживает статические файлы и по умолчанию обслуживает из каталога, в котором вы его запускаете. Вы также можете передать ему путь в командной строке, если хотите обслуживать другой каталог.
Некоторые альтернативы.
- http-server Требует node.js. Может быть как производственным, так и девелоперским сервером. В остальном он идентичен Mongoose.
Оба этих варианта легковесные, но мощные, полностью кроссплатформенные и могут быть установлены портативно (т.е. не требуют прав администратора для установки).
Вы можете установить Apache после установки Cygwin. https://cygwin.com/
Если вы хотите что-то, что, вероятно, немного легче установить и настроить, вы можете попробовать WAMP. http://www.wampserver.com/en/
Есть также XAMP, который примерно то же самое. https://www.apachefriends.org/index.html
Я не уверен, зачем вам нужен сервер, который может работать в любой среде. Лично я бы настроил виртуальную машину с Linux в VirtualBox, используя Puphpet, чтобы запустить веб-сервер в Windows, если бы я каким-то образом застрял в Windows.
Тем не менее, я бы рекомендовал Nginx. Он в первую очередь предназначен для Linux. Для этого он был разработан. Однако у них есть родная версия для Windows, которая не требует Cygwin для запуска.
Питонистский подход
Мне кажется, самое простое решение было упущено. Установлен ли Python в системе? (если это Linux или MacOS, то да, установлен) Просто выполните это, и он будет обслуживать статические файлы, например, на порту 1337
python -m http.server 1337
В Windows Python не предустановлен, но вместо него можно использовать PowerShell, например, модуль webserver – откройте PowerShell и введите
install-module webserver
import-module webserver
start-webserver
Мне очень понравился MiniWeb.
MiniWeb – это мини-реализация HTTP-сервера, написанная на языке C, отличающаяся низким потреблением системных ресурсов, высокой эффективностью, хорошей гибкостью и высокой портативностью. Он способен обслуживать несколько клиентов с помощью одного потока, поддерживает методы GET и POST, аутентификацию, динамический контент (динамические веб-страницы и подстановку переменных) и загрузку файлов. MiniWeb работает на POSIX-совместимых ОС, таких как Linux, а также на Microsoft Windows (Cygwin, MinGW и родная сборка с Visual Studio). Размер двоичного файла MiniWeb может быть до 20 КБ (на x86 Linux). Цель проекта – предоставить быстрый, функциональный и малозатратный HTTP-сервер, который может быть встроен в другие приложения (как статическая или динамическая библиотека), а также быть отдельным веб-сервером.
Ответ или решение
Простой, развертываемый веб-сервер для статических файлов
В ответ на ваш запрос о создании самодостаточного HTTP веб-сервера для Windows и Linux, который легко разворачивается и управляется через командную строку, я хочу предложить несколько подходящих решений. Эти варианты подходят для обслуживания статических файлов и могут быть легко настроены для различных требований.
1. Mongoose
Mongoose представляет собой удобный и компактный веб-сервер, который работает на любых операционных системах. Это самодостатимый исполняемый файл, который по умолчанию обслуживает файлы из директории, где он запущен. Вы можете указать другое местоположение через командную строку.
Главные особенности:
- Полная кроссплатформенность.
- Легковесный и быстрый.
- Простота в использовании и настройке.
2. Jetty и Apache Tomcat (встраиваемые версии)
Оба решения, Jetty и Apache Tomcat, предлагают возможность встраивания в ваши приложения, что является отличным вариантом для тех, кто ищет более комплексные функциональные возможности. Эти серверы поддерживают динамический и статический контент и могут запускаться и останавливаться из командной строки.
Jetty:
- Подходит для Java-разработчиков.
- Обладает малой площадью, легко настраивается и расширяется.
Tomcat:
- Также поддерживает Java.
- Позволяет использовать множество поддерживаемых технологий для создания веб-приложений.
3. Простой сервер на Python
Если на вашей системе установлен Python (что скорее всего для Linux или macOS), вы можете воспользоваться встроенным модулем для простого развертывания веб-сервера. Выполните следующую команду для запуска сервера на порту 1337:
python -m http.server 1337
Для Windows вы можете использовать PowerShell и модуль WebServer:
Install-Module webserver
Import-Module webserver
Start-WebServer
4. Nginx
Nginx — это мощный веб-сервер и обратный прокси-сервер, который хорошо подходит для Linux, но также предлагает версию для Windows. Его можно использовать для высоконагруженных проектов, а также для обслуживания статических файлов. Главные преимущества включают:
- Высокая производительность.
- Надежность и стабильность.
- Поддержка большого количества одновременных соединений.
5. MiniWeb
MiniWeb — это легкая реализация HTTP-сервера на языке C. Он выделяется низким потреблением ресурсов и высокой производительностью. Размер бинарного файла может составлять всего 20 КБ, что делает его отличным выбором для встраивания и работы в маломощных системах.
Ключевые характеристики:
- Поддержка многопоточности.
- Аутентификация и возможность работы с формами.
- Отличная портируемость на различные операционные системы.
Заключение
Выбор веб-сервера зависит от ваших конкретных требований и того, насколько вы готовы к его настройке и развертыванию. Если вам нужно легкое решение для моментального развертывания, Mongoose или Python встроенный сервер будут отличным выбором. Если вы ищете что-то более мощное и масштабируемое, Jetty, Tomcat или Nginx могут быть наиболее подходящими вариантами. MiniWeb станет хорошей альтернативой для тех, кто ценит компактность и быстроту. Выбирайте тот инструмент, который наилучшим образом соответствует вашим потребностям и простоте использования.