Как развернуть веб-приложение Clojure на FreeBSD 10.2

Вступление

Интерес к функциональному программированию и, в частности, программированию для Интернета в Clojure продолжает расти. Многие учебные пособия по созданию базовых приложений часто упускают из виду детали развертывания. Эта статья покажет вам, как развернуть веб-приложение Clojure в FreeBSD 10.2 Droplet.

В частности, мы создадим пример приложения Clojure и упакуем его для производственного использования, а также настроим среду приложения Clojure на сервере, используя Supervisor для запуска приложения и Nginx для обслуживания запросов к нему.

Предпосылки

Прежде чем начать это руководство, вам потребуется следующее:

  • Одна капля FreeBSD 10.2, которую вы можете по желанию настроить с помощью these инструкций

Шаг 1. Создание и упаковка образца приложения Clojure

Самый первый шаг - использовать + git + для захвата примера проекта Clojure для развертывания.

Сначала обновите ваши пакеты и установите + git + на сервер.

sudo pkg update
sudo pkg install git

Затем клонируйте репозиторий образцов проекта.

git clone https://github.com/do-community/do-clojure-web.git

Этот репозиторий является конечным результатом следования учебнику Clojure Basic Web Development. Если вам нравится, вместо того, чтобы клонировать этот репозиторий, вы можете самостоятельно следовать этому руководству.

Clojure использует JVM для запуска своего кода, поэтому для его запуска необходимо скомпилировать проект. Leiningen, инструмент управления зависимостями и автоматизации сборки для приложений Clojure, делает это легко.

Давайте установим Leiningen сейчас.

sudo pkg install leiningen

Вы заметите некоторые результаты, заявляющие, что Java требует пары специальных точек монтирования файловой системы. Мы позаботимся об этом на следующем этапе.

Теперь вы можете скомпилировать ваш проект для запуска на сервере с помощью + lein +.

cd ~/do-clojure-web
lein uberjar

Шаг 2 - Настройка среды приложения Clojure

Для правильной работы этого приложения нам нужны три основных компонента: Java, Supervisor и Nginx. Мы установили Java как часть установки Leiningen на последнем шаге, поэтому далее мы установим Supervisor и Nginx.

sudo pkg install nginx py27-supervisor

Java требует пары специальных точек монтирования файловой системы, как указано в шаге 1. Запустите эти две команды, чтобы убедиться, что они смонтированы.

sudo mount -t fdescfs fdesc /dev/fd
sudo mount -t procfs proc /proc

Вместо того, чтобы выполнять эти команды каждый раз при загрузке системы, мы сделаем это автоматически. Отредактируйте файл + / etc / fstab +, используя + ee + или ваш любимый текстовый редактор.

sudo ee /etc/fstab

Убедитесь, что в конце вашего файла + / etc / fstab + есть следующие две записи.

/ И т.д. / Fstab

fdesc   /dev/fd     fdescfs     rw  0   0
proc    /proc       procfs      rw  0   0

Вам также понадобится место для хранения веб-приложения Clojure и его файлов журналов. Создайте эту структуру каталогов затем.

sudo mkdir -p /www/data/do-clojure-web/app/db/ /www/logs

Теперь вы можете переместить файл приложения Clojure и файл базы данных в созданные вами каталоги.

sudo cp ~/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar /www/data/do-clojure-web/app/
sudo cp ~/do-clojure-web/db/do-clojure-web.h2.db /www/data/do-clojure-web/app/db/

Приложение будет запускаться от имени пользователя * www * в системе, чтобы оно могло писать в нашу встроенную базу данных. Установите для владельца пути приложения значение * www *.

sudo chown -R www /www/data/do-clojure-web/

Перейдите в каталог приложений Clojure.

cd /www/data/do-clojure-web/app/

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

sudo ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar

Приложение в настоящее время настроено на доступ только через localhost, но вы все равно можете убедиться, что оно запускается без ошибок. Сделайте это, прежде чем двигаться дальше.

sudo java -jar do-clojure-web.jar

Если все работает правильно, вы должны получить вывод, подобный следующему:

Выход

. . .
2015-06-12 04:30:17.882:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT
2015-06-12 04:30:17.995:INFO:oejs.AbstractConnector:Started [email protected]:5000

Чтобы остановить приложение, нажмите комбинацию клавиш + CTRL + C +.

Шаг 3 - Настройка Supervisor для запуска приложения Clojure

