Как развернуть веб-приложение Clojure в Debian 9
На этой странице
- Начало работы
- Установите Nginx и супервизор
- Загрузить приложение Clojure
- Настройка среды веб-приложения Clojure
- Настройка Nginx и Supervisor
- Доступ к веб-приложению Clojure
- Заключение
Clojure — это современный язык программирования общего назначения для JVM, ориентированный на параллельное программирование в операционных системах. Clojure позволяет использовать существующую инфраструктуру JVM, включая инструменты, библиотеки и серверы приложений.
В этом руководстве рассматривается процесс развертывания простого веб-приложения в Clojure с использованием супервизора и Nginx.
Требования
- Сервер под управлением Ubuntu 16.04.
- Настройка пароля root на вашем сервере.
Начиная
Перед запуском рекомендуется обновить ваш пакет до последней версии с помощью следующей команды:
apt-get update -y
apt-get upgrade -y
Как только все пакеты будут обновлены, перезапустите сервер, чтобы применить все эти изменения.
reboot
Затем установите на сервер некоторые необходимые пакеты, такие как git, curl, Java, с помощью следующей команды:
apt-get install git curl openjdk-8-jre-headless -y
После установки всех необходимых пакетов вы можете проверить версию JAVA с помощью следующей команды:
java -version
Вы должны увидеть версию JAVA в следующем выводе
openjdk version "1.8.0_131" OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-2-b11) OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
Когда вы закончите, вы можете приступить к установке Nginx и Supervisor.
Установите Nginx и супервизор
По умолчанию Nginx и Supervisor доступны в репозитории Ubuntu 16.04. Вы можете установить их, просто выполнив следующую команду:
apt-get install nginx supervisor -y
После завершения установки запустите службу Nginx и Supervisor и включите их во время загрузки с помощью следующей команды:
systemctl start nginx
systemctl start supervisor
systemctl enable nginx
systemctl enable supervisor
Как только вы закончите, вы можете перейти к следующему шагу.
Скачать приложение Clojure
Во-первых, вам нужно будет загрузить образец проекта Clojure из репозитория git. Вы можете легко загрузить его с помощью утилиты командной строки git clone, как показано ниже:
git clone https://github.com/do-community/do-clojure-web.git
Следующим шагом будет компиляция и запуск этого проекта Clojure с использованием файла Leiningen. Leiningen — это инструмент управления зависимостями и автоматизации сборки, который можно использовать для компиляции приложения Clojure. Вы можете загрузить его с помощью команды curl, как показано ниже:
curl https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein -o /usr/bin/lein
Затем предоставьте соответствующие разрешения загруженному инструменту с помощью следующей команды:
chmod 755 /usr/bin/lein
Теперь выполните следующую команду, чтобы скомпилировать проект Closure:
cd do-clojure-web
lein uberjar
Вы должны увидеть следующий вывод:
WARNING: You're currently running as root; probably by accident. Press control-C to abort or Enter to continue as root. Set LEIN_ROOT to disable this warning. Downloading Leiningen to /root/.lein/self-installs/leiningen-2.7.1-standalone.jar now... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 618 0 618 0 0 309 0 --:--:-- 0:00:02 --:--:-- 207 100 14.6M 100 14.6M 0 0 326k 0 0:00:46 0:00:46 --:--:-- 279k Retrieving lein-ring/lein-ring/0.8.13/lein-ring-0.8.13.pom from clojars Retrieving org/clojure/clojure/1.2.1/clojure-1.2.1.pom from central Retrieving org/clojure/data.xml/0.0.6/data.xml-0.0.6.pom from central Retrieving org/clojure/pom.contrib/0.0.25/pom.contrib-0.0.25.pom from central Retrieving org/sonatype/oss/oss-parent/5/oss-parent-5.pom from central Retrieving org/clojure/clojure/1.3.0/clojure-1.3.0.pom from central Retrieving leinjacker/leinjacker/0.4.1/leinjacker-0.4.1.pom from clojars Retrieving org/clojure/core.contracts/0.0.1/core.contracts-0.0.1.pom from central Retrieving org/clojure/pom.contrib/0.0.26/pom.contrib-0.0.26.pom from central Retrieving org/clojure/core.unify/0.5.3/core.unify-0.5.3.pom from central Retrieving org/clojure/clojure/1.4.0/clojure-1.4.0.pom from central Retrieving org/clojure/clojure/1.2.1/clojure-1.2.1.jar from central Retrieving org/clojure/core.contracts/0.0.1/core.contracts-0.0.1.jar from central Retrieving org/clojure/data.xml/0.0.6/data.xml-0.0.6.jar from central Retrieving org/clojure/core.unify/0.5.3/core.unify-0.5.3.jar from central Retrieving org/clojure/clojure/1.2.1/clojure-1.2.1.jar from clojars
Как только проект Clojure скомпилирован, вы можете перейти к следующему шагу.
Настройка среды веб-приложения Clojure
Далее вам нужно будет создать структуру каталогов для веб-приложения Clojure. Вы можете сделать это с помощью следующей команды:
mkdir -p /var/www/html/do-clojure-web/app/db
Затем скопируйте файлы приложения Clojure в указанный выше каталог:
cp /root/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar /var/www/html/do-clojure-web/app/
Затем предоставьте соответствующие разрешения каталогу приложений Clojure с помощью следующей команды:
chown -R www-data:www-data /var/www/html/do-clojure-web/
Затем создайте символику веб-приложения clojure с помощью следующей команды:
cd /var/www/html/do-clojure-web/app/
ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar
Веб-приложение Clojure готово к использованию. Вы можете проверить, работает ли он или нет, с помощью следующей команды:
java -jar do-clojure-web.jar
Если все в порядке, вы должны увидеть следующий вывод:
2017-10-01 10:30:48.349:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT 2017-10-01 10:30:48.590:INFO:oejs.AbstractConnector:Started :5000
Настройте Nginx и супервизор
Далее вам нужно будет настроить Supervisor для управления приложениями Clojure как службой. Вы можете сделать это, создав файл do-clojure-web.conf в каталоге конфигурации Supervisor, как показано ниже:
nano /etc/supervisor/conf.d/do-clojure-web.conf
Добавьте следующие строки:
[program:do-clojure-web] command=/usr/bin/java -jar do-clojure-web.jar directory=/var/www/html/do-clojure-web/app user=www-data autostart=true autorestart=true startretries=3 redirect_stderr=true stdout_logfile=/var/log/log/do-clojure-web.app.log
Сохраните и закройте файл, когда закончите.
Далее вам также потребуется настроить Nginx для использования в качестве обратного прокси-сервера. Поскольку веб-приложение Clojure принимает соединения только с локального хоста. Вы можете получить к нему доступ из удаленного места с помощью Nginx. Для этого вам необходимо настроить файл конфигурации Nginx по умолчанию:
nano /etc/nginx/sites-available/default
Измените файл, как показано ниже:
upstream http_backend { server 127.0.0.1:5000; keepalive 32; } server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name _; location / { proxy_pass http://http_backend; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; access_log /var/log/do-clojure-web.access.log; error_log /var/log/do-clojure-web.error.log; } }
Сохраните и закройте файл, когда закончите, затем перезапустите службу Nginx и Supervisor, чтобы применить все изменения:
systemctl restart nginx
systemctl restart supervisor
Вы можете проверить статус Nginx и Supervisor с помощью следующей команды:
systemctl status supervisor
Если все в порядке, вы должны увидеть следующий вывод:
? supervisor.service - Supervisor process control system for UNIX Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2017-10-02 10:19:32 EDT; 22min ago Docs: http://supervisord.org Main PID: 397 (supervisord) Tasks: 19 (limit: 4915) CGroup: /system.slice/supervisor.service ??397 /usr/bin/python /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf ??446 /usr/bin/java -jar do-clojure-web.jar Oct 02 10:19:32 debian systemd[1]: Started Supervisor process control system for UNIX. Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,656 CRIT Supervisor running as root (no user in config file) Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,665 INFO Included extra file "/etc/supervisor/conf.d/do-clojure-web.conf" during p Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,821 INFO RPC interface 'supervisor' initialized Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,823 CRIT Server 'unix_http_server' running without any HTTP authentication checkin Oct 02 10:19:39 debian supervisord[397]: 2017-10-02 10:19:39,825 INFO supervisord started with pid 397 Oct 02 10:19:40 debian supervisord[397]: 2017-10-02 10:19:40,890 INFO spawned: 'do-clojure-web' with pid 446 Oct 02 10:19:41 debian supervisord[397]: 2017-10-02 10:19:41,893 INFO success: do-clojure-web entered RUNNING state, process has stayed up for
systemctl status nginx
Вывод:
? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2017-10-02 10:19:35 EDT; 26min ago Docs: man:nginx(8) Process: 425 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 401 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 427 (nginx) Tasks: 2 (limit: 4915) CGroup: /system.slice/nginx.service ??427 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ??429 nginx: worker process Oct 02 10:19:32 debian systemd[1]: Starting A high performance web server and a reverse proxy server... Oct 02 10:19:35 debian systemd[1]: nginx.service: Failed to read PID from file /run/nginx.pid: Invalid argument Oct 02 10:19:35 debian systemd[1]: Started A high performance web server and a reverse proxy server.
Доступ к веб-приложению Clojure
Как только все настроено правильно, пришло время получить доступ к веб-приложению Clojure через веб-браузер.
Откройте веб-браузер и введите URL-адрес http://ваш-ip-адрес, вы будете перенаправлены на домашнюю страницу веб-приложения Clojure, как показано ниже:
Теперь нажмите кнопку «Добавить местоположение», вы должны увидеть следующее изображение:
Здесь укажите значения в поле значения x и значение y, затем нажмите кнопку отправки местоположения. Теперь вы можете просмотреть отправленные вами местоположения, нажав кнопку «Просмотреть все местоположения». Вы должны увидеть следующее изображение:
Заключение
В приведенной выше статье мы узнали, как развернуть веб-приложение Clojure с помощью Supervisor и lein. Мы также узнали, как получить доступ к веб-приложению Clojure из удаленного места, настроив Nginx в качестве обратного прокси-сервера. Я надеюсь, что теперь вы можете легко развернуть свое пользовательское приложение с помощью Clojure, Supervisor и lein. Не стесняйтесь спрашивать что-нибудь, если у вас есть какие-либо вопросы.