SpringBoot项目部署上云

上云课代表
  • 收获赞:68
  • 擅长领域:实战派常驻搬运工,为您搜寻有用好玩的阿里云产品实践

本文为第一期「实战派」有奖征文优秀作品,在ECS或轻量应用服务器上通过宝塔面板实现SpringBoot项目,并使用域名公网访问。

作者:AnonyEast

一、场景介绍

在Java开发过程中,当我们的SpringBoot项目已经在本地完成开发,想要通过一个网址来访问到我们的项目时,就可以选择将项目部署到阿里云ECS云服务器或轻量应用服务器上,并绑定好域名,这样就能通过一个网址随时随地访问自己开发的项目了。

二、目标读者

  • 目标读者群体:需要将SpringBoot项目部署上云并通过网址随时随地访问的开发者。

  • 技术背景:对阿里云云服务器产品的基本使用有一定了解的Java开发人员。

三、前提条件

  1. 为使项目部署过程可视化,降低部署难度,本文通过宝塔面板完成SpringBoot项目部署上云。您需要在云服务器上安装最新版本的宝塔面板,并搭建好Apache/Nginx以及数据库环境。

宝塔面板官方网站:https://www.bt.cn

  1. 您需要有一个自己的域名,并完成实名认证,若您的云服务器地域在中国内地,还需要对域名完成备案。

注册域名:https://help.aliyun.com/document_detail/54068.html

域名实名认证:https://help.aliyun.com/document_detail/101438.html

域名备案:https://help.aliyun.com/document_detail/61819.html

  1. 您需要知道如何配置ECS云服务的安全组或轻量应用服务器的防火墙,完成端口放行操作,否则可能因端口未放行的原因导致项目部署后无法访问。

以下两个官方文档可以帮助您学习端口放行的操作,请根据您产品的类型阅读:

添加安全组规则(云服务器ECS):https://help.aliyun.com/document_detail/25471.html

管理防火墙(轻量应用服务器):https://help.aliyun.com/document_detail/59086.html

四、环境准备

  1. 本地开发环境要求

  • IDE:IntelliJ IDEA

  • 依赖管理工具:Maven

  1. 云服务器需要安装的软件

  • 宝塔面板最新版本

  • Apache/Nginx

  • JDK

  • 数据库

  1. 可配置DNS解析的域名一个,并想好这个项目的网址。

五、操作步骤

步骤一:对前端代码进行打包

说明

Tips:只有前后端分离的项目,才需要对前端代码单独打包,非前后端分离项目可以跳过本步骤。

  1. 修改前端代码中定义的后端访问地址为本项目的网址

如下代码是我前端项目中指定的后端请求地址,即Tomcat的访问路径,一共有3个。其中生产环境的地址就是项目部署到服务器后的后端请求地址,在没有特殊需求的时候这个地址就是项目的网址。

let api = {
  local_api: "http://127.0.0.1:8103",//本地开发环境
  dev_api: "http://172.16.26.234:8103",//局域网开发环境
  prod_api: "http://stu.example.com"//生产环境
}

我们需要将后端地址修改为生产环境的地址,这样项目部署到服务器后才能正常向后端发送请求。

Vue.prototype.$server = api.prod_api; //全局配置后台地址
  1. 进行前端项目打包

以Vue项目为例,在前端项目路径下使用终端执行以下命令,可以对前端项目进行构建(Build),俗称打包,打包后的文件会生成在dist文件夹下。

npm run build
  1. 将打包好的前端文件放入后端

将dist文件夹下的文件复制到SpringBoot项目的src/main/resources/static下,如图所示。

image.png

步骤二:对SpringBoot代码进行打包

说明

SpringBoot代码即后端代码,我们需要将SpringBoot代码打成jar包。

  1. 修改pom.xml文件

在SpringBoot项目pom.xml文件中的<project>标签中的任意一行添加如下代码,设置本项目进行打包操作时要打成jar包。

<packaging>jar</packaging>
  1. 开始打包

在IntelliJ IDEA的Maven面板中,运行Lifecycle中的package,开始将项目打包为jar包。

如果不想在打包过程中进行单元测试,可以点击“跳过测试”按钮,然后再运行package命令,当测试代码较多时,跳过单元测试可以大幅提高打包速度。

image.png

运行package命令后,可以在控制台看到一些输出的信息,当看到Build Success时则打包完成了。

[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ stuinfo-query ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ stuinfo-query ---
[INFO] Building jar: D:\Development\Developer\Java\Java-Projects\IndependentProject\StudentInfoQuery\target\stuinfo-query-0.0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.4.1:repackage (repackage) @ stuinfo-query ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  27.158 s
[INFO] Finished at: 2022-05-02T09:36:43+08:00
[INFO] ------------------------------------------------------------------------
  1. 查看打包好的jar包

打包好的jar包存放在项目根目录的target目录下,最终我们需要将这个jar包部署到云服务器上运行。

image.png

步骤三:添加域名解析

现在,我们需要把我们准备好的域名完成DNS解析,将项目的网址解析到自己的云服务器上。下面的步骤以本项目为例,演示如何进行域名解析。

  1. 查看云服务器的公网IP

云服务器的公网IP地址可以在控制台查看,以下图这台轻量应用服务器为例,8.210.xxx.xxx就是这台服务器的公网IP地址。

image.png
  1. 在DNS解析控制台添加解析记录

前往管理您域名的DNS解析控制台,添加一条A记录,将二级域名的记录值设置为您云服务器的公网IP。

image.png

步骤四:在宝塔面板完成项目部署

  1. 创建项目运行目录

登录宝塔面板,在网站存放路径新建一个目录,作为本项目的运行目录,然后将项目的jar包上传到该目录。下图示例中服务器的网站存放路径是/www/wwwroot,项目运行根目录是/www/wwwroot/stu.example.com。

image.png
  1. 添加网站

在“网站”-“Java项目”中添加Java项目。

image.png

以上设置中,必须配置的参数有:

  • 项目jar路径:选择刚刚上传的jar包的路径。

  • 项目端口:项目在服务器上的运行端口,此端口需要在服务器防火墙中放行,确保可以外网访问。

  • 项目JDK:选择已经安装的JDK即可,首次进入Java项目面板会提示安装。

  • 项目执行命令:如果没有特殊需求,不要做任何改动,这是Spring Boot的启动参数。

  • 绑定域名:输入本项目的网址,且确保该网址已经解析到云服务器的公网IP上,否则会无法使用域名进行访问。

设置完成,点击提交后,可以看到刚刚添加的项目。

image.png
  1. 检查运行状态

打开该项目的设置,在项目日志一栏,可以看到本项目的一些日志信息,这些日志与本地开发时控制台上的输出信息是一样的,我们可以通过这个日志检查的项目状态。如果没有看到报错信息,则项目是正常运行的。

image.png

至此,项目已经在宝塔面板完成部署,并成功运行!

六、方案验证

现在,您可以使用任何终端设备,直接在浏览器输入您的项目网址,访问到您刚刚部署的SpringBoot项目。

image.png

七、常见问题

  1. 项目在本地运行没有问题,部署到云服务器后无法与后端通信。

请检查前端代码中是否已经将后端访问地址修改为了项目网址,而不是localhost。

  1. 项目部署到云服务器后无法连接数据库。

请检查application.yaml中的数据源配置,如果数据库地址设置的是localhost,则云服务器上也必须安装与本地开发环境一致的数据库,否则会找不到数据源。