需求:上级拿来一份Spring Boot框架开发的Java项目代码让我在服务器上运行起来,只说了一句该框架是自带了Tomcat(不用重新安装Tomcat),一份代码下有两个项目(一个管理端项目,一个用户端项目,等会会细说)。我是一名运维,在上家公司只接触过在Tomcat下部署Java项目,自带Tomcat的没接触过,目前这个公司都是php软件攻城狮,所以只能靠自己了。幸好在一个学习交流群里碰到一位Java软件攻城狮,在该攻城狮的热心指导下项目成功运行。下面是详细步骤,知识点扩展及总结将在最后写出:

1.配置Java环境(建议用Oracle的JDK,系统自带的openjdk用起来不稳定,具体原因请自行查阅资料)

tar xf jdk-8u144-linux-x64.tar.gz # 解压JDK
vim /etc/profile # 配置环境变量,在该文件的最下面添加如下三行

export JAVA_HOME=/path/to/java
export PATH=\$JAVA_HOME/bin:\$PATH
export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar

source /etc/profile # 使环境变量立即生效,然后在命令行输入java -version 或javac,如果有正确输出则表示JDK安装成功
2.安装maven(因我是在服务器上打包,故需要安装maven,是一个采用纯Java编写的开源项目管理工具,具体用法请自行查阅资料)

wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz  # 官网下载maven

tar xf apache-maven-3.6.0-bin.tar.gz # 解压maven

vim /etc/profile  # 配置环境变量,在该文件最下面添加如下两行

export MAVEN_HOME=/path/to/apache-maven-3.6.0
export PATH=\$MAVEN_HOME/bin:\$PATH

source /etc/profile  # 使环境变量立即生效,然后在命令行输入mvn -version或mvn -v,如果有正确输出则表示maven安装成功

3.修改项目配置

application.yml文件定义了端口及所需加载的配置等信息,我这里加载的是application-pro.yml,该文件里又定义了日志、数据库及redis等等的信息(因篇幅问题,截图不完整)

在项目根目录下的pom.xml里定义了打包后的报名及打包格式等等的信息

4.打包 (该过程简单的话就是将代码编译成字节码,让java虚拟机认识并能执行。mvn的具体用法请自行查阅资料)

在pom.xml文件的同级目录下执行mvn install,执行成功会出现‘’BUILD SUCCESS‘’这样一行的信息并且进入target目录下可以看到打包生成的jar包。

5.部署管理(可以用java命令直接在命令行下启动,亦可写成管理脚本启动,启动之前先执行sql,并确保数据库及redis可正常连接,否则无法正常启动)

命令行启动方式:

我这里为了后期管理方便又新建了一个build目录,并将jar包和管理脚本放在该目录下,日志文件也会在该目录下生成

管理方式:./server.sh start|stop|restart

可以先用ps -ef |grep java、ss -tunlp |grep PID查看是否有进程及端口是否监听,如果都正常,开头说到我这一份代码下有两个项目,访问方式分别是:http://ip:port(管理端)、http://ip:port/a/b(用户端)

6.用nginx做代理访问

