SpringBoot 懒人部署法

💚

本文档适用于基于 MySQL + Spring Boot + Vue 架构的项目,使用 Maven 作为包管理服务,主要使用 IDEA + VS Code 开发

❤️

需要安装 Java8、Maven3.X、Node10、Vue2、MySQL5.7

项目结构

以下是一个典型的 SpringBoot 项目结构
主要是 main 文件夹下的 java 和 resources 文件夹
java 文件夹下是所有的 java 代码
resources 文件夹下的 application.yml
编译完成后的代码在文件夹 target下

├── README.md
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── imzhizi
│   │   │           └── tdd
│   │   │               ├── TddApplication.java
│   │   │               ├── annotation
│   │   │               │   └── CurrentUser.java
│   │   │               ├── config
│   │   │               │   ├── GlobalExceptionHandler.java
│   │   │               │   ├── RedisPoolConfig.java
│   │   │               │   └── WebConfig.java
│   │   │               ├── domain
│   │   │               │   ├── BusinessException.java
│   │   │               │   ├── CodeMsg.java
│   │   │               │   ├── Result.java
│   │   │               │   ├── dto
│   │   │               │   │   ├── LoginDto.java
│   │   │               │   │   └── RegisterDto.java
│   │   │               │   ├── model
│   │   │               │   │   ├── Role.java
│   │   │               │   │   └── User.java
│   │   │               │   └── vo
│   │   │               │       └── UserVo.java
│   │   │               ├── helper
│   │   │               │   └── MD5Helper.java
│   │   │               ├── repository
│   │   │               │   ├── RedisRepo.java
│   │   │               │   ├── UserRepo.java
│   │   │               │   └── redis
│   │   │               │       ├── KeyUser.java
│   │   │               │       ├── OrderKey.java
│   │   │               │       ├── RedisKey.java
│   │   │               │       └── UserKey.java
│   │   │               ├── security
│   │   │               │   ├── AuthenticationInterceptor.java
│   │   │               │   └── CurrentUserArgumentResolver.java
│   │   │               ├── service
│   │   │               │   └── UserService.java
│   │   │               └── web
│   │   │                   ├── DoctorController.java
│   │   │                   └── UserController.java
│   │   └── resources
│   │       ├── application.yml
│   │       └── log4j2.xml
│   └── test
├── target
│   └── tdd.jar
└── tdd.iml

配置文件

对于一个项目来说,为了能够同时在本地开发、同时在服务器上部署,这是它们的配置文件是不同的,因此需要保持多种配置的共存,方便在不同环境下切换。

以下展示的是一个常见的 application.yml 中的内容,会使用 spring: profiles: 定义不同的配置,一下就定义了 prod 和 test 两个 profiles,同时使用 spring: profiles: active: 来定义当前激活哪一个 profiles。

spring:
  profiles:
    active: test
---
spring:
  profiles: shiyu
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/tdd?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
    username: root
    password: 123456
  thymeleaf:
    cache: false

server:
  port: 8080

---
spring:
  profiles: prod
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:33061/tdd?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
    username: root
    password: 123456
  thymeleaf:
    cache: false

server:
  port: 8080

logging:
  level:
    com.imzhizi.tdd: debug

mybatis:
  type-aliases-package: com.imzhizi.tdd.domain.model
  configuration:
    map-underscore-to-camel-case: true
    default-fetch-size: 100
    default-statement-timeout: 30

项目启动

IDEA 启动

可以直接运行 Application.java 文件中的main函数,此时所使用的 profiles 由 application.yml 所定义。

Maven 启动

在一些情况下,不方便使用 IDEA 启动项目,可以直接在命令行。

mvn spring-boot:run -Dspring.profiles.active=test

项目编译

前端部分

💚

本部分讲述是一种将Vue前端托管在后端的方法,thymeleaf 项目可以直接略过该部分

首先需要将前端项目构建为dist项目,构建命令的执行方式取决于项目中 config/index.js 文件中的配置,建议作出以下修改。

assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'assets',

还需要将 config/env.prod.js 中的API地址配置为实际的服务器地址,例如 '"http://112.112.10.xxx"',记得需要单引号扩住双引号。

执行以下命令即可完成项目编译,默认情况下文件build后会在dist文件夹下,如上述配置所示,也可以按需要修改。

npm run build

完成以上两个步骤之后,会得到一个如图的文件夹

然后需要将该部分复制到后端的 resources 文件夹的 static 文件夹中

后端部分

Java项目的 application.yml 配置

Java 项目使用 Maven 编译打包,具体命令如下:

# 直接编译
mvn install
mvn package

# 如果存在单元测试,希望在编译阶段跳过测试
mvn package -Dmaven.test.skip=true

经过这部分的操作,会得到一个 xxx.jar 的包,一般位于 target 文件夹中,如果未自行定义,则应该是类似于 xxx-1.0-SNAPSHOT.jar 的命名,通过在 pom.xml 文件中的 build 添加一下配置可以修改每次编译得到的文件名。

<build>
        <finalName>team</finalName>
        ……
</build>

项目部署

💚

在部署之前,需要实现准备好 MySQL,创建数据库表并导入数据,建议使用 utf8mb4 编码

从上一阶段编译得到的 jar 包可以在服务器上部署,一般通过 scp 或自行通过其他方式上传到服务器上

# 从本地将文件上传至服务器
scp target/team.jar gaomi@172.18.1.xxx:~

# 通过 java -jar 即可执行,但此时是前台运行
java -jar xxxx.jar --spring.profiles.active=prod

# 因此需要使用 nohup 保持服务后台运行
### 这是真正要用的命令
nohup java -jar xxxx.jar --spring.profiles.active=prod &
### 这是真正要用的命令

# 查看项目的运行情况
tail -f nohup.out

附录

使用PM2管理项目

PM2是一个更加现代的服务监控工具,使用 pm2 可以替代 nohup,具体用法可以参考我的博客 https://www.cnblogs.com/imzhizi/p/montior-jar-using-pm2.html

如果服务涉及到小程序或HTTPS

由于小程序要求必须使用域名和HTTPS,因此后端也要做相应的配置,其中包括项目自身和 nginx,可以查看该文章 https://www.cnblogs.com/imzhizi/p/https-server-using-nginx.html

在 Docker 中使用MySQL

如果想要使用 Docker 对MySQL 服务进行区隔,或者直接在服务器上安装MySQL遇到困难,可以参考 https://www.cnblogs.com/imzhizi/p/linux--mysqldocker-install.html

posted @ 2021-06-24 18:51  质子  阅读(172)  评论(0编辑  收藏  举报