部署SpringBoot项目
spring boot框架内嵌了tomcat/jetty(可以自行配置使用哪种web容器或者不使用),使用spring-boot-maven-plugin插件将项目打成可执行jar包便能够使用java -jar的命令完成部署。以下介绍如何利用maven打包项目然后将项目部署至服务器上。
1、
<packaging>jar</packaging> ... <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
其中:
<artifactId>eurekaserver</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging>
定义了项目最终以jar的形式打包,最终包的名字是eurekaserver-0.0.1-SNAPSHOT.jar。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
表示使用spring-boot-maven-plugin插件,该插件能够将spring boot应用打包为可执行的jar或war文件,打的包里会有maven依赖的jar包和spring boot的启动类,因此打成的包会比较大。
2、对项目打包:
方法一:如果在本地安装了maven,那么可以直接用cmd/终端进入项目根目录使用mvn package命令(最好先mvn clean一下)打包;
方法二:intellij内嵌了maven,可以直接选择对项目执行maven命令。
3、使用Xftp工具将打成的包传至服务器:
- 进入eurekaserver项目目录,进入target找到打好的jar包;
- 上传至服务器对应的文件夹
4、使用xshell启动项目
第一种:
直接进入jar包目录,执行命令:nohup java -jar onlile-1.0.0-SNAPSHOT.jar &
第二种:
创建项目服务启动脚本,启动项目
nohup ./脚本文件.sh &
创建项目服务启动脚本,通过./server.sh start启动jar包,项目./server.sh stop停止jar包
首先,在jar包所在目录新建server.sh脚本文件,其内容如下:
#!/bin/bash cd `dirname $0` CUR_SHELL_DIR=`pwd` CUR_SHELL_NAME=`basename ${BASH_SOURCE}` #修改这里jar包名即可 JAR_NAME="xxxxxx.jar" JAR_PATH=$CUR_SHELL_DIR/$JAR_NAME #JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:PermSize=128m" JAVA_MEM_OPTS="" #SPRING_PROFILES_ACTIV="-Dspring.profiles.active=dev" SPRING_PROFILES_ACTIV="" LOG_DIR=$CUR_SHELL_DIR/logs LOG_PATH=$LOG_DIR/${JAR_NAME}.log echo_help() { echo -e "syntax: sh $CUR_SHELL_NAME start|stop" } if [ -z $1 ];then echo_help exit 1 fi if [ ! -d "$LOG_DIR" ];then mkdir "$LOG_DIR" fi if [ ! -f "$LOG_PATH" ];then touch "$LOG_DIR" fi if [ "$1" == "start" ];then # check server PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'` if [ -n "$PIDS" ]; then echo -e "ERROR: The $JAR_NAME already started and the PID is ${PIDS}." exit 1 fi echo "Starting the $JAR_NAME..." # start nohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH >> $LOG_PATH 2>&1 & COUNT=0 while [ $COUNT -lt 1 ]; do sleep 1 COUNT=`ps --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}' | wc -l` if [ $COUNT -gt 0 ]; then break fi done PIDS=`ps --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}'` echo "${JAR_NAME} Started and the PID is ${PIDS}." echo "You can check the log file in ${LOG_PATH} for details." elif [ "$1" == "stop" ];then PIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'` if [ -z "$PIDS" ]; then echo "ERROR:The $JAR_NAME does not started!" exit 1 fi echo -e "Stopping the $JAR_NAME..." for PID in $PIDS; do kill $PID > /dev/null 2>&1 done COUNT=0 while [ $COUNT -lt 1 ]; do sleep 1 COUNT=1 for PID in $PIDS ; do PID_EXIST=`ps --no-heading -p $PID` if [ -n "$PID_EXIST" ]; then COUNT=0 break fi done done echo -e "${JAR_NAME} Stopped and the PID is ${PIDS}." else echo_help exit 1 fi
其中只需修改包名,即JAR_NAME的属性值即可。
然后为其添加执行权限,其命令如下:
chmod +x server.sh
启动jar包,命令:
./server.sh start
停止 jar包,命令:
./server.sh stop
如果执行启动命令,报错:-bash: ./server.sh: /bin/bash^M: bad interpreter: No such file or directory
执行命令:sed -i "s/\r//" server.sh
然后重新执行启动命令即可。原因是:通过复制到文档中编写,需要转换一下。
5、外网访问服务器启动的eureka服务
访问地址:服务器公网IP:eureka服务设置的端口
注:如果外网不能访问
第一:查看端口是否配置了安全组:入方向、出方向
第二:查看端口是否添加了放通策略
通过命令:iptables -L -n 命令查看端口是否放通;
通过命令:iptables -I INPUT 5 -p tcp --dport 端口 -j ACCEPT 添加端口放通策略。