PlayEdu项目Docker容器化部署指南
2025-07-10 03:51:59作者:廉彬冶Miranda
项目概述
PlayEdu是一个教育类应用系统,采用前后端分离架构设计。本文将从技术角度详细解析其Dockerfile构建过程,帮助开发者理解如何将PlayEdu项目容器化部署。
多阶段构建设计
PlayEdu的Dockerfile采用了多阶段构建策略,这种设计具有以下优势:
- 减小最终镜像体积:只保留运行时必要的文件
- 构建过程清晰分离:前端与后端构建互不干扰
- 安全性提升:构建工具不会出现在最终镜像中
第一阶段:前端构建(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前端
每个项目都执行以下步骤:
- 安装依赖(pnpm i)
- 构建生产版本(pnpm build)
- 设置统一的API基础路径(VITE_APP_URL=/api/)
第二阶段:后端构建(java-builder)
FROM registry.cn-hangzhou.aliyuncs.com/hzbs/eclipse-temurin:17 AS java-builder
后端基于Java 17环境构建,使用Eclipse Temurin发行版。
构建过程:
- 复制Java项目代码
- 使用Maven Wrapper(mvnw)跳过测试构建
- 生成可执行的JAR包
第三阶段:最终镜像(base)
FROM registry.cn-hangzhou.aliyuncs.com/hzbs/eclipse-temurin:17 AS base
最终镜像同样基于Java 17环境,从之前阶段复制:
- 构建好的Java应用JAR包
- 三个前端项目的构建产物
- Nginx配置文件
网络与端口配置
PlayEdu暴露了多个端口:
- 9898:Nginx服务端口
- 9800:管理后台访问端口
- 9801:PC端访问端口
- 9900:H5移动端访问端口
这种设计使得不同客户端可以通过不同端口访问对应的前端应用。
运行时配置
启动命令包含几个关键步骤:
- 启动Nginx服务
- 等待MySQL服务就绪(15秒)
- 启动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密钥 | 无 |
部署建议
- 数据库准备:确保MySQL服务已就绪并创建好数据库
- 网络配置:合理规划容器网络,确保数据库可访问
- 安全配置:务必设置强密码和JWT密钥
- 性能调优:根据实际负载调整Java内存参数
总结
PlayEdu的Dockerfile设计体现了现代应用容器化的最佳实践,通过多阶段构建优化了镜像大小,清晰的分离了构建和运行环境,并通过环境变量实现了灵活的配置管理。这种设计既适合开发环境快速部署,也能满足生产环境的需求。