天天看点

部署Springboot项目到阿里云服务器序正文

目录

  • 正文
    • 1. springboot连接服务器数据库
      • 1.1 数据库迁移
      • 1.2 远程连接测试
    • 2. springboot打包发布到服务器
      • 2.1 开放远程端口
      • 2.1 打包本地项目
      • 2.2 发布项目
    • 3. 总结及源码

【前言】:

本地跑一个springboot(IDEA)、vue(HBuilder),都是超占内存,且伤感的一件事,虽然笔记本性能还可以,拖得起,但是狂暴模式散热影响敲代码的心情;今天计划:

  1. 数据库:把数据库弄到阿里云上,springboot远程连阿里云的

    mysql5

    数据库

    (需要和本地mysql8做一下兼容,把本地sql建表也移动上去)

  2. 部署后端:把

    springboot

    项目打成

    war

    包丢在阿里云的

    Apache-tomcat

    (springboot内置tomcat要处理一下,因为将会用到外部tomcat)

  3. 前端部署:Vue模块有两个方案

    (3.1)

    cnpm run build

    打包

    dist

    文件夹直接丢

    Apache

    目录(资源路径匹配可能会有问题,打包时处理)

    (3.2)部署到

    nignx

    代理服务上(我的云服务器暂时没有设置,看情况)

【系统】:

  • 本地 :win10 + IDEA + MySQL8 + HBuilder
  • 连接:Xftp + Xshell + Navicat
  • 云服务器:阿里云ETC控制台 + LAMP +MySQL5
  • 技术栈:springboot + Vue + Linux

【总结】:

一步一步做就好了,今天不是coder是运维了,哈哈哈哈~

正文

1. springboot连接服务器数据库

1.1 数据库迁移

Navicat优点:远程连接数据库、本地数据库;图中分别是我连接了:

  • aliyun数据库、腾讯云数据库
  • 本地数据库、本地SQLite数据库
    部署Springboot项目到阿里云服务器序正文

本次只需要把本地mysql8导出sql建表,在云服务器运行建表语句就可以了,很方便。

步骤1:本地导出sql(左图)

步骤2:云数据库,新建同名数据库,导入建表语句(右图)

部署Springboot项目到阿里云服务器序正文
部署Springboot项目到阿里云服务器序正文

步骤3:重新连接数据库(刷新),表与数据均建好了,超级方便:

部署Springboot项目到阿里云服务器序正文

参考配置:

为了解决:服务器Mysql5.7【中文字符乱码】问题

1.2 远程连接测试

因为前端配置的

mysql-connector

运行版本为

runtime

,这里不必要过多考虑jar包问题。

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
           
  1. springboot只修改

    application.properties

    如下:
    ## 端口号
    server.port=8090
    ## 数据源配置
    ## 本地mysql8
    #spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot_mysql?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF8
    #spring.datasource.username=root
    #spring.datasource.password=wy123456
    #spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    ## 服务器mysql5
    spring.datasource.url=jdbc:mysql://47.93.50.90:3306/springboot_mysql?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF8
    spring.datasource.username=root
    spring.datasource.password=wy123456
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    
    spring.jpa.hibernate.ddl-auto=update
    spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
    spring.jpa.show-sql=true
    
               
  2. 运行测试:

    http://localhost:8090/user/findUserById?id=12

    返回内容:
    {“address”:“上海”,“age”:21,“id”:12,“name”:“wang”,“password”:123}

springboot远程连接服务器数据库就算完成了! ?

2. springboot打包发布到服务器

2.1 开放远程端口

  1. 强调因为发布在外部tomcat中,我们

    application.properties

    文件配置是8090无效,
  2. 在运控制台开放窗口(阿里云步骤如下,其他平台需要自己百度)

    找到云服务实例-》更多-》网络和安全组-》安全组配置-》配置规则-》添加安全组规则

    我在云tomcat 开放的端口号是8080,0.0.0.0/0是允许所有网址访问:
    部署Springboot项目到阿里云服务器序正文
    配置完成效果:
    部署Springboot项目到阿里云服务器序正文

2.1 打包本地项目

