首页
/ PlayEdu项目Docker容器化部署指南

PlayEdu项目Docker容器化部署指南

2025-07-10 03:51:59作者:廉彬冶Miranda

项目概述

PlayEdu是一个教育类应用系统,采用前后端分离架构设计。本文将从技术角度详细解析其Dockerfile构建过程,帮助开发者理解如何将PlayEdu项目容器化部署。

多阶段构建设计

PlayEdu的Dockerfile采用了多阶段构建策略,这种设计具有以下优势:

  1. 减小最终镜像体积:只保留运行时必要的文件
  2. 构建过程清晰分离:前端与后端构建互不干扰
  3. 安全性提升:构建工具不会出现在最终镜像中

第一阶段:前端构建(node-builder)

FROM registry.cn-hangzhou.aliyuncs.com/hzbs/node:20-alpine AS node-builder

前端构建阶段基于Node.js 20 Alpine镜像,Alpine版本以其轻量级著称。

构建过程包含三个前端项目:

  • playedu-admin:管理后台前端
  • playedu-pc:PC端前端
  • playedu-h5:移动端H5前端

每个项目都执行以下步骤:

  1. 安装依赖(pnpm i)
  2. 构建生产版本(pnpm build)
  3. 设置统一的API基础路径(VITE_APP_URL=/api/)

第二阶段:后端构建(java-builder)

FROM registry.cn-hangzhou.aliyuncs.com/hzbs/eclipse-temurin:17 AS java-builder

后端基于Java 17环境构建,使用Eclipse Temurin发行版。

构建过程:

  1. 复制Java项目代码
  2. 使用Maven Wrapper(mvnw)跳过测试构建
  3. 生成可执行的JAR包

第三阶段:最终镜像(base)

FROM registry.cn-hangzhou.aliyuncs.com/hzbs/eclipse-temurin:17 AS base

最终镜像同样基于Java 17环境,从之前阶段复制:

  1. 构建好的Java应用JAR包
  2. 三个前端项目的构建产物
  3. Nginx配置文件

网络与端口配置

PlayEdu暴露了多个端口:

  • 9898:Nginx服务端口
  • 9800:管理后台访问端口
  • 9801:PC端访问端口
  • 9900:H5移动端访问端口

这种设计使得不同客户端可以通过不同端口访问对应的前端应用。

运行时配置

启动命令包含几个关键步骤:

  1. 启动Nginx服务
  2. 等待MySQL服务就绪(15秒)
  3. 启动Java应用,并注入以下配置参数:
    • 使用生产环境配置(spring.profiles.active=prod)
    • 数据库连接配置(通过环境变量注入)
    • Sa-Token安全框架配置

环境变量说明

PlayEdu容器需要以下环境变量:

变量名 说明 默认值
DB_HOST MySQL主机地址
DB_PORT MySQL端口 3306
DB_NAME 数据库名称
DB_USER 数据库用户名
DB_PASS 数据库密码
SA_TOKEN_IS_CONCURRENT 是否允许多端登录 false
SA_TOKEN_JWT_SECRET_KEY JWT密钥

部署建议

  1. 数据库准备:确保MySQL服务已就绪并创建好数据库
  2. 网络配置:合理规划容器网络,确保数据库可访问
  3. 安全配置:务必设置强密码和JWT密钥
  4. 性能调优:根据实际负载调整Java内存参数

总结

PlayEdu的Dockerfile设计体现了现代应用容器化的最佳实践,通过多阶段构建优化了镜像大小,清晰的分离了构建和运行环境,并通过环境变量实现了灵活的配置管理。这种设计既适合开发环境快速部署,也能满足生产环境的需求。