Развертывание приложений Compojure/Sinatra
Вопрос
Каков предпочтительный способ развертывания приложений Compojure/sinatra?У меня на хосте работает несколько сайтов, поэтому я не могу запустить Jetty/Mongrel на порту 80.Как мне обрабатывать несколько сайтов/приложений, работающих на одном хосте?
Решение
Используйте веб-сервер, например Апач который работает на порту 80 и использует виртуальные хосты чтобы направить трафик на нужный сервер приложений.Таким образом, в основном вы запускаете каждый сервер приложений (причал/дворняга и т. д.) на другом порту, а затем на каждом виртуальном хосте будет другая конфигурация для использования чего-то вроде мод прокси для пересылки трафика на сервер приложений.Вы можете использовать другой веб-сервер, например лайттпд или nginx.Для приложения Sinatra вы также можете посмотреть Phusion Passenger, он же мод-рейлинги, он же мод-стойка, который теоретически работает с любым стоечным приложением, хотя я использовал его только с Rails.
Если вы посмотрите на это еще немного, вы обнаружите, что существуют различные схемы пересылки трафика на сервер приложений с веб-сервера, но основной механизм для выполнения подобных действий всегда сводится к наличию веб-сервера, который прослушивает порт. 80, который использует виртуальные хосты на основе имен для перенаправления трафика соответствующему приложению.
Другие советы
Я уже много лет делаю подобные вещи с различными автономными серверами (например, AllegroServe).Я нашел лучший подход:
- Запускайте каждый сервер на другом непривилегированном порту (например, 8080).
- Бегать
pound
(или Nginx и т. д.) на 80, настроенном для сопоставления запросов каждому приложению.
Pound великолепен, а конфигурации в конечном итоге очень просты (в отличие от Nginx).Он также выполнит за вас SSL-интерфейс и очистку HTTP, что снимет нагрузку с вашего приложения.
Используйте пассажира! http://modrails.com - это плагин для Apache и Nginx, который позволяет (очень) легко запускать Ruby-приложение в качестве виртуального хоста.