SpringBoot 部署在linux上

今天中午本来已经在有道云上写好了博客,但是没有代码图片和效果图,那个保存不了,回家打开发现全没了,只有标题。于是重新撸了一遍,所有都是从0开始。很值得学习,也遇到了些问题。不多说开始了,今天主要学习部署项目。
微服务流行的今天,不知道从何时开始每个java后台人员去面试的时候简历上都有一条,熟悉并使用springcloud框架。这也许是微服务大行其道带来的效应,就算你不会去看下博客也能很快上手。大多数如今都会使用,但是极少数会去部署这些微服务,因为只需要负责写接口,然后交给组长或者运维就可以了。如果你学会了部署是不是比他们多一个加分项?部署的方式很多,比如使用docker创建dockerfile文件的形式,这种比较流行,后续有机会搞一下,这里介绍下用脚本启动。

一,项目准备工作

spring boot项目准备
我这里使用的是eclipse,当然你用idea也是差不多的步骤。
新建一个maven项目,因为只是演示,所以不需要太多功能。
下面是我的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  
  <groupId>com.safe</groupId>
  <artifactId>jifeng</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  
	 <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	
  <name>jifeng</name>
  
    <!--依赖版本管理-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Edgware.SR1</spring-cloud.version>
        <projectlombok.version>1.16.18</projectlombok.version>
    </properties>
    
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
  </dependencies>
  
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
	<repositories>
	        <repository>
	            <id>aliyun</id>
	            <name>aliyun</name>
	            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
	        </repository>
	</repositories>
</project>

需要注意到的是要用到打包的插件,还有阿里的仓库。
然后是一个启动类

package com.safe.jifeng;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication //Spring Boot核心注解,用于开启自动配置
public class DemoApplication {

    @RequestMapping("/")
    String index(){
      return "Hello Spring Boot";
    }
  
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

就这些,右键run as java Application控制台就会打印一些信息,默认使用8080端口。
在浏览器输入localhost:8080,就会看到Hello Spring Boot的字样,说明运行成功。

二,打包项目

接下来就需要将项目打包,打包可以打包成war或者jar都可以,自己在pom设置。我一般打包成jar。怎么打包?可以使用命令行,mvn clean 然后mvn install 当然mvn package也可以。我比较懒,采用的插件,直接右键maven run install。第一次打包会去下插件,等下好后就开始打包。

springcloud微服务部署 linux_项目部署


之前打包遇到两个问题,

一个是项目用的jre环境,结果不能打包,改成jdk就好了。
另一个是有的文件字符有问题,极个别,现将文件内容拷出来,删除文件,新建拷进来,重新打包就好了。

这里可以看到打包后的路径,还有打包成功的提示。至此,打包完成。

三,服务端准备

jar要想在服务器上运行,就必须需要java环境支持。首先

还记得上次我说过的mobaxterm吗?这里就体现了他的强大。

只需要连接远程服务器,勾下左下的选项,你cd到哪个目录左边的目录也会随之变化。

首先java -version 发现竟然有openjdk11.我就不用另外配置了,我项目使用的1.8.记住向上兼容于原理,如果你们的没有那就自行安装和项目一致的版本或者更高的。

cd /usr/local/

mkdir web

将jifeng-0.0.1-SNAPSHOT.jar拖拽到左边的目录下就行。

当然你也可以使用ftp上传。

我们看下当前主机的ip

springcloud微服务部署 linux_jar_02

三,项目启动

我们都知道启动一个jar的命令 java -jar xxx.jar

这里我们可以使用java -jar /usr/local/web/jifeng-0.0.1-SNAPSHOT.jar

的确输出了和之前控制台一样的效果。

我们在浏览器输入192.168.220.129:8080

springcloud微服务部署 linux_jar_03


说明项目已经部署好了。但是这样就完事了吗?并没有,因为我们当前是停留在这个界面,如果ctrl+c项目就停止了,而且不能有其他操作,所以我们需要优化。

我这里直接把命令写进脚本,下次直接脚本让他后台启动就行。

touch serstar.sh chmod -R 777 serstar.sh

vim serstar.sh

依次是创建一个脚本 并赋予可执行的权限,编辑脚本

springcloud微服务部署 linux_jar_04

后台执行jar并将结果输出到制定文件,这个目录和文件要提前建好。

如果需要更新jar,需要现将jar停止。

springcloud微服务部署 linux_项目部署_05


这里只是这样,还不够完善,但是也够用,如果是项目中记得备份,将上一次的备份到一个目录里面,然后再用新的文件覆盖旧的即可。

我按照上面的serstop.sh有点问题,我自己也没学过shell,这是从网上拷的,报的是pid没有和kill使用有问题。我下次琢磨后再修改。