PlayEdu项目Docker Compose部署配置详解
2025-07-10 03:53:06作者:魏献源Searcher
前言
PlayEdu是一个教育类开源项目,采用微服务架构设计。本文将从技术角度深入解析其Docker Compose部署配置文件,帮助开发者理解项目的基础架构和部署方式。
配置文件结构分析
该compose.yml文件主要定义了PlayEdu项目的容器化部署方案,包含以下几个核心部分:
- 日志配置
- 网络配置
- 数据卷配置
- 服务定义
日志配置解析
x-logging: &default-logging
driver: "json-file"
options:
max-size: "10m"
max-file: "10"
这部分定义了所有服务的默认日志配置:
- 使用json-file驱动记录日志
- 单个日志文件最大10MB
- 最多保留10个日志文件
这种配置既保证了日志的可读性,又避免了日志文件无限增长占用磁盘空间的问题。
网络配置
networks:
playedu:
driver: bridge
创建了一个名为"playedu"的桥接网络,所有服务都将加入这个网络,使得容器间可以通过服务名互相访问,同时与外部网络隔离,提高了安全性。
数据持久化配置
volumes:
mysql-data:
定义了一个名为"mysql-data"的卷,用于持久化MySQL数据库的数据。这样即使容器重启或重建,数据库数据也不会丢失。
服务定义详解
PlayEdu主服务
playedu:
image: registry.cn-hangzhou.aliyuncs.com/playedu/light:2.0
restart: always
environment:
- DB_HOST=mysql
- DB_PORT=3306
- DB_NAME=playedu
- DB_USER=root
- DB_PASS=playeduxyz
- SA_TOKEN_IS_CONCURRENT=false
- SA_TOKEN_JWT_SECRET_KEY=${PLAYEDU_JWT_KEY:-playeduxyz}
ports:
- "${PLAYEDU_API_PORT:-9700}:9898"
- "${PLAYEDU_PC_PORT:-9800}:9800"
- "${PLAYEDU_H5_PORT:-9801}:9801"
- "${PLAYEDU_ADMIN_PORT:-9900}:9900"
networks:
- playedu
depends_on:
- mysql
logging: *default-logging
关键配置说明:
- 使用阿里云镜像仓库中的playedu/light:2.0镜像
- 自动重启策略设置为always,确保服务异常退出后自动恢复
- 环境变量配置:
- 数据库连接信息指向mysql服务
- JWT密钥可通过环境变量PLAYEDU_JWT_KEY自定义,默认值为playeduxyz
- 端口映射:
- 9898(API)映射到主机的9700或自定义端口
- 9800(PC端)映射到主机的9800或自定义端口
- 9801(H5端)映射到主机的9801或自定义端口
- 9900(管理端)映射到主机的9900或自定义端口
- 依赖mysql服务,确保数据库先启动
MySQL数据库服务
mysql:
build: ./docker/mysql
restart: always
environment:
- MYSQL_DATABASE=playedu
- MYSQL_ROOT_PASSWORD=playeduxyz
- TZ=UTC
volumes:
- mysql-data:/var/lib/mysql
ports:
- "${MYSQL_PORT:-23307}:3306"
networks:
- playedu
logging: *default-logging
关键配置说明:
- 使用项目目录下docker/mysql中的Dockerfile构建镜像
- 自动重启策略设置为always
- 环境变量配置:
- 初始化数据库名为playedu
- root密码为playeduxyz
- 时区设置为UTC
- 数据卷挂载确保数据持久化
- 3306端口映射到主机的23307或自定义端口
部署建议
-
安全建议:
- 生产环境务必修改默认密码(playeduxyz)
- 建议设置复杂的JWT密钥
- 考虑使用.env文件管理敏感环境变量
-
性能调优:
- 可根据实际需求调整日志保留策略
- 对于高并发场景,可考虑增加服务实例数量
-
扩展性考虑:
- 该配置适合中小规模部署
- 大规模部署可考虑将服务拆分到不同主机
常见问题解答
Q: 为什么MySQL使用UTC时区? A: 统一使用UTC时区可以避免时区转换带来的问题,应用层可以根据需要显示本地时间。
Q: 如何修改服务端口? A: 可以通过设置环境变量来覆盖默认端口映射,例如:
PLAYEDU_API_PORT=10700 docker-compose up
Q: 数据备份如何实现? A: 由于使用了数据卷,可以直接备份mysql-data卷的内容,或者使用MySQL的导出工具。
总结
本文详细解析了PlayEdu项目的Docker Compose部署配置,涵盖了日志、网络、数据持久化和服务定义等关键方面。理解这些配置有助于开发者根据实际需求进行定制化部署,也为后续的运维工作奠定了基础。