「技术架构」使用NGINX部署Spring Boot

简介: 「技术架构」使用NGINX部署Spring Boot


介绍

Spring / Spring引导应用程序的部署总是与Apache Tomcat相关联,而且由于框架本身运行在嵌入式Tomcat web服务器之上,所以它似乎是默认的解决方案。我一直认为这是一个问题,因为我对Apache的解决方案不是很熟悉,而且它处理配置和设置的方式对我来说似乎有些过火。我决定抛弃它,支持NGINX,到目前为止,这个解决方案没有任何缺陷。要在ssl安全的NGINX下部署Spring Boot JAR(或WAR)工件,您必须这样做。

准备Spring引导应用程序

除了通过适当的servlet参数设置资源/应用程序的上下文路径外,在应用程序本身中实际上没有什么可做的。属性文件:

服务器:

server:

servlet:

contextPath= /myapplication

上下文路径定义了我们应用程序的入口点,并且为我们创建的每个应用程序设置不同的路径是一种总体的好习惯。指定此参数后,应用程序将在127.0.0.1:8080/myapplication上可用,而不是默认的127.0.0.1:8080/,并且对于NGINX而言,此单路径更改将非常方便。

更新应用程序配置后,我们可以生成一个准备部署的JAR或WAR文件,并使用FTP或SSH将其上传到我们的服务器,以便稍后我们可以在远程计算机上运行它。

准备服务器环境

在我的项目中,我使用了运行Debian 9的虚拟机,并进行了库存设置和配置。为了使一切正常运行,我们需要安装:

  • Java,运行应用程序
  • UFW,以保护我们的服务器端口
  • NGINX,处理Web请求

对于Java,我们可以安装开源OpenJDK:

  • sudo apt update
  • sudo apt install java

或Oracle提供的专有Java JDK:

# Required to add PPA's

sudo apt install software-properties-common

# Adding a PPA providing Oracle's JDK

sudo apt-add-repository ppa:webupd8team/java

sudo apt update

# Replace '8' with desired java version

sudo apt install oracle-java8-installer

对于其他软件,在Debian(可能还有其他基于Debian的系统)上,这些命令应该可以完成以下工作:

sudo apt update

sudo apt install ufw nginx

安装完所有组件后,我们可以启用UFW,以阻止除NGINX处理的所有传入连接之外的所有传入连接:

sudo systemctl start ufw

sudo systemctl enable ufw

# 'Full' can be replaced with 'HTTP' or 'HTTPS' to allow only selected protocol s

udo ufw allow 'Nginx Full'

现在我们可以启用并启动NGINX:

sudo systemctl start nginx

sudo systemctl enable nginx

将Spring Boot应用程序作为后台服务运行

在NGINX准备提供数据时,我们需要运行我们的应用程序。我们当然可以通过一个简单的java -jar myapplication.jar命令来执行此操作,但是此解决方案无法使我们的应用程序保持活动状态并提供各种启动功能,因此最好创建一个后台服务,以使我们的应用程序永远在其中运行。的背景。为此,我们需要创建一个服务文件。Debian正在运行systemd管理器,因此我们的文件将是/etc/systemd/system/myapplication.service。对于其他Linux发行版,系统服务路径可能不同。我们的文件如下所示:

[Unit]

Description= # Place a descriptive application name here

After=syslog.target

After=network.target[Service]

User= # Define a user account that will own our app

Type=simple

[Service]

ExecStart=/usr/bin/java -jar # Provide /path/to/file/myapplication.jar

Restart=always

StandardOutput=syslog

StandardError=syslog

SyslogIdentifier= # A short identifier for system journal, f. e. 'myapplication'

[Install]

WantedBy=multi-user.target

保存文件后,可以使用默认的systemd服务管理器启动服务:

# This will start service from file we created earlier

sudo systemctl start myapplication.service

# To see if it's running we can check system journal

journalctl -u myapplication -b

如果一切正常,我们的应用程序现在应在后台运行,所有日志应写入系统日志。

