Clojure是一种用于JVM的现代通用编程语言,专注于操作系统中的并发编程。Clojure使您能够利用现有的JVM基础架构,包括工具、库和应用程序服务器。
本指南将介绍使用supervisor和Nginx在Clojure中部署简单web应用程序的过程。
条件:运行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和Supervisor
默认情况下,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应用程序
首先,您需要从git存储库下载示例Clojure项目。您可以使用git clone命令行实用程序轻松下载它,如下所示:
git clone https://github.com/do-community/do-clojure-web.git
下一步是使用Leiningen编译和运行这个Clojure项目。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 Web应用程序环境
接下来,您需要为Clojure web应用程序创建一个目录结构。您可以使用以下命令执行此操作:
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 web应用程序的符号链接:
cd /var/www/html/do-clojure-web/app/
ln -s do-clojure-web-0.1.0-standalone.jar do-clojure-web.jar
Clojure web应用程序现在可以使用了。您可以使用以下命令检查它是否正在运行:
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 [email protected]:5000
配置Nginx和监控器
接下来,您需要配置Supervisor以将Clojure应用程序作为服务进行管理。您可以通过在Supervisor配置目录下创建do-clojule-web.conf文件来实现这一点,如下所示:
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 web应用程序只接受来自本地主机的连接。您可以使用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 Web应用程序
一旦一切配置正确,就可以通过web浏览器访问Clojure web应用程序了。
打开web浏览器并键入URLhttp://your-ip-address,您将被重定向到Clojure web应用程序主页,如下所示:
![图片[1]_在Debian 9上部署Clojure Web应用程序_马特资源网](http://www.iamlz.com/wp-content/uploads/2025/04/1744082835297.png)
现在,单击添加位置按钮,您应该看到下图:
![图片[2]_在Debian 9上部署Clojure Web应用程序_马特资源网](http://www.iamlz.com/wp-content/uploads/2025/04/1744082849584.png)
在这里,提供x值和y值字段中的值,然后单击提交位置按钮。现在,您可以通过单击“查看所有位置”按钮来查看您提交的位置。您应该看到以下图像:
![图片[3]_在Debian 9上部署Clojure Web应用程序_马特资源网](http://www.iamlz.com/wp-content/uploads/2025/04/1744082866190.png)
结论
在上面的文章中,我们学习了如何使用Supervisor和lein部署Clojure web应用程序。我们还学习了如何通过将Nginx设置为反向代理服务器从远程位置访问Clojure web应用程序。我希望您现在可以使用Clojure、Supervisor和lein轻松部署您的自定义应用程序。
暂无评论内容