Как развернуть веб-приложение Clojure с помощью Nginx в Ubuntu 20.04

12 set 2022 7 min di lettura
Как развернуть веб-приложение Clojure с помощью Nginx в Ubuntu 20.04
Indice dei contenuti

Введение

Clojure — современный, динамичный и мощный язык программирования на платформе Java. Он основан на языке программирования LISP и имеет компиляторы, которые позволяют ему работать в средах выполнения Java и.Net. Clojure помогает создавать системы с нуля, не касаясь кода Java напрямую. В настоящее время он используется многими крупными компаниями, включая Walmart и Puppet Lab.

В этом руководстве мы объясним, как развернуть веб-приложение Clojure в Ubuntu 20.04 LTS.

Предпосылки

  • Сервер под управлением Ubuntu 20.04 LTS.
  • Допустимое доменное имя указывало на IP-адрес сервера.

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

Подключение к серверу

Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется ваше имя пользователя и пароль для аутентификации. Чтобы подключиться к серверу как root, введите следующую команду:

ssh [email protected]_DEL_SERVER

Далее вам нужно будет ввести пароль пользователя root.

Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить root на свое имя пользователя:

ssh [email protected]_DEL_SERVER

Затем вам будет предложено ввести пароль пользователя.

Стандартный порт для подключения по ssh — 22, если ваш сервер использует другой порт, вам нужно будет указать его с помощью параметра -p, затем введите следующую команду:

ssh [email protected]_DEL_SERVER -p PORTA

Установить зависимости

Перед запуском рекомендуется обновить системные пакеты до последней версии. Вы можете обновить их с помощью следующей команды:

apt-get update -y

После обновления всех пакетов установите Java и другие необходимые пакеты, выполнив следующую команду:

apt-get install git curl default-jdk -y

После установки всех пакетов проверьте установленную версию Java с помощью следующей команды:

java -version

Вы должны получить следующий результат:

openjdk version "11.0.9.1" 2020-11-04
 OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04)
 OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

После этого вы можете перейти к следующему шагу.

Установите Nginx и супервизор

Далее вам нужно будет установить веб-сервер Nginx и супервизор в системе. Nginx — это веб-сервер, используемый для размещения приложений в Интернете. Supervisor — это клиент-серверная система, которая позволяет пользователям отслеживать и контролировать различные процессы в операционных системах на базе Linux.

Вы можете установить оба пакета с помощью следующей команды:

apt-get install nginx supervisor -y

После установки обоих пакетов вы можете перейти к следующему шагу.

Загрузите приложение Clojure

Во-первых, вам нужно загрузить приложение Clojure из репозитория Git. Вы можете скачать его, выполнив следующую команду:

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

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

Cloning into 'do-clojure-web'...
 remote: Enumerating objects: 37, done.
 remote: Total 37 (delta 0), reused 0 (delta 0), pack-reused 37
 Unpacking objects: 100% (37/37), 6.25 KiB | 399.00 KiB/s, done.

Затем вам нужно будет установить Leiningen в вашей системе. Leiningen — это инструмент автоматизации сборки и управления зависимостями, используемый для создания проектов, написанных на языке программирования Clojure. Вы можете загрузить бинарный пакет Leiningen с помощью следующей команды curl:

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

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

chmod 755 /usr/bin/lein

Затем измените каталог на Clojure и скомпилируйте проект с помощью следующей команды cd:

cd do-clojure-weblein uberjar
lein uberjar

После компиляции проекта вы должны получить следующий вывод:

Retrieving commons-codec/commons-codec/1.6/commons-codec-1.6.jar from central
 Retrieving javax/servlet/servlet-api/2.5/servlet-api-2.5.jar from central
 Retrieving org/clojure/java.jdbc/0.2.3/java.jdbc-0.2.3.jar from central
 Retrieving com/h2database/h2/1.3.170/h2-1.3.170.jar from central
 Retrieving org/eclipse/jetty/jetty-server/7.6.13.v20130916/jetty-server-7.6.13.v20130916.jar from central
 Retrieving org/eclipse/jetty/orbit/javax.servlet/2.5.0.v201103041518/javax.servlet-2.5.0.v201103041518.jar from central
 Retrieving org/eclipse/jetty/jetty-continuation/7.6.13.v20130916/jetty-continuation-7.6.13.v20130916.jar from central
 Retrieving org/eclipse/jetty/jetty-http/7.6.13.v20130916/jetty-http-7.6.13.v20130916.jar from central
 Retrieving org/eclipse/jetty/jetty-io/7.6.13.v20130916/jetty-io-7.6.13.v20130916.jar from central
 Retrieving org/eclipse/jetty/jetty-util/7.6.13.v20130916/jetty-util-7.6.13.v20130916.jar from central
 Retrieving medley/medley/0.5.3/medley-0.5.3.jar from clojars
 Retrieving clout/clout/2.1.0/clout-2.1.0.jar from clojars
 Retrieving compojure/compojure/1.3.1/compojure-1.3.1.jar from clojars
 Retrieving ring/ring-core/1.3.2/ring-core-1.3.2.jar from clojars
 Retrieving instaparse/instaparse/1.3.4/instaparse-1.3.4.jar from clojars
 Retrieving crypto-random/crypto-random/1.2.0/crypto-random-1.2.0.jar from clojars
 Retrieving crypto-equality/crypto-equality/1.0.0/crypto-equality-1.0.0.jar from clojars
 Retrieving clj-time/clj-time/0.6.0/clj-time-0.6.0.jar from clojars
 Retrieving ring/ring-codec/1.0.0/ring-codec-1.0.0.jar from clojars
 Retrieving ring/ring-defaults/0.1.2/ring-defaults-0.1.2.jar from clojars
 Retrieving ring/ring-ssl/0.2.1/ring-ssl-0.2.1.jar from clojars
 Retrieving ring/ring-headers/0.1.1/ring-headers-0.1.1.jar from clojars
 Retrieving ring/ring-anti-forgery/1.0.0/ring-anti-forgery-1.0.0.jar from clojars
 Retrieving hiccup/hiccup/1.0.2/hiccup-1.0.2.jar from clojars
 Retrieving ring/ring-jetty-adapter/1.3.2/ring-jetty-adapter-1.3.2.jar from clojars
 Retrieving ring/ring-servlet/1.3.2/ring-servlet-1.3.2.jar from clojars
 Compiling do-clojure-web.handler
 Created /root/do-clojure-web/target/do-clojure-web-0.1.0.jar
 Created /root/do-clojure-web/target/do-clojure-web-0.1.0-standalone.jar

