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)创建程序目录并直接容器启动
| $ 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 服务地址
| $ 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
操作方法与后台程序一样,修改配置文件并编译镜像运行服务
| $ 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
|
总结:项目功能挺实用,日常企业培训可以使用,基本满足需求,后期也可下载代码进行二次定制开发