【保姆级教程】SpringBoot后端项目在Linux服务器中使用宝塔面板进行Docker部署

本文是为初入前端、后端的小伙伴们准备的保姆级教程,也是我在学习中慢慢摸索出的一套基本流程,内容可能会有不正确的地方,欢迎在评论区指正,作者会持续关注错误之处,并完善这份文档。


前言

本文给出的是基于Linux服务器SpringBoot后端技术栈Java运行环境Docker部署方案,这样的部署方案在第一次的配置之后,可以做到非常方便的重新部署,只需要将新的jar包上传到文件夹,并在终端执行四段运行代码即可,相较于传统的JavaTomcat部署方案,其运行环境相对独立,不会干扰服务器本身的运行环境,并且理论上可以在同一台服务器上部署非常多的后端系统,而不会相互干扰。


服务器准备

1.准备一个云服务器或者本地Linux服务器

这是一些云服务器厂商的官网:腾讯云官网 阿里云官网 华为云官网,各位自行按需选择,并且给服务器安装好Linux系统,建议Linux系统版本选择Centos7.x,对宝塔面板的兼容性更好,如果自己在本地配置Linux服务器,则需要自行配置好各项硬件和软件。

2.为服务器安装宝塔面板

进入宝塔面板官网,按照其中的教程给服务器安装宝塔面板,建议使用在线安装,输入服务器的IP、账号和密码,直接一键安装,安装时建议勾选安装MySQLNginx,其余的可以自行选择安装与否。安装好宝塔面板后,需要确认各端口是否已开启,例如宝塔面板的默认端口、MySQL的默认端口等,并且别忘了把要部署的后端接口也打开,如果没有开启,需要先在服务器的控制台中开启,再在宝塔面板的安全中开启,也就是说服务器本身有一道防火墙,宝塔面板也提供了一道防火墙,两道防火墙都开启,才可以正常访问对应的服务。
服务器安装宝塔面板

3.在服务器中安装Docker并下载镜像

在宝塔面板中点击Docker菜单,如果没有安装过Docker,则会显示安装提示,可以直接点击一键安装(比较省心),也可以在Docker官网中使用脚本方法进行安装(更复杂)。Docker安装完成之后,点开Docker菜单可以看到类似下面这样的页面:
Docker安装完成
镜像页面中,点击搜索镜像,输入java8,点击搜索,选择图中框选的镜像进行拉取,这个镜像是用来构建必要的Java环境。
下载镜像

4.安装Redis

由于RuoYi后端系统需要使用Redis,所以需要在软件商店菜单中搜索下载Redis,一般选择最新版本直接安装即可。安装好后的页面类似下面这样:
Redis安装完成

5.配置数据库

首先,配置MySQL数据库,点击数据库菜单,在MySQL面板中点击添加数据库,按照要求创建好数据库,再点击权限,将权限修改为所有人。之后使用数据库管理软件,例如Navicat等,分别运行RuoYi源代码中的sql文件夹下的两个数据库文件,向数据库中添加RuoYi系统运行时需要的表。

注意,这一步会增加服务器被攻击的风险,但是这样是为了在使用Docker部署RuoYi后端时,Docker中的后端系统可以正常访问到MySQL数据库,如果不这样设置,由于Docker类似于虚拟机,是独立运行在服务器中的,二者的网络环境是不直接相通的,Docker内的SpringBoot项目无法直接连接到宿主机上运行的MySQL数据库,最终导致项目无法启动。
虽然可以使用其他方式将Docker的网络环境直接与宿主机相通,但是这样会导致Docker的可移植性变差,且仍然会带来安全风险。
具体其他配置方式,可以在附录中参考由GPT4生成的其他方式

配置MySQL数据库

接下来,配置Redis,点击软件商店,在Redis一行点击设置,在配置文件面板中对Redis配置进行修改,首先将第69行的bind 127.0.0.1改为:bind 0.0.0.0,之后将第508行的requirepass后面的单词删掉,改为自己的密码,一定要设置的复杂一些

注意,这里同样会带来安全风险,这一步操作和MySQL一样,将Redis暴露在公网上了,但是不这样做,Docker中的项目就无法使用宿主机的Redis,所以密码一定要设置的足够复杂,尽量减少服务器被攻击的风险。

配置Redis

6.修改项目文件