После этого вы можете перейти к следующему шагу.

Создайте структуру каталогов для приложения Clojure.

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

Сначала создайте структуру каталогов с помощью следующей команды mkdir:

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/
cp /root/do-clojure-web/db/do-clojure-web.h2.db /var/www/html/do-clojure-web/app/db/

Затем установите соответствующие разрешения и права собственности с помощью следующей команды chown:

chown -R www-data:www-data /var/www/html/do-clojure-web/
chmod -R 775 /var/www/html/do-clojure-web/

Затем измените каталог в приложении Clojure и создайте символическую ссылку вашего приложения clojure:

cd /var/www/html/do-clojure-web/app/
ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar

Затем проверьте, работает ли ваше приложение, выполнив следующую команду:

java -jar do-clojure-web.jar

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

2020-12-05 16:11:09.603:INFO:oejs.Server:jetty-7.xy-SNAPSHOT
 2020-12-05 16:11:09.730:INFO:oejs.AbstractConnector:Started [email protected]:5000

После этого вы можете перейти к следующему шагу.

Настройте Supervisor для приложения Clojure

Существует несколько способов управления приложением Clojure как службой. В этом руководстве мы будем использовать Supervisor для управления приложением Clojure. Вы можете настроить его, создав файл в каталоге конфигурации Supervisor.

Давайте создадим следующий файл в вашем любимом редакторе, здесь мы используем nano:

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/do-clojure-web.app.log

Сохраните и закройте файл, затем перезапустите службу Supervisor, чтобы применить изменения:

systemctl restart supervisor

Затем включите службу Supervisor для запуска при перезагрузке системы:

systemctl enable supervisor

Теперь вы можете проверить статус 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 Sat 2020-12-05 16:12:48 CET; 6s ago
 Docs: http://supervisord.org
 Main PID: 6341 (supervisord)
 Tasks: 21 (limit: 2286)
 Memory: 101.1M
 CGroup: /system.slice/supervisor.service

В этот момент служба Supervisor запущена, и ваше приложение прослушивает порт 5000. Вы можете проверить это с помощью следующей команды:

ss -antpl | grep 5000

Вы должны получить следующий результат:

LISTEN 0 50 [::ffff:127.0.0.1]:5000 *:* users:(("java",pid=6359,fd=5))

После этого вы можете перейти к следующему шагу.

Настройте Nginx для приложения Clojure

Затем вам нужно будет настроить Nginx в качестве обратного прокси -сервера для обслуживания приложения Clojure. Сначала создайте файл конфигурации виртуального хоста Nginx с помощью следующей команды:

nano /etc/nginx/sites-available/clojure.conf

Добавьте следующие строки, измените параметр server_name, добавив свой домен:

upstream http_backend {
 server 127.0.0.1:5000;
 keepalive 32;
 }
 server {
 listen 80;
 root /var/www/html;
 index index.html index.htm index.nginx-debian.html;

 server_name tuo_dominio.com;

 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 с помощью следующей команды:

ln -s /etc/nginx/sites-available/clojure.conf /etc/nginx/sites-enabled/

Итак, проверьте Nginx на наличие синтаксических ошибок с помощью следующей команды:

nginx -t

Вы должны получить следующий результат:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
 nginx: configuration file /etc/nginx/nginx.conf test is successful

Наконец, перезапустите службу Nginx, чтобы применить изменения:

systemctl restart nginx

После этого вы можете продолжить вход в приложение Clojure.

Войдите в приложение Clojure

Теперь откройте веб-браузер и войдите в приложение Clojure, используя URL-адрес http://your_domain.com . Вы должны увидеть панель инструментов приложения Clojure.

Нажмите кнопку «Добавить местоположение ».

Укажите желаемые значения и нажмите кнопку отправки местоположения.

Теперь нажмите кнопку « Просмотреть все местоположения ». Ваше местоположение должно быть добавлено.

Вывод

Поздравляем! вы успешно развернули приложение Clojure с Nginx в качестве обратного прокси-сервера на сервере Ubuntu 20.04 LTS Focal Fossa. Теперь вы можете попробовать распространять свое пользовательское приложение с помощью Clojure.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.