Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Развертывание Rails приложения на хостинге

#ruby_on_rails


Как развернуть Rails приложение на VPS сервере? Нужно ли что-то дополнительно устанавливать
на сервере, кроме самого Rails?

Что было сделано: 


Установлен Rails на VPS
Загружено на сервер нужное rails приложение
После чего через консоль запустил само приложение cd appname , rails s


Как получить к нему доступ из вне? То есть через URL или IP адрес в браузере?
    


Ответы

Ответ 1



В последних версиях Rails, где-то около 4.0 и выше — никак, потому что вебсервер вешается по умолчанию на localhost:3000 и принимает соединения только через "локальную петлю", от самого себя к самому себе. Для нужд разработки этого достаточно, да и в production-средах в большинстве случаев тоже (из-за балансировщика нагрузки; но тоже не всегда). Надеюсь, вы уже заменили Webrick на что-то более серьёзное. Webrick написан на чистом Ruby и работает одним процессом в один поток. Он даже одного пользователя будет выдерживать с трудом. Как правило, сервер приложения, запускаемый таким образом, не приспособлен для работы "лицом в интернет" (неэффективен, мало возможностей настройки), поэтому его разворачивают за прозрачным прокси (обычно nginx), который принимает соединения напрямую и обслуживает самостоятельно запросы на статические файлы, а остальное перенаправляет к серверу приложения. Тема достаточно обширная и гайдов на просторах интернета очень много, очень разного качества, и я не рискну писать ещё один здесь. Я изложу общий план действий, а их конкретную реализацию можно придумать и самостоятельно: Заставить сервер приложения слушать сетевой адрес/порт, доступный локально (или адрес/порт с ограниченным доступом, или вовсе Unix domain socket) Поставить перед сервером приложения балансировщик нагпузки/прозрачный прокси и организовать раздачу статики (что сервер приложения обычно делает неэффективно) Например, поставить nginx и сделать ему try_files на статику и proxy_pass на локальную точку, которую слушает сервер приложения Обеспечить выживание: воспользоваться любым решением, которое будет автоматически запускать приложение при запуске машины (чтобы после перезагрузки приложение запускалось без лишних движений), а также перезапускало его в случае падения. Но это очень примитивный сценарий, который не для всех приложений подойдёт. Есть целый род деятельности по планированию и реализации инфраструктуры. Я совершенно никак не затронул: Отслеживание признаков жизни сервера Сбор ошибок и уведомление о них разработчиков Резервные копии Процесс автоматического разворачивания ...а это всё весьма нужные вещи. Есть также более весёлые варианты вроде сборки Docker-образа из приложения и запуск его в виде отдельного контейнера. Но итоговая система будет приблизительно такой же. Есть определённая свобода вроде "делать ли nginx отдельным контейнером".

Ответ 2



В списке установленного ещё забыли сам Ruby) я использую связку apache+passenger для своих приложений. Для passenger очень неплохая документация, если надумаете использовать, только сразу ограничте ему потоки, а то приложение будет падать из за нехватки памяти.

Комментариев нет:

Отправить комментарий