配置NGINX代理请求

如果我们的应用程序启动,我们现在可以将NGINX配置为反向代理请求。我们已经安装了所有内容,因此现在我们需要创建一个配置文件,这将使我们的NGINX实例服务器请求正确的方式。为此,我们需要创建一个文件/etc/nginx/sites-available/myserver.com,在其中可以将myserver.com替换为服务器名,应用程序名或其他用于标识配置的文件。创建的文件应如下所示:

server {

# NGINX will listen on port 80 for both IP V4 and V6

listen 80;

listen [::]:80;

# Here we should specify the name of server

server_name myserver.com;

# Requests to given location will be redirected

location /myapplication {

# NGINX will pass all requests to specified location here

proxy_pass http://localhost:8080/;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_set_header X-Forwarded-Port $server_port;

}

}

创建我们的配置后,我们可以使用NGINX内置的测试工具,通过调用以下命令来检查它是否可以正确应用:

sudo nginx -t

如果测试没有返回任何错误,我们可以安全地重新启动NGINX服务:

sudo systemctl restart nginx

测试反向代理

现在,为了测试我们的设置,我们可以将示例请求发送到http:// <server> / myapplication / <endpoint>。NGINX将收到请求,然后将/ myapplication / <endpoint>重定向到我们的Spring Boot应用程序,该应用程序在端口8080上本地运行。Spring的上下文路径设置为/ myapplication,因此我们的应用程序将仅接收/ <endpoint>部分, 调用指定的URL。

为HTTPS连接启用SSL

使用NGINX,我们可以将所有HTTP连接重定向到安全HTTP。如果我们的服务器没有SSL证书,最简单的方法是让我们加密CertBot(https://certbot.eff.org/),该证书可以从apt安装在Debian上,并自动配置NGINX来提供HTTPS服务 ,并使用一些简单的命令重定向所有HTTP通信:

sudo apt-get install certbot python-certbot-nginx -t stretch-backports

sudo certbot --nginx certonly

sudo certbot renew --dry-run

如果我们已经有了生成的SSL证书,则无需运行Certbot并获取一个新的证书。相反,我们可以更改NGINX配置以使用已经存在的证书。在线上有很多教程可以指导这一过程。

摘要

在NGINX代理后面运行Spring Boot应用程序是使我们的应用程序运行的一种相当不错的方法,它解决了Tomcat产生的许多问题。传递启动参数可以轻松得多,可以将日志写入系统日志,可以在单个配置文件中完成SSL设置,并且我们的应用程序可以作为标准系统服务运行。此设置也比Tomcat部署轻得多。

相关文章
|
2月前
|
Java 应用服务中间件 Maven
如何将 Spring Boot 应用程序部署为 WAR?
如何将 Spring Boot 应用程序部署为 WAR?
138 1
|
2月前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
101 5
|
13天前
|
决策智能 数据库 开发者
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
本项目旨在解决智能体的“超级入口”问题,通过开发基于意图识别的多智能体框架,实现用户通过单一交互入口使用所有智能体。项目依托阿里开源的Qwen2.5大模型,利用其强大的FunctionCall能力,精准识别用户意图并调用相应智能体。 核心功能包括: - 意图识别:基于Qwen2.5的大模型方法调用能力,准确识别用户意图。 - 业务调用中心:解耦框架与业务逻辑,集中处理业务方法调用,提升系统灵活性。 - 会话管理:支持连续对话,保存用户会话历史,确保上下文连贯性。 - 流式返回:支持打字机效果的流式返回,增强用户体验。 感谢Qwen2.5系列大模型的支持,使项目得以顺利实施。
198 8
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
|
1月前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
36 6
|
1月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
137 5
|
1月前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
58 5
|
1月前
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
43 5
|
1月前
|
Java 应用服务中间件 Docker
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
38 2
|
2月前
|
Java Linux Docker
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
55 3
|
3月前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
196 5

热门文章

最新文章