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

Вступление

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

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

Предпосылки

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

  • Одна капля Ubuntu 14.04

  • Учетная запись пользователя без полномочий root с доступом sudo на вашем сервере, которую вы можете настроить, следуя these инструкциям

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

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

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

sudo apt-get update
sudo apt-get install git

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

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

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

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

Сначала установите Java.

sudo apt-get install openjdk-7-jre-headless

Затем загрузите скрипт установки Leiningen. Существует пакет Ubuntu для Leiningen, но он очень устарел.

sudo curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -o /usr/local/bin/lein

Установите разрешения, чтобы любой пользователь мог использовать утилиту + lein +, которую предоставляет Leiningen.

sudo chmod a+x /usr/local/bin/lein

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

cd ~/do-clojure-web
lein uberjar

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

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

sudo apt-get install nginx supervisor

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

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

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

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

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

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

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

cd /var/www/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

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

Создайте и отредактируйте файл + / etc / supervisor / conf.d / do-clojure-web.conf +.

sudo nano /etc/supervisor/conf.d/do-clojure-web.conf

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

/etc/supervisor/conf.d/do-clojure-web.conf

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

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

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

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

Отредактируйте файл + / etc / nginx / sites-available / default +.

sudo nano /etc/nginx/sites-available/default

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

/ И т.д. / Nginx / сайты-отсутствуют / по умолчанию

. . .
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##




server {
   listen 80 default_server;
. . .

Теперь найдите блок, который начинается с + location / +. Закомментируйте все строки в нем, добавив + # + в начале каждой строки.

/ И т.д. / Nginx / сайты-отсутствуют / по умолчанию

. . .
       # Make site accessible from http://localhost/
       server_name localhost;


        location / {
               # First attempt to serve request as file, then
               # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
               # Uncomment to enable naxsi on this location
               # include /etc/nginx/naxsi.rules
        }

       # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
. . .

Затем, чуть ниже, добавьте в следующий раздел, который скажет Nginx прослушивать как обычный веб-сервер на порту 80 и проксирует ваши запросы приложению Clojure.

/ И т.д. / Nginx / сайты-отсутствуют / по умолчанию

. . .

       # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests














       #location /RequestDenied {
       #       proxy_pass http://127.0.0.1:8080;
       #}

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

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

sudo service supervisor start

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

sudo service nginx start

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

Если вы просто получаете страницу Nginx по умолчанию, попробуйте перезапустить Supervisor с помощью + sudo service supervisor 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