管理端nginx配置:(访问方式http://www.server.com)

server {
  listen 80;
  server_name www.server.com;  # 根据需要将域名换成所需要的即可
  charset utf-8;
  autoindex off;

  location / {
    proxy_pass http://ip:port;  # 根据需要将ip、port换成所需要的即可
    proxy_set_header Host \$host;
    proxy_set_header X-Real-IP \$remote_addr;
    proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
  }
}

用户端nginx配置:(访问方式http://www.user.com)

server {
  listen 80;
  server_name www.user.com;
  charset utf-8;
  autoindex off;

  location / {  # 因该用户端项目不在默认路径下,此location用来rewrite至项目路径/a/b
    rewrite ^ /a/b;
  }

  location /a/b {
    proxy_pass http://ip:port;
    proxy_set_header Host \$host;
    proxy_set_header X-Real-IP \$remote_addr;
    proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
  }

  location ~ .(gif|jpg|jpeg|png|bmp|swf|css|js|images)\$ {  # 因该用户端项目不在默认路径下,会造成访问不到静态文件,此location用来匹配静态文件的访问
    root /path/to/static;
  }
}

进程管理脚本

```

#!/bin/sh
#chkconfig: 2345 16 93
#description:wms
## java env
export JAVA_HOME=/usr/local/src/jdk1.8.0_144
export JRE_HOME=$JAVA_HOME/jre

## service name
APP_NAME=bootlg_shop
APP_VERSION=0.0.2

SERVICE_DIR=$(cd `dirname $0`; pwd)
SERVICE_NAME=$APP_NAME-$APP_VERSION
JAR_NAME=$SERVICE_NAME-SNAPSHOT.jar
PID=$SERVICE_NAME\.pid

cd $SERVICE_DIR

case "$1" in
start)
nohup $JRE_HOME/bin/java -Xms512m -Xmx1024m -jar $JAR_NAME --spring.profiles.active=pro >/dev/null 2>&1 &
echo $! > $SERVICE_DIR/$PID
echo "=== start $SERVICE_NAME"
;;

stop)
kill `cat $SERVICE_DIR/$PID`
rm -rf $SERVICE_DIR/$PID
echo "=== stop $SERVICE_NAME"

sleep 3
P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "=== $SERVICE_NAME process not exists or stop success"
else
echo "=== $SERVICE_NAME process pid is:$P_ID"
echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID"
kill -9 $P_ID

fi

;;

restart)
$0 stop
sleep 2
$0 start
echo "=== restart $SERVICE_NAME"
;;

*)
## restart
$0 stop
sleep 2
$0 start
;;

esac
exit 0

```

至此项目部署完毕,以下为知识点扩展及总结:

1.项目不用nginx做代理依然可以使用域名访问,但此时需将端口改为80,并做域名解析

2.项目是打成jar还是war是有区别的,有兴趣的可以进一步学习

3.目前访问用户端时域名后会自动补上路径,例如我输入http://www.user.com回车,浏览器会自动显示http://www.user.com/a/b。现在有一个新需求想实现,就是我输入http://www.user.com让它访问到http://www.user.com/a/b的页面,但是想让它在http://www.user.com的域名后不显示/a/b的路径,有会的请留言给我,谢谢!

Spring Boot框架开发的Java项目在CentOS7上的部署的更多相关文章

  1. 基于Spring Boot框架开发的一个Mock

    背景:在项目后端接口开发还未完成,我们无法进行自动化接口用例的调试,希望与开发同步完成接口自动化用例的编写及调试,待项目转测后,可以直接跑自动化用例,提高测试效率. 选用的maven + Spring ...

  2. Spring Boot 框架@Temporal(TemporalType.DATE)

    使用spring boot框架开发项目时,遇到这样一个问题: 查询pgSQL数据库中表A中某date数据类型的列B,想得到YYYY-MM-DD格式的日期,结果返回的为时间戳(长整型数据). 解决办法: ...

  3. 10个Spring Boot快速开发的项目,接私活利器(快速、高效)

    本文为大家精选了 码云 上优秀的 Spring Boot 语言开源项目,涵盖了企业级系统框架.文件文档系统.秒杀系统.微服务化系统.后台管理系统等,希望能够给大家带来一点帮助:) 1.项目名称:分布式 ...

  4. spring boot + Thymeleaf开发web项目

    "Spring boot非常适合Web应用程序开发.您可以轻松创建自包含的HTTP应用.web服务器采用嵌入式Tomcat,或者Jetty等.大多数情况下Web应用程序将使用 spring- ...

  5. spring boot 框架 启动更新项目,以及生成 "实体_"文件

    1.更新项目 clean  --->  更新项目 ---> package--->refresh 即可.(这几个步骤一个不能够少) 2.项目中的类的依赖关系存在,但是无法导入依赖 m ...

  6. 使用Spring Boot和Gradle创建AngularJS项目

    Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的 ...

  7. Spring Boot(1)——开发你的第一款Spring Boot应用(Edition1)

    Spring Boot(1)——开发你的第一款Spring Boot应用(Edition1) 准备工作: java:java 8 或者 java 9: Spring框架:5.0.8.RELEASE或以 ...

  8. [原创]Spring boot 框架构建jsp web应用

    说明 Spring boot支持将web项目打包成一个可执行的jar包,内嵌tomcat服务器,独立部署 为支持jsp,则必须将项目打包为war包 pom.xml中设置打包方式 <packagi ...

  9. 【SpringBoot】Spring Boot,开发社区讨论交流网站首页。

    初识Spring Boot,开发社区讨论交流网站首页. 文章目录 初识Spring Boot,开发社区讨论交流网站首页. 1.项目简介 2. 搭建开发环境 JDK Apache Maven Intel ...

随机推荐

  1. Maven--传递性依赖和依赖范围

    依赖范围不仅可以控制依赖与三种 classpath 的关系,还对传递性依赖产生影响. 假设 A 依赖于 B,B依赖于 C,我们说 A 对于 B 是第一直接依赖,B 对于 C 是第二直接依赖,A 对于 ...

  2. 决策树分类回归,ID3,c4.5,CART,及其Python代码

    决策树模型 内部节点表示一个特征或者属性,叶子结点表示一个类.决策树工作时,从根节点开始,对实例的每个特征进行测试,根据测试结果,将实例分配到其子节点中,这时的每一个子节点对应着特征的一个取值,如此递 ...

  3. C语言实现整数转字符串

    #include <stdio.h> void intToString(int N,char arr[]){ //仅支持有符号4字节的int类型,范围-2147483648 - 21474 ...

  4. iOS 一个新方法:- (void)makeObjectsPerformSelector:(SEL)aSelector;

    NSArray 里面的一个方法, - (void)makeObjectsPerformSelector:(SEL)aSelector: 这是一个类似于执行for循环的方法,可以这样用,当需要删除一个v ...

  5. 嵌入式开发为什么选择C语言作为开发语言?

    了解嵌入式开发的朋友们都非常的清楚其核心的开发语言为C语言,C语言在嵌入式开发的过程中占有十分重要的地位,可以说两者之间“你中有我,我中有你”.但是有很多人会想,有那么多的开发语言为什么会单单的选择C ...

  6. hibernate中session.flush()

    flush()session flush在commit之前默认都会执行, 也可以手动执行,他主要做了两件事: 1) 清理缓存. 2) 执行SQL. flush: Session 按照缓存中对象属性变化 ...

  7. 图像的手绘效果(Python)

    PIL库,Python Image Library PIL库是一个具有强大图像处理能力的第三方库 在命令行下的安装方法:pip install pillow from PIL import Image ...

  8. eclipse配置svn若干点

    eclipse 或者针对java的,或者eclipse for php ,都行. 可以直接在线安装svn插件,也可以下载好插件后自己配置. ------------ 一下转载自http://blog. ...

  9. Servlet中转发和重定向的路径问题以及表单提交路径问题

    一.请求转发与响应重定向的种类 有两种方式获得Servlet转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDispatcher() ...

  10. kaggle——绝地求生游戏最终排名预测

    绝地求生游戏最终排名预测 知识点 数据读取与预览 数据可视化 构建随机森林预测模型 导入数据并预览 先导入数据并预览.本次实验同样来源于 Kaggle 上的一个竞赛: 绝地求生排名预测 ,由于原始数据 ...