手动部署前后端分离的项目到本地

news/2025/1/10 18:41:56/文章来源:https://www.cnblogs.com/l-l-12/p/18664509

1.准备工作

使用maven打包springboot项目为.jar文件得到springboot-0.0.1-SNAPSHOT.jar

打包vue项目

npm install -g @vue/cli安装Vue CLI

在项目根目录下,运行npm run build命令来构建项目得到一个dist文件夹

将打包好的文件通过远程仓库中转至docker虚拟机

在虚拟机拉取镜像,并将docker12-2的内容复制(cp 命令)给我的部署项目my-project

2.部署前端到nginx docker中

将dist.zip解压放于my-project/frontend下,编写Dockerfile

FROM nginx:latestCOPY ./dist /usr/share/nginx/htmlCOPY ./nginx.conf /etc/nginx/conf.d/default.confEXPOSE 80

创建一个名为 nginx.conf 的配置文件

server {listen 80;server_name localhost;location / {root /usr/share/nginx/html;try_files $uri $uri/ /index.html;}# 代理 API 请求location /api {proxy_pass http://192.168.88.3:8080;  # 替换为你的 API 服务器地址proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}

构建和运行 Docker 容器

docker build -t my-vite-app .(my-vite-app:自定义前端镜像名)

运行并查看镜像

docker run -d -p 8080:80 my-vite-app

在火狐浏览器中输入http://localhost:8080或http://192.168.88.3:8080跳至如下的登录界面

3.部署后端

将springboot-0.0.1-SNAPSHOT.jar放于my-project/backend下,编写Dockerfile

# 使用官方 OpenJDK 作为基础镜像FROM openjdk:20-jdk-sli# 设置工作目录WORKDIR /app# 复制项目的 JAR 文件到容器中COPY ./springboot-0.0.1-SNAPSHOT.jar app.jar# 暴露应用运行的端口EXPOSE 8080# 运行 Spring Boot 应用ENTRYPOINT ["java", "-jar", "app.jar"]

构建

docker build -t my-springboot-app .

# 创建网络docker network create my_network

注意:使用 Docker 网络连接

在 Docker 中运行多个容器时,建议使用 Docker 网络来确保它们可以相互通信。我已经创建了一个名为 my_network 的网络,确保我的 MySQL 、 my-springboot-app容器在同一个网络中运行,方便通信

运行

docker run -d -p 8090:8080 --network my_network my-springboot-app

4.部署mysql8

docker run --name mysql8 \-e MYSQL_ROOT_PASSWORD=mysql --network my_network \-e MYSQL_ROOT_HOST='%' \-p 3306:3306 \-v /root/xr/java/data:/var/lib/mysql \-d mysql:8.0.40 \--character-set-server=utf8mb4 \--collation-server=utf8mb4_unicode_ci \--default-authentication-plugin=mysql_native_password

查看构建容器成功

输入http://192.168.88.3:8090验证后端部署成功,因为还没创数据,所以显示数据为空

使用mysql容器创建对应数据库

进入mysql容器
docker exec -it mysql8 bash

登录MySQL

mysql -u root -p

创建数据库为docker_demo

创建表名为member

create database docker_demo;use docker_demo;-- 创建成员表
DROP TABLE IF EXISTS `member`;
CREATE TABLE member (id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',studentId VARCHAR(50) UNIQUE NOT NULL COMMENT '学号',name VARCHAR(100) NOT NULL COMMENT '姓名',password VARCHAR(255) NOT NULL COMMENT '密码') COMMENT='成员信息表';

INSERT INTO member (studentId, name, password) VALUES ('11111111', '111', '123456');

5.遇到的问题

浏览器输入http://192.168.88.3:8090,结果为{"code":"200","msg":"请求成功","data":null}

问题分析:使用curl -X GET http://192.168.88.3:8090/member/selectAll验证,得到

{"code":"500","msg":"请求失败","data":null} 意思是服务器请求失败。我使用docker logs命令查看部署过程,发现MyBatis 在尝试执行数据库操作时遇到了异常,我看了后端代码和部署步骤,发现后端数据库连接用的是本地MySQL

,而我部署用的是MySQL容器(也就是说我的本地并没有MySQL),导致我的springboot找不到数据库,自然没有数据,请求也不会成功。

解决方案:更新springboot代码,重新打包,重复部署操作。

解决步骤:

1.更新数据库连接 URL

在您的 Spring Boot 应用中,您需要将数据库连接 URL 更新为 MySQL 容器的名称,而不是使用 localhost。在 Docker 中,容器的名称可以用作主机名。

2. 重新构建并运行后端应用

使用docker stop,docker rm ,docker rmi删除旧容器和旧镜像(内容太多,未截图)

重新构建运行

docker build -t my-springboot-app .

docker run -d -p 8090:8080 --network my_network my-springboot-app
浏览器输入http://192.168.88.3:8090/member/selectAll

表示后端与数据库部署成功

注意:本身步骤是没有错的,如果结果不如意,可以检查ip地址,我这里用的地址基本都是本地主机,如果你需要改其他主机,请相应地修改;另外注意后端数据库的密码与前端是否匹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867273.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nvm 安装进行node多版本管理及环境变量配置

注意: 1、安装nvm之前需要卸载之前的nodejs,并且还要删除之前的环境变量配置,否则会出现一些奇怪的问题 2、nvm的安装路径不能有中文或者空格,否则后面在cmd中切换node版本会出现乱码 一、完全卸载旧的nodejs 参考文章《Node卸载超详细步骤》 1、打开系统的控制面板,点击卸…

M5Stack 发布全双工通信语音识别硬件;雷蛇发布 AI 游戏伴侣 Project AVA,实时指导复盘

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

WPF 怎么利用behavior优雅的给一个Datagrid添加一个全选的功能

前言:我在迁移旧项目代码的时候发现别人写很多界面都涉及到一个DataGrid的全选,但是每个都写的很混乱,现在刚好空闲下来,写一个博客, 给部分可能不太会写这个的同学讲一下,怎么实现全选功能,并且可以在任何项目里面复用这个功能。 先准备一个Datagrid,我们给这个DataGr…

使用chai3d-GEL模块进行软体模型力反馈仿真的一点碎片化记录

在要模拟的网格模型中手动添加节点或者对于形状比较复杂的模型使用TetGen之类的网格划分程序自动添加节点和连接;然后设置合理的仿真参数(质量、刚度、重力、时间步长...) 骨架驱动:SkeletonModel 使用骨架结构来表示变形体。骨架由一系列节点(cGELSkeletonNode)和连接这…

销售新手必看:七大关键要素助你快速蜕变行业精英

在销售领域的探索之路上,我时常遇到新入行的同仁们询问如何迅速提升自我。回望自己初涉销售的时光,那段没有专业背景支撑,也缺乏资深前辈指引的日子,我选择了最质朴的方式——埋首于书店中,搜寻销售相关的书籍。然而,那些偏重理论研究的书籍,并未给予我太多实战中的助力…

电机控制的数字化升级:基于DSP和FPGA的仿真与实现

​数字信号处理器(DSP,Digital Signal Processor)在工业自动化领域的应用日益广泛。DSP是一种专门用于将模拟信号转换成数字信号并进行处理的技术,能够实现信号的数字滤波、重构、调制和解调等多项功能,确保信号处理的精确性和稳定性。特别是在电机控制系统中,DSP的应用尤…

中考英语优秀范文-热点话题-传统文化-001 Chinese Treasures: Opera Paper Art 国宝探秘:京剧与剪纸

1 写作要求 坚定文化自信,弘扬中华优秀传统文化,做中华文明的传播者是新时代中国青少年的责任与使命。假如你是李华,近期,一批外国朋友要到你所在的学校参观访问,请用英语写一篇发言稿,向他们介绍中华优秀传统文化。 内容包括: 1 欢迎朋友们的到来; 2 总体介绍中国传统…

货梯载人监控报警自动停梯系统

货梯载人监控报警自动停梯系统利用安装在货梯轿厢内的监控摄像头,实时捕捉轿厢内的画面信息,货梯载人监控报警自动停梯系统一旦确认有人员进入货梯轿厢监测范围内,系统便会迅速输出报警信号。同时,与电梯控制系统实现联动,强制电梯不关门、不运行,从而将人员拒之于危险之…

【YashanDB知识库】使用DBeaver 插入数据 nvarchar字段插入为空

本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7901516.html?templateId=1718516 【问题分类】DBeaver使用 【关键字】DBeaver、nvarchar 【问题描述】使用DBeaver ,插入数据nvarchar字段插入为空。其他字段都有数据,且插入没有报错。【问题原…

[.NET] 使用客户端缓存提高API性能

在现代应用程序中,性能始终是一个关键的考虑因素。无论是提高响应速度,降低延迟,还是减轻服务器负载,开发者都在寻找各种方法来优化他们的API。在Web开发中,利用客户端缓存是一种有效的方法,可以显著提高API的性能。本文将结合Replicant与Delta库,深入探讨如何在.NET中使…

ABB机器人IO板DSQC651维修检查方法

ABB机器人作为工业自动化的重要设备,其稳定性和可靠性对于生产线的持续运行至关重要。然而,在实际使用中,由于各种原因,可能会出现ABB机器人IO板DSQC651故障,影响机器人的正常运行。 一、ABB工业机械臂IO板故障的常见原因 ABB机器人IO板故障的原因可能有很多,常见的包括电…

Flutter进阶(6):详解 Key

一、Key是什么? 用官方的说法就是:Key 是 Widget、Element 和 SemanticNodes 的唯一标识符。 组件在更新的时候,其状态的保存主要是通过判断组件的类型或者 key 值是否一致。因此,当各组件的类型不同的时候,类型已经足够用来区分不同的组件了,此时我们可以不必使用 key。…