Falcon – современный HTTP-сервер для Ruby-приложений, разработанный с упором на асинхронность и высокую производительность. Falcon может обрабатывать большое количество одновременных соединений, поддерживает WebSockets, SSE, HTTP/2 и HTTP/3 и эффективно работает с потоковыми данными. Он идеально подходит для современных веб-приложений, где требуется real-time взаимодействие или длительные соединения с клиентами.
Rack-приложением называют веб-приложение, написанное для Ruby, которое использует стандартный интерфейс Rack. Rack определяет единый способ обработки HTTP-запросов и формирования ответов. Это позволяет любому серверу, совместимому с Rack, запускать такие приложения. Примерами Rack-приложений являются Ruby on Rails, Sinatra, Hanami и другие.
В статье разберём, как развернуть такое Rack-приложение на сервере Falcon, работающем на виртуальном выделенном сервере под управлением Ubuntu 24.04.
Как развернуть Rack-приложение на сервере Falcon
Перед началом работ по запуску Rack-приложения обновите списки пакетов в системе:
$ sudo apt update
Чтобы подготовить систему к работе с Ruby и Ruby-гемами, позволяя как запускать чисто Ruby-код, так и собирать гемы, которые требуют компиляции, установите пакеты ruby-full
и build-essential
– полноценную среду Ruby и набор базовых инструментов для сборки ПО:
$ sudo apt install ruby-full build-essential
Следующей командой установите HTTP-сервер Falcon и его зависимости из RubyGems:
$ sudo gem install falcon
Проверить корректность установки Falcon можно через вывод его версии:
$ falcon --version
В нашем примере вывод версии Falcon выглядит как на скриншоте ниже.

Затем создайте рабочий каталог для вашего Rack-приложения, например, /srv/falcon_app/
:
$ sudo mkdir -p /srv/falcon_app/
В данном каталоге создайте файл config.ru
– главный входной файл Rack-приложения, который будет определять, какое приложение должен запустить Rack-сервер:
$ sudo nano /srv/falcon_app/config.ru
В нашем примере содержимое файла config.ru
выглядит следующим образом:
app = Proc.new do |env|
[200, {"Content-Type" => "text/plain"}, ["Hello from Falcon!"]]
end
run app
После внесения всех изменений сохраните их и закройте файл config.ru
.
Как запустить Rack-приложение в качестве системного сервиса
Чтобы ваше Rack-приложение запускалось при старте системы и работало в фоновом режиме, необходимо настроить его работу в качестве системного сервиса. При этом для повышения уровня безопасности не следует запускать приложение от имени учётной записи root
или вашего рабочего пользователя. Вместо этого рекомендуется создать специальную учётную запись с ограниченными правами и без возможности интерактивного входа в систему. В нашем примере данная учётная запись будет называться falcon
. Для создания такого пользователя запустите команду:
$ sudo adduser --system --no-create-home --group falcon
Параметры, используемые в данной команде, выполняют следующие функции:
--system
– делает пользователя системным;--no-create-home
– не создаёт домашнюю директорию пользователя;--group
– создаёт одноимённую группу и помещает в неё создаваемого пользователя.
Чтобы сервис имел доступ к коду и файлам приложения, а другие пользователи системы не имели, измените владельца файлов и директорий в рабочем каталоге приложения на пользователя falcon
и группу falcon
:
$ sudo chown -R falcon:falcon /srv/falcon_app/
Затем создайте юнит-файл для нового сервиса:
$ sudo nano /etc/systemd/system/falcon.service
Скопируйте в него следующие строки:
[Unit]
Description=Falcon Rack HTTP Server
After=network.target
[Service]
User=falcon
Group=falcon
WorkingDirectory=/srv/falcon_app
ExecStart=/usr/local/bin/falcon serve --bind http://0.0.0.0:9292
Restart=always
Environment=GEM_HOME=/usr/local/bundle
Environment=PATH=/usr/local/bin:/usr/bin:/bin
[Install]
WantedBy=multi-user.target
Закройте файл с сохранением внесённых изменений и обновите конфигурацию systemd
:
$ sudo systemctl daemon-reload
После чего запустите новую службу:
$ sudo systemctl start falcon
Установите сервис в автозагрузку:
$ sudo systemctl enable falcon
И проверьте его текущее состояние:
$ systemctl status falcon
Вывод команды не должен содержать каких-либо сообщений об ошибках.

Поскольку Rack-приложение работает через TCP-порт 9292, указанный в юнит-файле, что также видно из вывода предыдущей команды, необходимо открыть доступ к серверу для данного порта. Для этого добавьте соответствующее разрешающее правило в брандмауэр UFW:
$ sudo ufw allow 9292/tcp
После чего проверьте работоспособность созданного приложения. Для этого откройте браузер и перейдите на http://X.X.X.X:9292
, где замените X.X.X.X
на IP-адрес вашего виртуального сервера.
