本文为第一期「实战派」有奖征文优秀作品,在ECS或轻量应用服务器上通过宝塔面板实现SpringBoot项目,并使用域名公网访问。
作者:AnonyEast
一、场景介绍
在Java开发过程中,当我们的SpringBoot项目已经在本地完成开发,想要通过一个网址来访问到我们的项目时,就可以选择将项目部署到阿里云ECS云服务器或轻量应用服务器上,并绑定好域名,这样就能通过一个网址随时随地访问自己开发的项目了。
二、目标读者
目标读者群体:需要将SpringBoot项目部署上云并通过网址随时随地访问的开发者。
技术背景:对阿里云云服务器产品的基本使用有一定了解的Java开发人员。
三、前提条件
为使项目部署过程可视化,降低部署难度,本文通过宝塔面板完成SpringBoot项目部署上云。您需要在云服务器上安装最新版本的宝塔面板,并搭建好Apache/Nginx以及数据库环境。
宝塔面板官方网站:https://www.bt.cn
您需要有一个自己的域名,并完成实名认证,若您的云服务器地域在中国内地,还需要对域名完成备案。
注册域名:https://help.aliyun.com/document_detail/54068.html
域名实名认证:https://help.aliyun.com/document_detail/101438.html
域名备案:https://help.aliyun.com/document_detail/61819.html
您需要知道如何配置ECS云服务的安全组或轻量应用服务器的防火墙,完成端口放行操作,否则可能因端口未放行的原因导致项目部署后无法访问。
以下两个官方文档可以帮助您学习端口放行的操作,请根据您产品的类型阅读:
添加安全组规则(云服务器ECS):https://help.aliyun.com/document_detail/25471.html
管理防火墙(轻量应用服务器):https://help.aliyun.com/document_detail/59086.html
四、环境准备
本地开发环境要求
IDE:IntelliJ IDEA
依赖管理工具:Maven
云服务器需要安装的软件
宝塔面板最新版本
Apache/Nginx
JDK
数据库
可配置DNS解析的域名一个,并想好这个项目的网址。
五、操作步骤
步骤一:对前端代码进行打包
Tips:只有前后端分离的项目,才需要对前端代码单独打包,非前后端分离项目可以跳过本步骤。
修改前端代码中定义的后端访问地址为本项目的网址
如下代码是我前端项目中指定的后端请求地址,即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; //全局配置后台地址
进行前端项目打包
以Vue项目为例,在前端项目路径下使用终端执行以下命令,可以对前端项目进行构建(Build),俗称打包,打包后的文件会生成在dist文件夹下。
npm run build
将打包好的前端文件放入后端
将dist文件夹下的文件复制到SpringBoot项目的src/main/resources/static下,如图所示。
步骤二:对SpringBoot代码进行打包
SpringBoot代码即后端代码,我们需要将SpringBoot代码打成jar包。
修改pom.xml文件
在SpringBoot项目pom.xml文件中的<project>标签中的任意一行添加如下代码,设置本项目进行打包操作时要打成jar包。
<packaging>jar</packaging>
开始打包
在IntelliJ IDEA的Maven面板中,运行Lifecycle中的package,开始将项目打包为jar包。
如果不想在打包过程中进行单元测试,可以点击“跳过测试”按钮,然后再运行package命令,当测试代码较多时,跳过单元测试可以大幅提高打包速度。
运行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] ------------------------------------------------------------------------
查看打包好的jar包
打包好的jar包存放在项目根目录的target目录下,最终我们需要将这个jar包部署到云服务器上运行。
步骤三:添加域名解析
现在,我们需要把我们准备好的域名完成DNS解析,将项目的网址解析到自己的云服务器上。下面的步骤以本项目为例,演示如何进行域名解析。
查看云服务器的公网IP
云服务器的公网IP地址可以在控制台查看,以下图这台轻量应用服务器为例,8.210.xxx.xxx就是这台服务器的公网IP地址。
在DNS解析控制台添加解析记录
前往管理您域名的DNS解析控制台,添加一条A记录,将二级域名的记录值设置为您云服务器的公网IP。
步骤四:在宝塔面板完成项目部署
创建项目运行目录
登录宝塔面板,在网站存放路径新建一个目录,作为本项目的运行目录,然后将项目的jar包上传到该目录。下图示例中服务器的网站存放路径是/www/wwwroot,项目运行根目录是/www/wwwroot/stu.example.com。
添加网站
在“网站”-“Java项目”中添加Java项目。
以上设置中,必须配置的参数有:
项目jar路径:选择刚刚上传的jar包的路径。
项目端口:项目在服务器上的运行端口,此端口需要在服务器防火墙中放行,确保可以外网访问。
项目JDK:选择已经安装的JDK即可,首次进入Java项目面板会提示安装。
项目执行命令:如果没有特殊需求,不要做任何改动,这是Spring Boot的启动参数。
绑定域名:输入本项目的网址,且确保该网址已经解析到云服务器的公网IP上,否则会无法使用域名进行访问。
设置完成,点击提交后,可以看到刚刚添加的项目。
检查运行状态
打开该项目的设置,在项目日志一栏,可以看到本项目的一些日志信息,这些日志与本地开发时控制台上的输出信息是一样的,我们可以通过这个日志检查的项目状态。如果没有看到报错信息,则项目是正常运行的。
至此,项目已经在宝塔面板完成部署,并成功运行!
六、方案验证
现在,您可以使用任何终端设备,直接在浏览器输入您的项目网址,访问到您刚刚部署的SpringBoot项目。
七、常见问题
项目在本地运行没有问题,部署到云服务器后无法与后端通信。
请检查前端代码中是否已经将后端访问地址修改为了项目网址,而不是localhost。
项目部署到云服务器后无法连接数据库。
请检查application.yaml中的数据源配置,如果数据库地址设置的是localhost,则云服务器上也必须安装与本地开发环境一致的数据库,否则会找不到数据源。