参考:部署springboot项目到云服务器的两种方式(jar+war)

1、jar包部署方式使用Spring Boot 自带的Tomcat,因为Spring Boot 应用自带Tomcat,所以可直接在服务器运行jar文件

2、war包部署方式则使用云服务器里的Tomcat,此时需要移除Spring Boot 自带的Tomcat插件

这里用

war

方式部署,需要在本地确认或修改一些配置:

  1. pom中打包规则为

    war

    形式:
    部署Springboot项目到阿里云服务器序正文
    主要依赖:(2.移除嵌入式tomcat、3.添加servlet-api的依赖)
    部署Springboot项目到阿里云服务器序正文
  2. 移除嵌入式tomcat插件(

    provided

    :编译、测试时将依赖的包加入本工程的classpath,运行时不加入,可以理解成运行时不使用Spring Boot 自带的Tomcat)
    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <!-- 移除嵌入式tomcat插件 -->
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
               
  3. 添加servlet-api的依赖,最新版本点这查看,原理:maven里面在编译阶段是依赖servlet api的,所以当然要包含。但是在运行阶段是放到 tomcat 容器的,所以要设置好servlet依赖的scope。

    不建议使用最新版,放正我是遇到bug和spring版本冲突,用的3.1稳定版

    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    
               
  4. 修改启动类,并重写初始化方法
    package com.springboot.three;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
    
    @SpringBootApplication
    public class ThreeApplication extends SpringBootServletInitializer {//继承自动启动项
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
            return application.sources(ThreeApplication.class);//你的项目启动类名
        }
        public static void main(String[] args) {
            SpringApplication.run(ThreeApplication.class, args);
        }
    
    }
    
               
  5. 四步打包生成war包

    (1)打开右侧

    maven

    (2)找到

    Lifecycle

    (3)双击运行

    package

    (5)在项目下target文件夹下找到同名

    war

    部署Springboot项目到阿里云服务器序正文

2.2 发布项目

参考:[阿里云服务器] war包远程发布到阿里云Tomcat服务器
  1. 在项目下target文件夹下找到同名

    war

    包,右键

    copy Path

    复制路径

    参考路径:

    D:\myworkspace\1GitHub_cungudafa\demothree\target\three-0.0.1-SNAPSHOT.war

  2. 将本地war用xftp上传到服务器Tomcat/webapps/目录下:
    参考路径:

    /usr/local/apache-tomcat-9.0.16/webapps

    强拽即可上传:
    部署Springboot项目到阿里云服务器序正文
  3. 在xhell中重启tomcat服务器,
    cd ~
    cd /usr/local/apache-tomcat-9.0.16/bin
    ./startup.sh
               
  4. 在浏览器运行:

    http://cungudafa.top:8080/three-0.0.1-SNAPSHOT/user/list

    注意:注意:注意!!!

    (1)8080为云外部端口号,

    application.properties

    外部tomcat会用外部tomcat端口号访问,

    server.port=8090

    端口会失效

    (2)名称对应,导出的war包全名称 (可以随便更改这个名字,直接重命名,访问路径对应改变)

    (3)访问:

    http://ip地址 : 外部tomcat端口号/war包全名/访问路径

    (4)上传war之后,必须重启tomcat

    运行效果:

    部署Springboot项目到阿里云服务器序正文
    我是直接在xftp中改名,改名后访问:

    http://cungudafa.top:8080/springboot/user/list

    部署Springboot项目到阿里云服务器序正文
    部署Springboot项目到阿里云服务器序正文

    这样自定义服务器api接口就发布成功了!?

    后期管理:

    (1)Navicat直接管理数据,

    (2)Vue 前端修改api地址:

    本地测试api接口 改为 服务器api接口:

    原:

    axios.defaults.baseURL="http://localhost:8090"

    修改为:

    axios.defaults.baseURL="http://cungudafa.top:8080/springboot"

    部署Springboot项目到阿里云服务器序正文

3. 总结及源码

Github

后端:https://github.com/cungudafa/Springboot ----Day9

前端:https://github.com/cungudafa/Vue/

继续阅读