Skip to content

Deploy Docker PlayEdu

Docker 部署 PlayEdu

一. 安装说明

PS:官网技术文档有详细说明,此文只是个人搭建测试

PlayEdu 是一款适用于搭建内部培训平台的开源系统,旨在为企业/机构打造自己品牌的内部培训平台

技术栈:前台采用 React18 + Vite 开发,后台采用 Java + Springboot + MySQL 开发,其安装过程一切以官网为准,为了快速搭建直接全使用 Docker 下完成,服务部署分为四部分:

  • 依赖服务:Minio、MySQL、Redis
  • 接口程序:API 程序(Jar包)
  • 后台界面:Backend(超级管理员)
  • 用户界面:Frontend(普通用户)

二. 安装 MySQL

1)使用脚本快速创建目录及配置文件,之后使用 yaml 编排并 docker-compose 启动

#!/bin/bash
# 创建程序目录
mkdir -p $PWD/{conf,data,log}

# 创建配置文件
tee $PWD/conf/my.cnf<<-'EOF'
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
# 实现mysql不区分大小(开发需求,建议开启)
lower_case_table_names=1
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
default-time_zone = '+8:00'

# 更改字符集 如果想Mysql在后续的操作中文不出现乱码,则需要修改配置文件内容
symbolic-links=0
character-set-server=utf8mb4

[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
EOF
version: '3.8'
services:
  mysql:
    container_name: playedu-mysql
    image: mysql:5.7
    restart: always
    ports:
      - 3306:3306
    privileged: true
    volumes:
      - $PWD/log:/var/log/mysql
      - $PWD/conf:/etc/mysql/conf.d
      - $PWD/data:/var/lib/mysql
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: Admin@123
      MYSQL_USER: admin
      MYSQL_PASS: Admin123
    command: [
        '--character-set-server=utf8mb4',
        '--collation-server=utf8mb4_general_ci',
        # 允许客户端并发连接的最大数量,默认值是151,一般将该参数设置为500-2000
        '--max_connections=3000'
    ]

2)创建一个名为 playedu 的数据库并导入其 SQL 文件

# 数据库文件在API子项目内
$ git clone https://gitee.com/playeduxyz/playedu.git playedu-api
$ cd playedu-api/databases/
$ docker cp v1.0-beta.1.sql playedu-mysql:/root
# 因使用容器,所以先将sql文件复制至容器中,并创建库和导入
$ docker exec -it mysql57 mysql -uroot -pAdmin@123
mysql> CREATE DATABASE playedu;
mysql> exit
$ docker exec -it playedu-mysql bash
$ mysql -uroot -p playedu < /root/v1.0-beta.1.sql

注意确保所需要的库表都正常导入,否则后续的 API 会启动失败

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| playedu            |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> select table_name from information_schema.tables where table_schema='playedu';
+-----------------------------+
| table_name                  |
+-----------------------------+
| admin_logs                  |
| admin_permissions           |
| admin_role_permission       |
| admin_roles                 |
| admin_user_role             |
| admin_users                 |
| app_config                  |
| course_chapters             |
| course_department           |
| course_hour                 |
| courses                     |
| departments                 |
| resource_categories         |
| resource_category           |
| resource_course_category    |
| resource_videos             |
| resources                   |
| user_course_hour_records    |
| user_course_records         |
| user_department             |
| user_learn_duration_records |
| user_learn_duration_stats   |
| user_login_records          |
| user_upload_image_logs      |
| users                       |
+-----------------------------+
25 rows in set (0.00 sec)

三. 安装 Minio

PlayEdu 视频、图片存储都依赖 minio 的服务

1)创建程序目录并直接容器启动

1
2
3
4
5
6
7
$ mkdir -p /opt/playedu/minio && cd /opt/playedu/minio
$ docker run -p 9000:9000 -p 50000:50000 -d --name playedu-minio \
  -e "MINIO_ACCESS_KEY=Admin@123" \
  -e "MINIO_SECRET_KEY=Admin@123" \
  -v $PWD/data:/data \
  -v $PWD/config:/root/.minio \
  minio/minio server --console-address ":50000" /data
  • MINIO_ACCESS_KEY:登录用户名
  • MINIO_SECRET_KEY:登录密码
  • -p 9000:9000:服务端口,用于文件上传使用
  • -p 50000:50000:程序端口,用于管理服务的使用

