保姆级教程:Docker部署Spring Boot + Vue.js项目完整教程(附Gitee源码)

发布时间:2026/8/25 8:14:57

保姆级教程:Docker部署Spring Boot + Vue.js项目完整教程(附Gitee源码)
部署成功结果展示项目源码(带Dockerfile)https://gitee.com/etilic/EnglishLearningAssistant_d前言本文将详细介绍如何使用Docker容器化部署一个前后端分离的项目包括Spring Boot后端和Vue.js前端。通过Docker部署可以实现环境隔离、快速部署和跨平台运行。项目架构后端: Spring Boot MyBatis-Plus MySQL前端: Vue.js Vite部署: Docker Docker Compose NginxEnglishLearningAssistant/ ├── ELABackEnd/ # Spring Boot后端 │ ├── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/mrc/multiroundchatdemo/ │ │ │ │ ├── config/ # 配置类 │ │ │ │ ├── controller/ # 控制器 │ │ │ │ ├── mapper/ # 数据访问层 │ │ │ │ ├── models/ # 实体类 │ │ │ │ ├── service/ # 业务逻辑层 │ │ │ │ └── utils/ # 工具类 │ │ │ └── resources/ │ │ │ ├── application.properties │ │ │ └── init.sql │ │ └── test/ │ ├── Dockerfile │ └── pom.xml ├── Frontend/ # Vue3前端 │ ├── src/ │ │ ├── assets/ │ │ ├── components/ │ │ ├── App.vue │ │ └── main.js │ ├── public/ │ ├── Dockerfile │ ├── nginx.conf │ ├── package.json │ └── vite.config.js ├── docker-compose.yml # Docker编排配置 └── README.md环境准备服务器环境Ubuntu/CentOS Linux服务器Docker 20.0Docker Compose 2.0MySQL数据库可选外部或容器内安装Docker和Docker Compose# 安装Dockercurl-fsSLhttps://get.docker.com|bash-sdocker# 启动Docker服务sudosystemctl startdockersudosystemctlenabledocker# 安装Docker Composesudocurl-Lhttps://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname-s)-$(uname-m)-o/usr/local/bin/docker-composesudochmodx /usr/local/bin/docker-compose验证是否安装成功docker--versiondockercompose version安装成功的响应项目配置1. 后端配置修改数据库连接配置编辑application.properties将对应信息换成你自己的配置spring.application.nameMultiRoundChatDemo # 数据库配置 spring.datasource.urljdbc:mysql://YOUR_SERVER_IP:3306/your_database?useUnicodetruecharacterEncodingutf8serverTimezoneGMT%2B8 spring.datasource.usernameyour_username spring.datasource.passwordyour_password spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver # MyBatis-Plus配置 mybatis-plus.mapper-locationsclasspath*:/mapper/**/*.xml mybatis-plus.type-aliases-packagecom.mrc.multiroundchatdemo.models.entities mybatis-plus.configuration.map-underscore-to-camel-casetrue mybatis-plus.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl创建后端Dockerfile在后端项目根目录创建DockerfileFROM maven:3.8.4-openjdk-17-slim AS build WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY src ./src RUN mvn clean package -DskipTests FROM openjdk:17-jdk-slim WORKDIR /app COPY --frombuild /app/target/MultiRoundChatDemo-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 CMD [java, -jar, app.jar]关键点说明使用多阶段构建减小镜像大小第一阶段用Maven构建项目第二阶段只包含运行时环境和JAR包2. 前端配置创建前端Dockerfile在前端项目根目录创建DockerfileFROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN chmod x node_modules/.bin/vite npm run build FROM nginx:alpine COPY --from0 /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 3000 CMD [nginx, -g, daemon off;]创建Nginx配置在前端项目根目录创建nginx.confevents { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; server { listen 3000; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://backend: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; } } }关键配置说明try_files $uri $uri/ /index.html- 支持Vue Router的History模式proxy_pass http://backend:8080/api/- 将API请求代理到后端服务使用Docker内部服务名backend而不是IP地址3. Docker Compose配置在项目根目录创建docker-compose.ymlservices:backend:build:./ELABackEndports:-8080:8080environment:-SPRING_PROFILES_ACTIVEprodrestart:unless-stoppednetworks:-app-networkfrontend:build:./Frontendports:-3000:3000depends_on:-backendrestart:unless-stoppednetworks:-app-networknetworks:app-network:driver:bridge配置说明depends_on- 确保后端先启动networks- 创建内部网络供服务间通信restart: unless-stopped- 容器异常退出时自动重启部署流程1. 准备数据库-- 创建数据库CREATEDATABASEyour_databaseCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;-- 创建用户并授权CREATEUSERyour_username%IDENTIFIEDBYyour_password;GRANTALLPRIVILEGESONyour_database.*TOyour_username%;FLUSHPRIVILEGES;-- 执行初始化脚本SOURCE/path/to/init.sql;2. 上传项目文件# 将项目上传到服务器scp-ryour-project/ userserver_ip:/path/to/project/或使用ssh上传将文件拖动到ssh工具中对应存放项目的目录下3. 构建和启动服务进入项目目录这里需要把”/path/to/project/“改成你的项目根目录有docker-compose.yml的目录构建并启动所有服务# 进入项目目录cd/path/to/project/# 构建并启动所有服务docker-composeup-d--build成功部署4. 验证部署# 查看服务状态docker-composeps查看日志# 查看日志docker-composelogs-f测试后端API# 测试后端APIcurlhttp://your_server_ip:8080/api/user/login访问前端浏览器打开 http://your_server_ip:3000点击登录发现发送请求成功证明前后端能对上项目部署成功。常见问题及解决方案1. 权限问题问题:sh: vite: Permission denied解决方案:RUN chmod x node_modules/.bin/vite npm run build2. 网络连接问题问题: 前端无法访问后端API解决方案:确保nginx配置中使用Docker服务名http://backend:8080检查docker-compose网络配置确保防火墙开放相应端口3. 数据库连接问题问题: 后端无法连接数据库解决方案:检查数据库服务器是否允许外部连接确认用户权限和密码正确检查防火墙设置4. 构建缓存问题问题: 代码更新后容器没有更新解决方案:# 清理并重新构建docker-composedowndockersystem prune-fdocker-composeup-d--build--force-recreate生产环境优化1. 安全配置# docker-compose.prod.ymlservices:backend:environment:-SPRING_PROFILES_ACTIVEprod-JAVA_OPTS-Xmx512m-Xms256mrestart:alwaysfrontend:restart:always2. 日志管理services:backend:logging:driver:json-fileoptions:max-size:10mmax-file:33. 健康检查services:backend:healthcheck:test:[CMD,curl,-f,http://localhost:8080/actuator/health]interval:30stimeout:10sretries:3常用运维命令# 查看服务状态docker-composeps# 查看实时日志docker-composelogs-f[service_name]# 重启服务docker-composerestart[service_name]# 停止所有服务docker-composedown# 更新并重启docker-composeup-d--build# 进入容器docker-composeexecbackendbashdocker-composeexecfrontendsh# 清理未使用的镜像dockerimage prune-f总结通过Docker容器化部署Spring Boot Vue.js项目具有以下优势环境一致性- 开发、测试、生产环境完全一致快速部署- 一键构建和部署易于扩展- 可以轻松进行水平扩展资源隔离- 不同项目间互不影响版本管理- 可以快速回滚到任意版本掌握Docker部署技能对于现代Web开发来说是必不可少的希望本教程能帮助大家快速上手Docker容器化部署。参考资源Docker官方文档Docker Compose文档Spring Boot Docker指南Vue.js部署指南标签: Docker, Spring Boot, Vue.js, 容器化部署, 前后端分离

相关新闻

框架质疑学习法:你的学习方式需要升级吗?

框架质疑学习法:你的学习方式需要升级吗?

2026/8/25 8:14:57

好的,我将根据您的要求,将文章与“质疑读书法”的概念进行深度关联,并优化整体表达。以下是优化后的版本: 从“质疑读书”到“框架质疑”:学习方法的演进与实践 学习的艺术从未停止革新。从早期强调“勤思好问”的传统…

Python技术知识点试题讲解(循环结构类)

Python技术知识点试题讲解(循环结构类)

2026/8/25 8:14:57

1.技术知识点 (1)详细描述单调栈的工作原理和应用场景 答:单调栈是栈的变体,核心是栈内元素保持严格单调性(递增或递减),通过入栈时弹出破坏单调性的元素来维护秩序,每个元素仅入栈、…

5分钟上手教程:CVE-2019-11708 Firefox浏览器漏洞利用链快速运行完整指南

5分钟上手教程:CVE-2019-11708 Firefox浏览器漏洞利用链快速运行完整指南

2026/8/25 8:14:57

5分钟上手教程:CVE-2019-11708 Firefox浏览器漏洞利用链快速运行完整指南 【免费下载链接】CVE-2019-11708 Full exploit chain (CVE-2019-11708 & CVE-2019-9810) against Firefox on Windows 64-bit. 项目地址: https://gitcode.com/gh_mirrors/cv/CVE-2019…

