Установка с использованием Heroku

Веб-приложения и API, развернутые на платформе Heroku, могут быть легко защищены с помощью Валарм. Фильтрующий узел Валарм в этом случае разворачивается с помощью специального созданного Buildpack’а, который необходимо подключить к приложению.

Вы можете получить Heroku Buildpack для фильтрующего узла из открытого репозитория Валарм.

Buildpack обладает следующими особенностями:

Необходимые условия

Перед установкой фильтрующего узла Валарм убедитесь, что у вас есть аккаунт Валарм с ролью Администратора.

Запуск фильтрующего узла

Buildpack с фильтрующим узлом предоставляет команду wallarm/bin/start-wallarm. В качестве аргумента ей передается команда для запуска вашего приложения.

Пример для запуска фильтрующего узла и сервера приложений Unicorn:

$ cat Procfile
web: wallarm/bin/start-wallarm bundle exec unicorn -c config/unicorn.rb

Переменные окружения

Общие параметры фильтрующего узла задаются через переменные окружения:

  • WALLARM_USER — пользователь my.wallarm.com с правами на добавление новых фильтрующих узлов.
  • WALLARM_PASSWORD — пароль пользователя.
  • WALLARM_MODE — режим обработки запросов: off (выключен), monitoring (режим мониторинга), blocking (режим блокировки).
  • WALLARM_TARANTOOL_MEMORY — размер памяти в гигабайтах, выделенной для постаналитики; по умолчанию, 50% всей памяти.

Пример использования переменной окружения для установки режима блокировки:

$ heroku config:set WALLARM_MODE=block

Настраиваемая конфигурация NGINX

В некоторых случаях может понадобиться дополнительно настроить NGINX, который является важной частью buildpack’а. Вы можете задать собственную конфигурацию NGINX путем создания файла nginx.conf.erb в директории wallarm/etc.

Начните с копирования конфигурационного файла buildpack.

Координация приложения и dyno

Buildpack не будет запускать NGINX с модулем Валарм, пока не будет создан файл /tmp/app-initialized.

Поскольку NGINX привязан к $PORT dyno, и $PORT определяет, может ли приложение получать трафик, вы можете задержать получение трафика NGINX до тех пор, пока ваше приложение не будет к этому готово. В примерах ниже показано, как и когда записывать в этот файл при работе с Unicorn.

Практический пример подключения фильтрующего узла

Ниже приведены два примера подключения Валарм: для существующего приложения и для нового приложения.

В обоих случаях используются Ruby и Unicorn, однако аналогичным образом можно установить Валарм и для других языков программирования и серверов приложений.

Защита уже существующего приложения

Подключите buildpack фильтрующего узла Валарм:

$ heroku buildpacks:add https://github.com/wallarm/heroku-buildpack-wallarm-node.git

Обновите Procfile, чтобы стартовать фильтрующий узел, указав в параметрах команду для запуска текущего сервера приложений:

web: wallarm/bin/start-wallarm bundle exec unicorn -c config/unicorn.rb
$ git add Procfile
$ git commit -m 'Update procfile for Wallarm Node buildpack'

Обновите конфигурацию сервера приложений для обработки запросов на локальном сокете и автоматического создания файла /tmp/app-initialized для приема трафика:

require 'fileutils'
listen '/tmp/nginx.socket'
before_fork do |server,worker|
  FileUtils.touch('/tmp/app-initialized')
end
$ git add config/unicorn.rb
$ git commit -m 'Update unicorn config to listen on NGINX socket.'

Подключите фильтрующий узел к облаку Валарм:

heroku config:set WALLARM_USER <your email>
heroku config:set WALLARM_PASSWORD <your password>

Наконец, разверните изменения для запуска приложений с включенным анализом трафика:

$ git push heroku master

Защита нового приложения

Ниже — пример построения простого приложения, которое будет использовать Buildpack фильтрующего узла Валарм для анализа трафика.

Создайте директорию для приложения:

$ mkdir myapp; cd myapp
$ git init

Создайте Gemfile со следующим содержимым:

source 'https://rubygems.org'
gem 'unicorn'

Создайте файл config.ru:

run Proc.new {[200,{'Content-Type' => 'text/plain'}, ["hello world"]]}

Создайте файл config/unicorn.rb с настройками сервера приложений, принимающего подключения через локальный сокет:

require 'fileutils'
preload_app true
timeout 5
worker_processes 4
listen '/tmp/nginx.socket', backlog: 1024

before_fork do |server,worker|
  FileUtils.touch('/tmp/app-initialized')
end

Установите Gems:

$ bundle install

Создайте Procfile:

web: bin/start-nginx bundle exec unicorn -c config/unicorn.rb

Создайте и разверните приложение Heroku:

$ heroku create
$ heroku buildpacks:add heroku/ruby
$ heroku buildpacks:add https://github.com/wallarm/heroku-buildpack-wallarm-node.git
$ heroku config:set WALLARM_USER <your email>
$ heroku config:set WALLARM_PASSWORD <your password>
$ git add .
$ git commit -am "init"
$ git push heroku master
$ heroku logs -t

Проверьте приложение:

$ heroku open

results matching ""

    No results matching ""