由于要部署的项目为RuoYi后端系统,使用了MySQLRedis,必须还要对后端程序做修改,修改Redis的连接地址和MySQL数据库的连接地址,找到ruoyi-admin\src\main\resources\application.yml这个文件,修改其中的Redis地址和密码:

# redis 配置
redis:
	# Redis地址
	host: 服务器IP地址
	# 端口,默认为6379
	port: 6379
	# 密码
	password: 刚刚设置的密码

找到ruoyi-admin\src\main\resources\application-druid.yml这个文件,修改其中的MySQL地址和密码

# 主库数据源
master:
    url: 服务器数据库地址
    username: 用户名
    password: 密码

即便Redis、MySQL、RuoYi都运行在同一个服务器中,也不能使用localhost,而是完整写出服务器的地址,这样才可以让容器中运行的RuoYi连接到容器外的Redis和MySQL,原因请看第5点的提示。


开始部署

1.创建docker_files文件夹

在部署后端时,因为部署思路是以Java镜像为底,制作一个SpringBoot项目镜像,也就是Docker容器中运行Java,Java中运行jar包,所以首先在根目录中创建一个docker_files文件夹,用于放置jar包和镜像创建文件
创建文件夹

2.上传jar包和创建镜像文件

文件夹中上传打包好的jar包,即图中的ruoyi-admin.jar
放置jar包和创建文件
创建一个txt文件,文件中粘贴如下代码:

FROM openwhisk/java8action
MAINTAINER psr <13404802234@163.com>
ADD ruoyi-admim.jar app.jar
CMD java -jar app.jar

代码含义:
第一行,以openwhisk/java8action镜像为底创建新镜像;
第二行,定义镜像的作者和联系方式(可不写);
第三行,添加jar包,并把jar包名字改为app.jar,注意要匹配上传的jar包的文件名
第四行,使用CMD指令运行jar包。

3.创建Docker镜像

在服务器终端分步运行如下命令:

cd ../

cd docker_files

docker build -f ./springboot_dockerfile.txt -t bdosr-backend-ruoyi .

代码含义:
第一行,到根目录
第三行,到docker_files文件夹;
第五行,创建镜像,镜像配置文件为此目录下的springboot_dockerfile文件,并且创建的镜像名字为bdosr-backend-ruoyi,版本为latest(注意最后面别忘了那个.)。

运行完成后即可在Docker页面中看到刚刚创建的镜像:
镜像创建完成

4.运行Docker容器

在服务器终端中运行如下命令:

docker run -d --name bdosr-backend-ruoyi -p 10000:8080 bdosr-backend-ruoyi

代码含义:
运行一个Docker容器,容器的名为bdosr-backend-ruoyi,之后将容器的8080端口映射到10000端口,使用的镜像名为bdosr-backend-ruoyi

5.部署完成

如图方式点击日志后,可以查看容器的运行日志,可以看到,容器日志和控制台输出是一样的,至此后端的Docker部署就完成了。
在这里插入图片描述


重新部署

当修改SpringBoot项目程序后,就需要重新部署服务,而经过第一遍的配置之后,重新部署变得非常容易,熟练之后,操作会非常迅速。

1.删除容器和镜像

在Docker页面,点击容器,删除旧的容器,再点击镜像,删除旧的镜像(先删容器,后删镜像):
删除容器
删除镜像

2.重新上传jar包并运行指令

docker_files文件夹内的旧jar包删除,之后上传新的jar包,再到终端中重新运行这四条命令即可:

cd ../

cd docker_files

docker build -f ./springboot_dockerfile.txt -t bdosr-backend-ruoyi .

docker run -d --name bdosr-backend-ruoyi -p 10000:8080 bdosr-backend-ruoyi

附录

Docker容器设计为轻量级的、可移植的执行环境,它们与宿主机(即运行Docker的服务器)之间相对隔离。但Docker提供了几种方式来允许容器与宿主机或外部世界通信,包括访问宿主机端口。

如果你的Java程序运行在Docker容器中,并且你希望它能够访问运行它的服务器(宿主机)上的MySQL服务,通常有以下几种方法:

1. 使用特殊的DNS名host.docker.internal

Docker为容器提供了一个特殊的DNS名host.docker.internal,这个DNS名解析为宿主机的IP地址。所以,如果你的MySQL服务运行在宿主机的3306端口上,你可以在容器中的Java程序配置数据库连接为host.docker.internal:3306

这种方法主要适用于Docker for Windows和Docker for Mac环境。在Linux环境下,这个特性可能不是默认可用的,取决于你的Docker版本和配置。

