Введение
Clojure — современный, динамичный и мощный язык программирования на платформе Java. Он основан на языке программирования LISP и имеет компиляторы, которые позволяют ему работать в средах выполнения Java и.Net. Clojure помогает создавать системы с нуля, не касаясь кода Java напрямую. В настоящее время он используется многими крупными компаниями, включая Walmart и Puppet Lab.
В этом руководстве мы объясним, как развернуть веб-приложение Clojure в Ubuntu 20.04 LTS.
Предпосылки
- Сервер под управлением Ubuntu 20.04 LTS.
- Допустимое доменное имя указывало на IP-адрес сервера.
Если вы хотите развернуть веб-приложение Clojure на удаленном сервере, продолжайте чтение, в противном случае пропустите первый абзац «Подключение к серверу» и прочитайте следующий.
Подключение к серверу
Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется ваше имя пользователя и пароль для аутентификации. Чтобы подключиться к серверу как root, введите следующую команду:
ssh root@IP_DEL_SERVER
Далее вам нужно будет ввести пароль пользователя root.
Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить root на свое имя пользователя:
ssh nome_utente@IP_DEL_SERVER
Затем вам будет предложено ввести пароль пользователя.
Стандартный порт для подключения по ssh — 22, если ваш сервер использует другой порт, вам нужно будет указать его с помощью параметра -p, затем введите следующую команду:
ssh nome_utente@IP_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.