zoukankan      html  css  js  c++  java
  • Spring Boot框架开发的Java项目在CentOS7上的部署

    需求:上级拿来一份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的路径,有会的请留言给我,谢谢!

  • 相关阅读:
    【5min+】 秋名山的竞速。 ValueTask 和 Task
    int16、int32、int64的范围
    C#实现的一些常见时间格式
    C# WPF抽屉效果实现(C# WPF Material Design UI: Navigation Drawer & PopUp Menu)
    如何为.NETCore安装汉化包智能感知
    .NetCore学习笔记:三、基于AspectCore的AOP事务管理
    C#设计模式学习笔记:简单工厂模式(工厂方法模式前奏篇)
    .net core3.0 webapi搭建(一)
    [Abp vNext 源码分析]
    WPF 控件功能重写(ComboBox回车搜索)
  • 原文地址:https://www.cnblogs.com/godfather007/p/10122956.html
Copyright © 2011-2022 走看看