Spring Boot学习笔记-Nginx+Jar包部署项目

写在前面

  之前用Spring Boot写的获取英雄联盟战绩的小项目,只是上传到了Github上,Github地址:lol-api。一直没时间部署到服务器上。今天,找时间部署好了,网址是:api.51carry.com。具体的接口使用文档还没写。需要说明的是,部署的这台服务器,以前已经搭建好了环境(JDK + Nginx + Tomcat + Mysql),如果没搭建环境可以自行搭建,推荐使用oneinstack一键搭建脚本。因为是以Jar包形式部署,可以使用SpringBoot内置的Tomcat容器,所以Tomcat不需要自己另外装,我装是因为之前部署过其它项目。


准备工作

  项目内的Spring Boot配置文件需要添加如下配置:

1
2
3
4
5
6
7
8
server:
port: 9090 #因为我之前启动了Tomcat,不能继续使用8080,这里按你所需的端口设置
use-forward-headers: true
tomcat:
remote-ip-header: x-forwarded-for
protocol-header: x-forwarded-proto
port-header: X-Forwarded-Port
#其它设置是让Tomcat去Http头信息去获取协议信息,而不是从HttpServletRequest

  将你测试完成的项目打成Jar包(查看之前的文章),上传到服务器的目录,上传可通过FTP、SFTP、SCP等等。我这里上传到/data/wwwroot/api.51carry.com/下,并将Jar包改名为lol.jar


运行项目

  运行项目,如果直接使用java -jar lol.jar的方式,不是很方便,是在前台运行的,下面就通过使用Linux下的nohup命令实现在后台运行我们的Spring Boot项目。

nohup 命令
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ][ & ]
描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 &到命令的尾部。

  通过使用nohup java -jar lol.jar &命令,来使我们的lol.jar在后台运行。为了方便管理,我们可以使用Shell来编写一些简单的脚本。
  启动应用的脚本:

1
2
#!/bin/bash
nohup java -jar lol.jar &

  关闭应用的脚本:

1
2
3
4
5
6
7
8
9
#!/bin/bash
PID=$(ps -ef | grep lol.jar | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
echo Application is already stopped
else
echo kill $PID
kill $PID
fi

  接着,我们需要赋予这两个脚本的权限:

1
chmod 755 start.sh stop.sh

  最后,我们执行以下命令后台运行项目:

1
./start.sh

运行结果如下:
运行结果


实时查看日志

  查看运行日志肯定是非常必要的,在上一步执行完毕start.sh,输出一个提示nohup: appending output to 'nohup.out'。其中,nohup.out就是我们项目运行所输出的日志。我们可以使用如下命令实时查看日志:

1
tail -f nohup.out

显示如下:

Ctrl + C关闭查看。


Nginx配置

  这一部分,因为我之前已经将域名api.51carry.com以A记录解析到了这台服务器,所以我直接也配置了server_name为该域名,这样就可以通过域名访问我们的Spring Boot项目

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name api.51carry.com;
#access_log /data/wwwlogs/api.51carry.com_nginx.log combined;

location / {
proxy_pass http://127.0.0.1:9090; #这里的端口记得改成项目对应的哦
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就可以了。

测试

  浏览器打开http://api.51carry.com,显示如下界面:

  没错,这就是我的首页,哈哈哈,本来想写接口说明的,懒的还没写。
  好了,下面在测试一下接口能不能使用吧,测试的这个接口是通过游戏昵称来查询该昵称都在哪些大区有角色,并返回基本信息:

  测试完毕,配置成功。


疑问与猜想

  配置的过程中,有些疑问,我觉得需要记录下来,如果有大牛能指点,那是最好不过了。猜想总归是猜想,不要当真。

  1. 使用War包部署和使用Jar包部署,哪个才是部署Spring Boot项目的最佳实践?或者说两种部署方式各自的优势与劣势是什么?

    现在水平的我,认为Jar包的方式是最佳实践,因为Spring Boot就是一个微框架,打包成一个Jar包,直接内置了Java Web容器,只要环境里配置好了Java环境,就直接可以部署项目,也符合Spring Boot微框架的定位。

  2. 之前通过War包部署的Java Web项目,静态文件,如cssjsimage等,可以通过Nginx配置,使静态文件直接走Nginx,而缓解Tomcat的压力,那么,Spring Boot项目,我这里直接将所有请求都交给了它处理。我有疑问的是,Spring Boot是否有动静态分离的功能,静态资源直接访问,动态资源才走Web容器?或者是在Nginx也可以直接配置?

    这单纯的就是个猜想,下去我再慢慢查资料吧。

  以上,仅仅是我自己的疑问,只是在搜索引擎简单的搜索了一下,没找到结果,所以才记录下来。其中,猜想只代表我自己的观点,请不要当真。当然,如果您可以解决我的疑惑,真的感激不尽。


小结

  以上,就是我的部署过程,如果您对我这个查询英雄联盟战绩的小项目感兴趣,还烦请去点个star,谢谢。项目的地址:lol-api
  个人博客:https://www.howieli.cn 和个人CSDN博客: http://blog.csdn.net/howieli_1995


参考资料

Author: HowieLi
Link: https://www.howieli.cn/posts/springboot-jar-nginx-deploy.html
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.