Есть несколько вариантов управления вашим приложением как сервисом. Для службы, которая действительно нуждается в масштабировании, я рекомендую взглянуть на uWSGI документацию по запуску приложения Clojure.

Создайте и отредактируйте файл + / usr / local / etc / supervisord.conf +.

sudo ee /usr/local/etc/supervisord.conf

Добавьте эту конфигурацию в самый конец файла и сохраните ее.

/usr/local/etc/supervisord.conf

[program:do-clojure-web]
command=/usr/local/bin/java -jar do-clojure-web.jar
directory=/www/data/do-clojure-web/app
user=www
autostart=true
autorestart=true
startretries=3
redirect_stderr=true
stdout_logfile=/www/logs/do-clojure-web.app.log

Эта конфигурация довольно проста. Демон Supervisor (служба) будет запускать наше приложение из каталога + / www / data / do-clojure-web / app / +. Он также обязательно войдет в + / www / logs / do-clojure-web.app.log + и попытается перезапустить приложение в случае его сбоя.

Шаг 4 - Настройка Nginx в качестве прокси-сервера

Поскольку веб-приложение Clojure принимает подключения только от локального хоста через порт 5000, нам необходимо разместить перед ним веб-сервер, такой как Nginx, для обеспечения внешнего доступа. Это также будет очень удобно для обслуживания статических ресурсов при расширении приложения.

Отредактируйте файл + / usr / local / etc / nginx / nginx.conf +.

sudo ee /usr/local/etc/nginx/nginx.conf

Сначала добавьте блок + upstream, выделенный красным цветом ниже, над блоком` + server + `, который уже находится в файле.

/usr/local/etc/nginx/nginx.conf

. . .
   #gzip  on;






   server {
           listen       80;
           server_name  localhost;
. . .

Теперь найдите блок, который начинается с + location / + (внутри блока + server +). Закомментируйте все строки в нем, добавив + # + в начале каждой строки и добавьте в новый раздел + location / +, выделенный красным. Это говорит Nginx прослушивать как обычный веб-сервер на порту 80 и передавать ваши запросы в приложение Clojure.

/usr/local/etc/nginx/nginx.conf

. . .
   server {
       listen       80;
       server_name  localhost;

       #charset koi8-r;

       #access_log  logs/host.access.log  main;

       location / {
           root   /usr/local/www/nginx;
           index  index.html index.htm;















       #error_page  404              /404.html;
. . .

Сохраните и выйдите из файла.

Шаг 5 - Запуск сервисов и тестирование доступа

Пришло время запустить все части и убедиться, что все работает правильно. Первый шаг - убедиться, что ваши службы настроены на загрузку.

Отредактируйте файл + / etc / rc.conf +.

sudo ee /etc/rc.conf

Добавьте эти две строки в конец файла + / etc / rc.conf +.

/usr/local/etc/rc.conf

nginx_enable="YES"
supervisord_enable="YES"

Сохраните и выйдите из файла.

Запустите демон Supervisor, чтобы запустить приложение Clojure.

sudo service supervisord start

Подождите около 30 секунд, пока он запустится, а затем запустите интерфейсный прокси-сервер веб-сервера Nginx.

sudo service nginx start

Посетите + http: // + в вашем браузере. Вы должны увидеть пример загрузки сайта приложения Clojure.

Если вы просто получаете страницу Nginx по умолчанию, попробуйте перезапустить Supervisor с помощью + sudo service supervisord restart +, подождать 30 секунд и перезапустить Nginx с помощью + sudo service nginx restart +.

Как только сайт загрузится, нажмите на ссылку * Добавить местоположение * в верхней части экрана и попробуйте добавить несколько числовых координат, чтобы убедиться, что ваши права доступа к базе данных верны. Например, вы можете добавить 1 для * x value * и 2 для * y value *. Это должно привести вас к странице, которая говорит:

добавление местоположения

Added [1, 2] (id: 1) to the db. See for yourself.

Если вы нажмете на ссылку «Просмотреть все местоположения» в верхней части экрана, вы увидите таблицу с новой записью.

Заключение

Вы только что развернули приложение Clojure, используя Leiningen, Supervisor и Nginx! По теме развертывания даже самых простых веб-сайтов и приложений можно многому научиться. Следующим шагом является развертывание пользовательского приложения вместо демонстрационного приложения, используемого в этом руководстве.

Related