首页
/ PlayEdu项目Docker Compose部署配置详解

PlayEdu项目Docker Compose部署配置详解

2025-07-10 03:53:06作者:魏献源Searcher

前言

PlayEdu是一个教育类开源项目,采用微服务架构设计。本文将从技术角度深入解析其Docker Compose部署配置文件,帮助开发者理解项目的基础架构和部署方式。

配置文件结构分析

该compose.yml文件主要定义了PlayEdu项目的容器化部署方案,包含以下几个核心部分:

  1. 日志配置
  2. 网络配置
  3. 数据卷配置
  4. 服务定义

日志配置解析

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

关键配置说明:

  1. 使用阿里云镜像仓库中的playedu/light:2.0镜像
  2. 自动重启策略设置为always,确保服务异常退出后自动恢复
  3. 环境变量配置:
    • 数据库连接信息指向mysql服务
    • JWT密钥可通过环境变量PLAYEDU_JWT_KEY自定义,默认值为playeduxyz
  4. 端口映射:
    • 9898(API)映射到主机的9700或自定义端口
    • 9800(PC端)映射到主机的9800或自定义端口
    • 9801(H5端)映射到主机的9801或自定义端口
    • 9900(管理端)映射到主机的9900或自定义端口
  5. 依赖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

关键配置说明:

  1. 使用项目目录下docker/mysql中的Dockerfile构建镜像
  2. 自动重启策略设置为always
  3. 环境变量配置:
    • 初始化数据库名为playedu
    • root密码为playeduxyz
    • 时区设置为UTC
  4. 数据卷挂载确保数据持久化
  5. 3306端口映射到主机的23307或自定义端口

部署建议

  1. 安全建议

    • 生产环境务必修改默认密码(playeduxyz)
    • 建议设置复杂的JWT密钥
    • 考虑使用.env文件管理敏感环境变量
  2. 性能调优

    • 可根据实际需求调整日志保留策略
    • 对于高并发场景,可考虑增加服务实例数量
  3. 扩展性考虑

    • 该配置适合中小规模部署
    • 大规模部署可考虑将服务拆分到不同主机

常见问题解答

Q: 为什么MySQL使用UTC时区? A: 统一使用UTC时区可以避免时区转换带来的问题,应用层可以根据需要显示本地时间。

Q: 如何修改服务端口? A: 可以通过设置环境变量来覆盖默认端口映射,例如:

PLAYEDU_API_PORT=10700 docker-compose up

Q: 数据备份如何实现? A: 由于使用了数据卷,可以直接备份mysql-data卷的内容,或者使用MySQL的导出工具。

总结

本文详细解析了PlayEdu项目的Docker Compose部署配置,涵盖了日志、网络、数据持久化和服务定义等关键方面。理解这些配置有助于开发者根据实际需求进行定制化部署,也为后续的运维工作奠定了基础。