首页 > 基础资料 博客日记
手动部署前后端分离的项目到本地
2025-01-10 19:00:06基础资料围观38次
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:latest
COPY ./dist /usr/share/nginx/html
COPY ./nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 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地址,我这里用的地址基本都是本地主机,如果你需要改其他主机,请相应地修改;另外注意后端数据库的密码与前端是否匹
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: