欢迎光临
我们一直在努力

Docker Compose 一键部署前后端分离项目(Vue3 + SpringBoot3 + MySQL)

前言:本地开发没问题,一上线就崩?服务器配置记不住?每次部署都要折腾半天?本文教你用 Docker Compose 一键部署 前后端分离项目,前端 Vue3、后端 SpringBoot3、数据库 MySQL,全部容器化,一条命令搞定!


一、为什么要用 Docker Compose?

传统部署
Docker Compose 部署
需要手动安装 Node.js、Java、MySQL 全部容器化,环境隔离
依赖冲突,配置复杂 一份配置,任意环境运行
部署时间长,容易出错 docker-compose up -d 30秒搞定
回滚困难 docker-compose down 一键回滚

二、项目结构

my-project/
├── backend/ # SpringBoot 后端
│ ├── src/
│ ├── pom.xml
│ └── Dockerfile
├── frontend/ # Vue3 前端
│ ├── src/
│ ├── package.json
│ ├── nginx.conf
│ └── Dockerfile
├── docker-compose.yml # Docker Compose 配置
└── README.md


三、后端 SpringBoot 配置

3.1 编写 Dockerfile

backend/Dockerfile:

# 多阶段构建,最终镜像只包含运行时
FROM maven:3.9-eclipse-temurin-17 AS builder

# 设置工作目录
WORKDIR /app

# 复制 pom.xml 并下载依赖(利用 Docker 缓存)
COPY pom.xml .
RUN mvn dependency:go-offline

# 复制源代码
COPY src ./src

# 打包
RUN mvn clean package -DskipTests

# 运行时镜像
FROM eclipse-temurin:17-jre

WORKDIR /app

# 从构建阶段复制 jar 包
COPY –from=builder /app/target/*.jar app.jar

# 暴露端口
EXPOSE 8080

# 启动应用
ENTRYPOINT [\”java\”, \”-jar\”, \”app.jar\”]


3.2 修改 application.yml

backend/src/main/resources/application.yml:

server:
port: 8080

spring:
datasource:
url: jdbc:mysql://mysql:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: rootpassword
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true

注意:数据库地址改为 mysql(服务名),而不是 localhost


四、前端 Vue3 配置

4.1 编写 Dockerfile

frontend/Dockerfile:

# 构建阶段
FROM node:20-alpine AS builder

WORKDIR /app

# 复制 package.json 并安装依赖
COPY package.json pnpm-lock.yaml* ./
RUN npm install -g pnpm && pnpm install

# 复制源代码
COPY . .

# 构建生产版本
RUN pnpm build

# 运行时镜像(使用 Nginx)
FROM nginx:alpine

# 复制构建产物到 Nginx
COPY –from=builder /app/dist /usr/share/nginx/html

# 复制 Nginx 配置
COPY nginx.conf /etc/nginx/conf.d/default.conf

EXPOSE 80

CMD [\”nginx\”, \”-g\”, \”daemon off;\”]


4.2 Nginx 配置

frontend/nginx.conf:

server {
listen 80;
server_name localhost;

root /usr/share/nginx/html;
index index.html;

# 前端路由支持
location / {
try_files $uri $uri/ /index.html;
}

# 代理后端 API
location /api {
proxy_pass http://backend:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}


4.3 Vite 配置(生产环境)

frontend/vite.config.ts:

export default defineConfig({


base: \’/\’, // 部署路径
server: {


port:

赞(0)
未经允许不得转载:171主机测评 » Docker Compose 一键部署前后端分离项目(Vue3 + SpringBoot3 + MySQL)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址