上面命令参数说明可查阅官方文档,主要作了数据持久化和设置了账密、端口,存储效果如下所示

$ tree .
.
├── config
   └── certs
       └── CAs
├── data
   └── playedu
       ├── images
          ├── CpSnIM1rPGKhFDCck3Sgg7k4Cl9pwnCW.jpg
          ├── JZUh8V1KErprWWeRpc5ZJENeEH4mtUti.png
          └── VY98nDSjBhuEc4qj6X04y4YG6AJCPf0T.png
       └── videos
           └── B6xKEPIwovP5XXys5qkWvHcOJZ7AKBdv.mp4
└── Readme.md

7 directories, 5 files

2)创建 Bucket 并设置 Public 上传权限

Create Bucket > playedu > Manage > Access Policy

按照官方内容,设置桶为公共模式,开放权限(桶名可自定义,但需与上下文互应)

四. 部署 PlayEdu

4.1 部署 API

使用官方镜像,直接调用上述接口服务启动

# 官方示例如下:
docker run -d -p 9898:9898 --name playedu-api registry.cn-hangzhou.aliyuncs.com/playedu/api:1.0-beta.5 \
  --spring.profiles.active=prod \
  --spring.datasource.url="jdbc:mysql://数据库host:端口/数据库名?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false" \
  --spring.datasource.username=数据库连接用户名 \
  --spring.datasource.password=数据库连接密码 \
  --spring.data.redis.host=redis的host \
  --spring.data.redis.port=redis的port \
  --spring.data.redis.password=redis的密码 \
  --minio.access-key=minio的AccessKey \
  --minio.secret-key=minio的SecretKey \
  --minio.end-point=minio的服务访问地址 \
  --minio.bucket=minio的Bucket \
  --minio.domain=minio的服务访问域名

注:启动命令改为自身服务参数即可,需要注意的是 domain 的值后面必须带有 /,详情可参考 Minio 手动安装

$ docker run -d -p 9898:9898 --name playedu-api registry.cn-hangzhou.aliyuncs.com/playedu/api:1.0-beta.5 \
  --spring.profiles.active=prod \
  --spring.datasource.url="jdbc:mysql://188.188.3.35:3306/playedu?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false" \
  --spring.datasource.username=root \
  --spring.datasource.password=Admin@123 \
  --spring.data.redis.host=188.188.3.35 \
  --spring.data.redis.port=6379 \
  --spring.data.redis.password=Admin@123 \
  --minio.access-key=Admin@123 \
  --minio.secret-key=Admin@123 \
  --minio.end-point=http://188.188.3.35:9000 \
  --minio.domain=http://188.188.3.35:9000/ \
  --minio.bucket=playedu

打开浏览器输入 http://Server-IP:9898 即可访问 PlayEdu 的 API 服务,如有问题请查看日志报错信息进行排查

4.2 部署 Backend

PlayEdu 后台程序,其实也是个前端项目,项目内已提供了详细的安装步骤,照抄作业即可

后台默认账号:admin@playedu.xyz 密码:playedu (对应数据库表 admin_users)

1)下载代码并修改 .env 文件,添加 API 服务地址

1
2
3
4
$ git clone https://gitee.com/playeduxyz/backend.git playedu-backend
$ cd playedu-backend && cp .env.example .env
$ cat .env
VITE_APP_URL=http://188.188.3.35:9898

2)编译生成镜像并运行服务

$ docker build -t playedu-backend .
$ docker run -d -p 8081:80 --name playedu-backend playedu-backend

执行成功后,可以在浏览上打开 http://Server-IP:8081 来访问

4.3 部署 Frontend

操作方法与后台程序一样,修改配置文件并编译镜像运行服务

1
2
3
4
5
6
$ git clone https://gitee.com/playeduxyz/frontend.git playedu-frontend
$ cd playedu-frontend && cp .env.example .env
$ cat .env
VITE_APP_URL=http://188.188.3.35:9898
$ docker build -t playedu-frontend .
$ docker run -d -p 8082:80 --name playedu-frontend playedu-frontend

总结:项目功能挺实用,日常企业培训可以使用,基本满足需求,后期也可下载代码进行二次定制开发