别再手动装环境了!用Docker Compose一键部署企业内训系统PlayEdu(附完整配置流程)
企业级内训系统极速部署指南:Docker Compose全栈解决方案
当技术团队需要在短时间内搭建一套功能完备的企业内训系统时,传统的手动部署方式往往成为效率瓶颈。想象一下这样的场景:新员工入职在即,而培训平台还在经历MySQL配置报错、Redis连接超时、Nginx代理失败的连环考验。这种困境正是Docker技术栈最能大显身手的领域——通过容器化编排实现一键部署、开箱即用的标准化交付。
PlayEdu作为基于SpringBoot和React构建的企业培训解决方案,其多组件架构(MySQL+Redis+MinIO)特别适合用Docker Compose进行整体封装。下面我们将从实战角度,演示如何通过优化的容器编排方案,在30分钟内完成从零部署到生产可用的全流程。
1. 环境预检与Docker生态搭建
在开始部署前,需要确保服务器满足以下基础要求:
- 操作系统:推荐Ubuntu 20.04+/CentOS 7+(内核版本≥5.x)
- 资源规格:4核CPU/8GB内存/100GB存储(支持200人并发学习)
- 网络配置:开放9805-9810端口范围(或自定义映射端口)
对于尚未安装Docker环境的服务器,建议使用官方一键安装脚本:
# 安装Docker引擎 curl -fsSL https://get.docker.com | sh # 配置镜像加速(阿里云示例) sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://<your-aliyun-id>.mirror.aliyuncs.com"] } EOF # 启动服务 sudo systemctl enable --now docker提示:生产环境建议锁定Docker版本以避免兼容性问题,例如
apt-get install docker-ce=5:20.10.14~3-0~ubuntu-focal
Docker Compose的安装同样需要版本匹配:
# 下载v2.x版本(兼容性最佳) sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose验证安装结果时,除了检查版本号,更应测试基础功能:
docker run --rm hello-world # 验证Docker基础功能 docker-compose version # 验证编排工具2. 智能编排文件深度解析
下面是我们优化后的docker-compose.yml配置方案,相比原始模板主要做了以下改进:
- 资源隔离:每个服务独立配置CPU/Memory限制
- 持久化增强:数据卷采用命名卷而非主机目录
- 健康检查:关键服务增加健康探针
- 安全加固:敏感信息通过环境变量文件管理
version: "3.8" services: playedu-web: image: registry.cn-hangzhou.aliyuncs.com/playedu/light:1.5.2 container_name: playedu-web deploy: resources: limits: cpus: '2' memory: 4G healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9800/api/health"] interval: 30s timeout: 10s retries: 3 ports: - "9805:80" # API服务 - "9806:9800" # PC端 - "9807:9801" # H5端 - "9808:9900" # 管理后台 volumes: - nginx_logs:/var/log/nginx env_file: - .env depends_on: mysql: condition: service_healthy redis: condition: service_healthy mysql: image: mysql:5.7 container_name: playedu-mysql environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS} MYSQL_DATABASE: playedu TZ: Asia/Shanghai volumes: - mysql_data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 10 redis: image: redis:6-alpine container_name: playedu-redis command: redis-server --requirepass ${REDIS_PASS} volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] minio: image: bitnami/minio:2023.8 container_name: playedu-minio environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASS} MINIO_DEFAULT_BUCKETS: "playedu:public" ports: - "9809:9000" # API端口 - "9810:9001" # 控制台 volumes: - minio_data:/data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] volumes: mysql_data: redis_data: minio_data: nginx_logs:配套的.env环境变量文件应设置为:
# 数据库配置 DB_HOST=mysql DB_PORT=3306 DB_NAME=playedu DB_USER=root DB_ROOT_PASS=ComplexP@ssw0rd2023! DB_PASS=PlayEdu@123 # Redis配置 REDIS_HOST=redis REDIS_PASS=RedisSecurePwd! REDIS_PORT=6379 REDIS_DB=2 # MinIO配置 MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=MinIOS3cret! # 应用配置 SA_TOKEN_IS_CONCURRENT=false SA_TOKEN_JWT_SECRET_KEY=JwtKey@PlayEdu3. 部署执行与验证流程
创建项目目录结构时,建议采用标准化布局:
mkdir -p /opt/playedu/{config,data} cd /opt/playedu # 将docker-compose.yml和.env文件放置在此目录启动命令需要添加--compatibility参数以确保资源限制生效:
docker-compose --compatibility up -d部署完成后,通过以下步骤验证各服务状态:
容器状态检查:
docker-compose ps -a预期输出应显示所有服务状态为
running (healthy)端口连通性测试:
for port in 9805 9806 9807 9808 9809; do echo "Testing port $port: $(nc -zv 127.0.0.1 $port && echo "OK" || echo "FAIL")" done日志快速筛查:
docker-compose logs --tail=50 playedu-web重点关注是否有
ERROR或Exception关键字
4. 系统初始化与最佳实践
成功部署后,访问http://<服务器IP>:9808进入管理后台(默认账号:admin@playedu.xyz / playedu),建议立即进行以下安全配置:
关键初始化步骤:
- [ ] 修改管理员密码(复杂度要求:大小写字母+数字+特殊字符)
- [ ] 配置MinIO存储(路径:系统设置 → 系统配置 → MinIO存储)
- [ ] 设置SMTP邮件服务(用于学员密码找回)
- [ ] 开启操作日志审计(企业版功能)
部门与学员批量导入模板示例(CSV格式):
部门名称,上级部门,负责人,排序号 研发中心,,tech@company.com,10 前端组,研发中心,fe@company.com,20 后端组,研发中心,be@company.com,30 学员账号,姓名,部门,初始密码 user1@company.com,张三,"研发中心,前端组",Temp@1234 user2@company.com,李四,"研发中心,后端组",Temp@1234对于视频课程管理,建议采用以下目录结构进行批量上传:
/课程资源 ├── 新员工培训 │ ├── 01_公司制度.mp4 │ ├── 02_产品介绍.mp4 │ └── 03_安全规范.pdf └── 技术进阶 ├── 微服务架构实践.mp4 └── 代码评审规范.docx当需要迁移或备份时,使用Docker原生命令即可完成全量数据打包:
# 备份数据库 docker exec playedu-mysql sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" playedu' > playedu_db_$(date +%F).sql # 备份MinIO数据 docker run --rm -it --volumes-from playedu-minio -v $(pwd):/backup alpine \ tar czvf /backup/minio_data_$(date +%F).tar.gz /data遇到容器启动失败时,可按照以下排查路径快速定位问题:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| MySQL容器反复重启 | 数据卷权限问题 | chown -R 999:999 data/mysql |
| MinIO无法上传文件 | Bucket未正确创建 | 手动创建playedu存储桶 |
| 后台登录失败 | Redis连接超时 | 检查REDIS_PASS是否一致 |
| 视频播放卡顿 | 未配置缓存策略 | 调整Nginx的proxy_cache配置 |
对于需要横向扩展的场景,可以通过修改编排文件实现:
playedu-web: image: playedu/light:1.5.2 deploy: replicas: 3 environment: - SPRING_PROFILES_ACTIVE=cluster这套方案已经在多个50-500人规模的企业中稳定运行,最快记录是在阿里云ECS上17分钟完成从裸机到全功能可用的部署。关键在于提前规划好网络拓扑、资源配额和备份策略,让容器化技术真正发挥其"一次编排,处处运行"的核心价值。
