侧边栏壁纸
博主头像
小明锅博主等级

没错,我就是小明,不过已经长大了,成为一名码农,在搬砖的同时,喜欢分享Java的编程知识,本网站致力于一站式后端人员开发,解决码农日常问题,挤出更多moyu时间

  • 累计撰写 15 篇文章
  • 累计创建 7 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

Springboot工程Linux服务器部署教程

小明锅
2024-04-15 / 0 评论 / 0 点赞 / 83 阅读 / 3,115 字 / 正在检测是否收录...

一、背景

​ 上一篇文章,我们部署了Linux服务器环境,其实就是为了本次部署项目准备的,大家如果没有相关环境,可以去看一下上一篇文章:Linux环境搭建
本文主要是部署springboot工程项目,包括前端以及后端接口,前端是直接部署到Nginx,而后端由于springboot是不需要tomcat的,所以可以直接通过jar运行启动。如果你是第一次部署项目,或者公司项目不大,这篇文章对你参考作用很大,可以开箱即用,欢迎继续阅读。

二、项目架构

本次项目工程部署是一个抽奖服务,前端是纯HMTL,利用JS对接口进行HTTP请求,前端与后端工程分离,前端包括静态文件部署在Nginx,实现动静分离。后端是基于springboot实现的抽奖接口,数据库采用MySQL。项目架构流程如下:

image-1713162243419

浏览器请求项目地址,默认请求到Nginx,Nginx直接返回静态页面,对于前端页面请求的接口(/api/XXX)通过Nginx会进行拦截匹配,Nginx定义了location,对于路径含有api都是会进行转发,通过反向代理路由转发到真正的后端对接口:ip:9901/xxx。之后,后端服务处理业务逻辑请求数据库,并把接口处理结果返回给前端工程。

三、后端项目部署

由于我们是基于springboot开发,后端工程部署很简单,直接打包成jar就可以了,但是有些细节要注意一下。

打包工程:
image-1713162251866

将工程java包上传到服务器:

image-1713162263017

直接在该目录启动启动jar包:java -jar
image-1713162271441

image-1713162294461
后端服务启动完成,我们可以单独调用接口去测试后端服务是否正常,请求路径:http://ip:9901/lottery/draw
image-1713162319357

以上已经完成了后端工程的部署了,但是有个问题,我们直接在jar工程启动,会发现工程启动日志都在该终端页面,一旦关闭终端,服务就关闭了,所以我们需要将后端服务在后台启动,然后将日志记录在一个文件中。

后端服务后台运行并将日志打印到指定文件 log.log:

nohup java -jar x.jar >log.log &

这样就完成我们后端的服务部署了。

四、前端项目部署

前端工程部署也是比较简单,比较麻烦的可能是需要配置Nginx路由拦截转发,这个可能需要熟悉Nginx的相关知识,不然会无从下手,不了解的Nginx可以看一下给文章:
nignx负载均衡

4.1 Nginx的路由匹配规则

这里也会在简单介绍一下Nginx的路由匹配规则:

优先级:(location =) > (location 完整路径) > (location ^~ 路径) > (location ,* 正则顺序) > (location 部分起始路径) > (/)

以 = 开头,表示精确匹配;如只匹配根目录结尾的请求,后面不能带任何字符串。
以^~ 开头,表示如果该符号后面的字符是最佳匹配,采用该规则,当匹配成功后,不再进行后续的查找。
以~ 开头,表示区分大小写的正则匹配;
以~* 开头,表示不区分大小写的正则匹配
以/ 开头,通用匹配, 如果没有其它匹配,任何请求都会匹配到

Nginx多个路由匹配的话,就选择匹配最准确的一个返回,但是斜杆(/)在匹配中有是比较特殊的,需要注意一下,下面通过一个例子来说明一下:

配置一: proxy_pass http://mynginx/; 路由结尾有 /

http {
    include       mime.types;
    default_type  application/octet-stream;
 
    # 配置上游服务器,负载均衡
    upstream mynginx{
        server localhost:9901;
    }
 
    server {
		listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /api {
           # proxy_pass mynginx;
           # 路由后面有个 / 
           proxy_pass http://mynginx/;
        }
 
    }
}

实际转发路径:http://ip/api/lottery/draw -> nginx转发路由 -> http://mynginx/lottery/draw == http://localhost:9901/lottery/draw
会发现前端请求路径中的api只是作为匹配参数,最终请求到接口不会带上。

配置二:proxy_pass http://mynginx; 路由结尾没有 /

        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;}

        location / {
            root   html;
            index  index.html index.htm;
        }


        location /api {
           # proxy_pass mynginx;
           # 路由后面没有 / 
           proxy_pass http://mynginx;
        }

实际转发路径:http://ip/api/lottery/draw -> nginx转发路由 -> http://mynginx/api/lottery/draw == http://localhost:9901/api/lottery/draw
会发现如果路由后面没有斜杆(/),前端请求路径中的api会跟着转发路径

所以这一点很重要,新手不注意的话,Nginx配置完成之后,发现接口404。根据上面的规则,我们的后端接口是:http://ip:9901/lottery/draw 是没有api的,所以我们应该采用配置一,路由后面跟斜杠。

4.2 Nginx配置

进入Nginx配置文件,默认是在:/usr/local/nginx/conf文件下,记得修改前,拷贝一份,以防改错了可以恢复。主要添加反向代理地址,以及新增路由匹配,具体配置如下:

    # 配置上游服务器,负载均衡
 upstream mynginx{
         server 127.0.0.1:9901;
     }


 server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;}

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /api {
           # proxy_pass mynginx;
           proxy_pass http://mynginx/;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

配置完成,进入sbin目录下重启Nginx即可:

./nginx -s reload

4.3 Nginx前端工程部署

前端工程部署,只要把前端html文件拷贝到Nginx的html目录下就行,替换首页index文件,我们的其他静态资源全部放到static文件下,所以在index.html 访问静态资源的时候,需要写出相对路径比如访问js:/static/js/jquery-1.10.2.js。

image-1713162348333
image-1713162354743
同样的,将前端工程部署到Nginx,我们也是需要重启Nginx。

五、测试验证

由于Nginx默认是80端口,我们只要在浏览器访问服务器的ip地址就可以了,只要前端资源可以正常展示就行了,对于接口验证,我们可以现在接口工具访问:http://ip/api/lottery/draw 就行。最终测试结果:
image-1713162365209
image-1713162373803

六、总结

本文分阶段部署了整个项目,与实际开发工作也相同,十分适合新手初步部署,也能够深入实战Nginx配置,对于小公司,基本是采用这种原生部署,有实力的公司会借助容器或者自动化部署,不过原理都一样,后续也会同步更新自动部署,欢迎大家转发订阅。

0

评论区