Java面试必考:数据结构核心原理与应用解析

Java面试必考:数据结构核心原理与应用解析

2026/8/25 8:54:58

1. 为什么数据结构是Java面试的必考项十年前我刚参加工作时,第一次Java面试就被问到了HashMap的实现原理。当时支支吾吾说不清楚红黑树和链表的转换阈值,结果自然是被淘汰。后来做了面试官才发现,数据结构问题能直接暴露候选人的基本功扎实程…

银行信贷系统测试全流程与高频面试解析

银行信贷系统测试全流程与高频面试解析

2026/8/25 8:54:58

1. 银行信贷测试的核心价值与行业现状在金融科技高速发展的今天,银行信贷系统作为资金流转的核心枢纽,其稳定性和安全性直接关系到金融机构的运营风险。作为一名经历过数十个银行测试项目的从业者,我深刻体会到信贷系统测试与其他领域测试的本…

Redis面试核心考点与实战技巧解析

Redis面试核心考点与实战技巧解析

2026/8/25 8:54:58

1. Redis面试核心考点解析Redis作为当今最流行的内存数据库之一,已经成为技术面试中的必考内容。根据我多年参与技术面试和辅导的经验,80%的Redis相关问题都集中在以下五个核心领域。掌握这些知识点不仅能应对面试,更能提升日常开发中对Redis…

FreeRTOS任务创建详解:从xTaskCreate参数到调度原理

FreeRTOS任务创建详解:从xTaskCreate参数到调度原理

2026/8/25 8:54:58

1. 为什么“创建任务”是FreeRTOS入门的第一道门槛FreeRTOS不是一块板砖,而是一套精密运转的微型操作系统内核。很多人刚接触时以为“写个while(1)循环不就完事了”,结果一上手就卡在第一个函数——xTaskCreate()。这背后根本不是语法问题,而…

大模型面试必问:KV-Cache机制解析与优化

大模型面试必问:KV-Cache机制解析与优化

2026/8/25 8:54:58

1. 为什么大模型面试必问KV-Cache机制?这个问题几乎出现在所有大模型相关岗位的技术面试中,根本原因在于KV-Cache直接关系到推理效率这个核心生产指标。当面试官抛出这个问题时,实际上是在考察候选人对以下三个维度的理解深度:自回…

DashPlayer 切分长视频实操指南:粘贴时间戳,一步到位切好章节

DashPlayer 切分长视频实操指南:粘贴时间戳,一步到位切好章节

2026/8/25 8:44:58

DashPlayer 切分长视频实操指南:粘贴时间戳,一步到位切好章节 【免费下载链接】DashPlayer 为英语学习者量身打造的视频播放器,助你通过观看视频、沉浸真实语境,轻松提升英语水平。#美剧 #播放器 #听力 项目地址: https://gitco…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/24 19:53:32

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/24 19:56:07

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/24 21:16:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

2026/8/25 0:04:34

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

2026/8/25 0:04:35

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

2026/8/25 0:04:35

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…