Spring Boot学习笔记-Nginx+Jar包部署项目
写在前面
之前用Spring Boot写的获取英雄联盟战绩的小项目,只是上传到了Github上,Github地址:lol-api。一直没时间部署到服务器上。今天,找时间部署好了,网址是:api.51carry.com。具体的接口使用文档还没写。需要说明的是,部署的这台服务器,以前已经搭建好了环境(JDK + Nginx + Tomcat + Mysql),如果没搭建环境可以自行搭建,推荐使用oneinstack一键搭建脚本。因为是以Jar包形式部署,可以使用SpringBoot内置的Tomcat容器,所以Tomcat不需要自己另外装,我装是因为之前部署过其它项目。
准备工作
项目内的Spring Boot
配置文件需要添加如下配置:
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
来编写一些简单的脚本。
启动应用的脚本:
#!/bin/bash
nohup java -jar lol.jar &
关闭应用的脚本:
#!/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
接着,我们需要赋予这两个脚本的权限:
chmod 755 start.sh stop.sh
最后,我们执行以下命令后台运行项目:
./start.sh
运行结果如下:

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

Ctrl + C
关闭查看。
Nginx配置
这一部分,因为我之前已经将域名api.51carry.com
以A记录解析到了这台服务器,所以我直接也配置了server_name
为该域名,这样就可以通过域名访问我们的Spring Boot项目
。
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,显示如下界面:
没错,这就是我的首页,哈哈哈,本来想写接口说明的,懒的还没写。
好了,下面在测试一下接口能不能使用吧,测试的这个接口是通过游戏昵称来查询该昵称都在哪些大区有角色,并返回基本信息:
测试完毕,配置成功。
疑问与猜想
配置的过程中,有些疑问,我觉得需要记录下来,如果有大牛能指点,那是最好不过了。猜想总归是猜想,不要当真。
- 使用
War
包部署和使用Jar
包部署,哪个才是部署Spring Boot
项目的最佳实践?或者说两种部署方式各自的优势与劣势是什么?现在水平的我,认为
Jar
包的方式是最佳实践,因为Spring Boot
就是一个微框架,打包成一个Jar
包,直接内置了Java Web
容器,只要环境里配置好了Java
环境,就直接可以部署项目,也符合Spring Boot
微框架的定位。 - 之前通过
War
包部署的Java Web
项目,静态文件,如css
、js
、image
等,可以通过Nginx
配置,使静态文件直接走Nginx
,而缓解Tomcat
的压力,那么,Spring Boot
项目,我这里直接将所有请求都交给了它处理。我有疑问的是,Spring Boot
是否有动静态分离的功能,静态资源直接访问,动态资源才走Web
容器?或者是在Nginx
也可以直接配置?这单纯的就是个猜想,下去我再慢慢查资料吧。
以上,仅仅是我自己的疑问,只是在搜索引擎简单的搜索了一下,没找到结果,所以才记录下来。其中,猜想只代表我自己的观点,请不要当真。当然,如果您可以解决我的疑惑,真的感激不尽。
小结
以上,就是我的部署过程,如果您对我这个查询英雄联盟战绩的小项目感兴趣,还烦请去点个star
,谢谢。项目的地址:lol-api。
个人博客:https://www.howieli.cn 和个人CSDN博客: http://blog.csdn.net/howieli_1995。
参考资料
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!