要在Linux服务器上使用host.docker.internal,你可能需要确保Docker的版本至少为20.04或更高,并且在启动Docker容器时,通过添加特定的DNS选项来显式启用对host.docker.internal的支持。这通常通过使用--add-host标志来实现。
以下是一个示例命令,它在运行Docker容器时添加了host.docker.internal

docker run --add-host=host.docker.internal:host-gateway <其他选项> <镜像名>

这里,host-gateway是一个特殊的Docker内部标识,用于自动解析到宿主机的IP地址。
同时,你还应注意以下问题:

  • Docker版本:确保你的Docker版本至少为20.04。你可以通过运行docker --version来检查当前安装的版本。
  • 配置:使用--add-host=host.docker.internal:host-gateway标志运行你的容器。这将确保host.docker.internal可以在容器内部解析到宿主机的IP地址。
  • 网络模式:当使用自定义网络模式(非默认bridge模式)时,确保理解如何影响容器内部和宿主机之间的通信。
  • 安全性和隔离:尽管这种方法提供了一个方便的方式来让容器访问宿主机的服务,但它也可能引入安全风险。确保评估使用此方法的潜在安全影响。
  • 环境差异:由于Linux和Docker Desktop(Windows和Mac)之间的行为差异,开发和部署时请考虑环境的一致性和可移植性。

通过遵循上述步骤和考虑,你应该能够在Linux环境中成功使用host.docker.internal来让Docker容器访问宿主机上的服务。

2. 使用宿主机的网络

通过让容器使用宿主机的网络命名空间,容器可以直接访问宿主机上的网络接口和端口。这可以通过在运行容器时添加--network="host"参数来实现。例如:

docker run --network="host" my-java-app

使用这种方法时,容器将不会有自己的IP地址,而是直接使用宿主机的网络。这意味着你可以像在宿主机上运行程序一样直接使用localhost:3306来访问MySQL服务。

3. 端口映射

虽然这种方法主要用于将容器内部的端口暴露给宿主机或外部网络,但如果你的服务同时监听宿主机的网络接口(不仅仅是localhost),你也可以通过宿主机的IP地址或者0.0.0.0:3306(意味着所有可用接口)来从容器内部访问服务。

确保你的MySQL服务配置为监听所有网络接口(或者宿主机的特定外部IP),然后你可以使用宿主机的IP地址从容器内部进行连接。

注意事项:

  • 安全性:使用--network="host"模式或配置服务监听所有网络接口会增加安全风险,因为它减少了隔离并可能使服务面对更广泛的网络攻击。确保了解这些变更带来的潜在安全影响。
  • 可移植性:直接依赖宿主机的网络配置可能会减少容器的可移植性。尽量使用Docker内建的网络抽象和服务发现机制来保持容器的独立性和可移植性。

在Linux环境中,使用host.docker.internal来指向宿主机的功能并不总是默认可用,这与Docker Desktop for Mac和Windows版本的行为不同。然而,从Docker 20.04版本开始,Docker引入了更多的网络特性和改进,包括对host.docker.internal在Linux环境中的支持,但这可能需要额外的配置步骤。

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
对于使用宝塔面板部署SpringBoot项目,可以按照以下步骤进行操作: 1. 首先,将SpringBoot项目打包成war包。可以使用Maven或Gradle等构建工具进行打包,生成war包的命令为:`mvn clean package` 或 `./gradlew clean build`。 2. 登录到宝塔面板,点击左侧的软件商店,选择Java项目一键部署。点击设置,然后选择容器管理安装Tomcat。 3. 安装完成后,点击SpringBoot选项,然后点击添加项目。选择你的war包文件,并输入你的项目端口。如果端口已经被占用,你可以通过命令行或宝塔面板的进程管理工具杀掉占用该端口的进程。 4. 输入你的域名,并点击确定。如果一切设置正确,你的SpringBoot项目应该可以成功部署宝塔面板上了。 需要注意的是,如果你遇到了启动失败的情况,你可以尝试在 `--server.port` 前面加上一个空格,然后重新启动项目。 以上就是使用宝塔面板部署SpringBoot项目的一般步骤。希望对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [利用宝塔面板部署springboot项目](https://blog.csdn.net/txyllyyj/article/details/119277420)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [(新手向)从零开始将springboot项目部署到云服务器(ecs)上](https://download.csdn.net/download/weixin_38500222/14054335)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值