mirror of
https://github.com/PlayEdu/docker-playedu-light
synced 2025-12-20 18:56:20 +08:00
Compare commits
11 Commits
v1.0-beta.
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c1455046ae | ||
|
|
03c1e74a77 | ||
|
|
3c03e140af | ||
|
|
f5793200f7 | ||
|
|
f29d8307d5 | ||
|
|
cdecc60ac4 | ||
|
|
554ffd1e40 | ||
|
|
a0d358f0ba | ||
|
|
a1dfcfa517 | ||
|
|
249e840264 | ||
|
|
4cb82ec769 |
37
.github/workflows/build.yml
vendored
Normal file
37
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
name: EstablishDockerImage
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- dev
|
||||||
|
|
||||||
|
env:
|
||||||
|
IMAGE_FQDN: registry.cn-hangzhou.aliyuncs.com/playedu/light
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-push:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
- name: Login to GHCR
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: registry.cn-hangzhou.aliyuncs.com
|
||||||
|
username: ${{ secrets.ALI_REGISTRY_EMAIL }}
|
||||||
|
password: ${{ secrets.ALI_REGISTRY_PASS }}
|
||||||
|
- name: Build
|
||||||
|
uses: docker/build-push-action@v3
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
${{ env.IMAGE_FQDN }}:1.3
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,2 +1,3 @@
|
|||||||
frontend/
|
frontend/
|
||||||
backend/
|
backend/
|
||||||
|
h5/
|
||||||
75
Dockerfile
75
Dockerfile
@@ -1,22 +1,69 @@
|
|||||||
FROM eclipse-temurin:17-alpine
|
FROM eclipse-temurin:17 as ApiBuilder
|
||||||
|
|
||||||
LABEL maintainer="0xtyz <tengyongzhi@meedu.vip>"
|
RUN apt-get update && \
|
||||||
|
apt-get upgrade -y && \
|
||||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/' /etc/apk/repositories && \
|
apt-get install -y git
|
||||||
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/' /etc/apk/repositories && \
|
|
||||||
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/' /etc/apk/repositories
|
|
||||||
|
|
||||||
# 安装基本组件
|
|
||||||
RUN apk update && apk add nginx
|
|
||||||
|
|
||||||
RUN mkdir /app
|
RUN mkdir /app
|
||||||
|
|
||||||
# Copy代码
|
WORKDIR /app
|
||||||
COPY frontend /app/frontend
|
RUN git clone -b dev https://github.com/PlayEdu/PlayEdu.git playedu
|
||||||
COPY backend /app/backend
|
|
||||||
COPY api /app/api
|
# 编译jar包
|
||||||
COPY conf/nginx.conf /etc/nginx/http.d/default.conf
|
WORKDIR /app/playedu
|
||||||
|
|
||||||
|
RUN /app/playedu/mvnw -Dmaven.test.skip=true clean package
|
||||||
|
|
||||||
|
FROM node:20-alpine as NodeBuilder
|
||||||
|
|
||||||
|
# install git - apt-get replace with apk
|
||||||
|
RUN apk update && \
|
||||||
|
apk upgrade && \
|
||||||
|
apk add --no-cache bash git openssh
|
||||||
|
|
||||||
|
# 编译后端
|
||||||
|
WORKDIR /app
|
||||||
|
RUN git clone -b dev https://github.com/PlayEdu/backend.git backend
|
||||||
|
RUN git clone -b dev https://github.com/PlayEdu/frontend.git pc
|
||||||
|
RUN git clone -b dev https://github.com/PlayEdu/h5.git h5
|
||||||
|
|
||||||
|
# 编译后台
|
||||||
|
WORKDIR /app/backend
|
||||||
|
RUN npm i && VITE_APP_URL=/api/ npm run build
|
||||||
|
|
||||||
|
# 编译PC
|
||||||
|
WORKDIR /app/pc
|
||||||
|
RUN npm i && VITE_APP_URL=/api/ npm run build
|
||||||
|
|
||||||
|
# 编译H5
|
||||||
|
WORKDIR /app/h5
|
||||||
|
RUN npm i && VITE_APP_URL=/api/ npm run build
|
||||||
|
|
||||||
|
FROM eclipse-temurin:17
|
||||||
|
|
||||||
|
LABEL maintainer="0xtyz <tengyongzhi@meedu.vip>"
|
||||||
|
|
||||||
|
#使用东八区时间环境
|
||||||
|
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||||||
|
|
||||||
|
#安装基本组件
|
||||||
|
RUN apt update && apt install -y nginx
|
||||||
|
|
||||||
|
RUN mkdir /app
|
||||||
|
|
||||||
|
COPY docker/start.sh /app/api/start.sh
|
||||||
|
|
||||||
|
COPY --from=ApiBuilder /app/playedu/playedu-api/target/playedu-api.jar /app/api/app.jar
|
||||||
|
|
||||||
|
COPY --from=NodeBuilder /app/backend/dist /app/backend
|
||||||
|
COPY --from=NodeBuilder /app/pc/dist /app/frontend
|
||||||
|
COPY --from=NodeBuilder /app/h5/dist /app/h5
|
||||||
|
|
||||||
|
# 复制nginx配置文件
|
||||||
|
COPY docker/nginx/conf/nginx.conf /etc/nginx/sites-enabled/default
|
||||||
|
|
||||||
RUN chmod +x /app/api/start.sh
|
RUN chmod +x /app/api/start.sh
|
||||||
|
|
||||||
|
WORKDIR /app/api
|
||||||
|
|
||||||
ENTRYPOINT ["/app/api/start.sh"]
|
ENTRYPOINT ["/app/api/start.sh"]
|
||||||
58
README.md
58
README.md
@@ -1,13 +1,13 @@
|
|||||||
### PlayEdu Light Docker 构建方案
|
## PlayEdu Light Docker 构建方案
|
||||||
|
|
||||||
本套方案将 API + PC 前台 + 后台管理 三个整合在一个镜像当中,适用于轻量级客户。
|
本套方案将 API + PC 前台 + H5 前台 + 后台管理 四个整合在一个镜像当中,适用于轻量级客户。
|
||||||
|
|
||||||
### 使用官方镜像
|
### 直接运行
|
||||||
|
|
||||||
在命令行中执行:
|
在命令行中执行:
|
||||||
|
|
||||||
```
|
```
|
||||||
docker run -d -p 9700:80 -p 9800:9800 -p 9900:9900 --name playedu-light \
|
docker run -d -p 9700:80 -p 9800:9800 -p 9801:9801 -p 9900:9900 --name playedu-light \
|
||||||
-e DB_HOST=数据库host \
|
-e DB_HOST=数据库host \
|
||||||
-e DB_PORT=数据库端口 \
|
-e DB_PORT=数据库端口 \
|
||||||
-e DB_NAME=数据库名 \
|
-e DB_NAME=数据库名 \
|
||||||
@@ -16,50 +16,14 @@ docker run -d -p 9700:80 -p 9800:9800 -p 9900:9900 --name playedu-light \
|
|||||||
-e REDIS_HOST=Redis的host \
|
-e REDIS_HOST=Redis的host \
|
||||||
-e REDIS_PORT=Redis的端口 \
|
-e REDIS_PORT=Redis的端口 \
|
||||||
-e REDIS_PASS=redis的密码 \
|
-e REDIS_PASS=redis的密码 \
|
||||||
-e SA_TOKEN_JWT_SECRET_KEY=随机英文+数字的字符串 \
|
registry.cn-hangzhou.aliyuncs.com/playedu/light:1.3
|
||||||
registry.cn-hangzhou.aliyuncs.com/playedu/light:1.0-beta.7.1
|
|
||||||
```
|
```
|
||||||
|
|
||||||
跑起来之后,可以通过下面的链接访问前后台:
|
跑起来之后,可以通过下面的链接访问前后台:
|
||||||
|
|
||||||
| 端口 | 地址 |
|
| 端口 | 地址 |
|
||||||
| -------- | -------------------------- |
|
| ------------ | -------------------------- |
|
||||||
| API 服务 | `http://你的服务器IP:9700` |
|
| API 服务 | `http://你的服务器IP:9700` |
|
||||||
| 学员界面 | `http://你的服务器IP:9800` |
|
| 学员 PC 界面 | `http://你的服务器IP:9800` |
|
||||||
| 后台管理 | `http://你的服务器IP:9900` |
|
| 学员 H5 界面 | `http://你的服务器IP:9801` |
|
||||||
|
| 后台管理 | `http://你的服务器IP:9900` |
|
||||||
### 自己动手
|
|
||||||
|
|
||||||
- API 程序 `package` 之后,将 `jar` 包复制到 `api` 目录下,并重新命名为 `app.jar`
|
|
||||||
- PC 界面程序 build 之后(`VITE_APP_URL=/api/` 应该这样设置),将 `dist` 目录复制到本项目的根目录,然后重命名为 `frontend`
|
|
||||||
- 后台界面程序 build 之后(`VITE_APP_URL=/api/` 应该这样设置),将 `dist` 目录复制到本项目的根目录,然后重命名为 `backend`
|
|
||||||
|
|
||||||
之后,在本项目目录命令执行:
|
|
||||||
|
|
||||||
```
|
|
||||||
docker build -t playedu-light .
|
|
||||||
```
|
|
||||||
|
|
||||||
执行完毕之后,可运行下面命令将 PlayEdu 服务跑起来:
|
|
||||||
|
|
||||||
```
|
|
||||||
docker run -d -p 9700:80 -p 9800:9800 -p 9900:9900 --name playedu-local \
|
|
||||||
-e DB_HOST=数据库host \
|
|
||||||
-e DB_PORT=数据库端口 \
|
|
||||||
-e DB_NAME=数据库名 \
|
|
||||||
-e DB_USER=数据库用户 \
|
|
||||||
-e DB_PASS=数据库密码 \
|
|
||||||
-e REDIS_HOST=Redis的host \
|
|
||||||
-e REDIS_PORT=Redis的端口 \
|
|
||||||
-e REDIS_PASS=redis的密码 \
|
|
||||||
-e SA_TOKEN_JWT_SECRET_KEY=随机英文+数字的字符串 \
|
|
||||||
playedu-light
|
|
||||||
```
|
|
||||||
|
|
||||||
跑起来之后,可以通过下面的链接访问前后台:
|
|
||||||
|
|
||||||
| 端口 | 地址 |
|
|
||||||
| -------- | -------------------------- |
|
|
||||||
| API 服务 | `http://你的服务器IP:9700` |
|
|
||||||
| 学员界面 | `http://你的服务器IP:9800` |
|
|
||||||
| 后台管理 | `http://你的服务器IP:9900` |
|
|
||||||
|
|||||||
3
api/.gitignore
vendored
3
api/.gitignore
vendored
@@ -1,3 +0,0 @@
|
|||||||
*
|
|
||||||
!.gitignore
|
|
||||||
!start.sh
|
|
||||||
@@ -40,6 +40,48 @@ server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
# 监听端口号9801
|
||||||
|
listen 9801 default_server;
|
||||||
|
# 禁用绝对重定向
|
||||||
|
# 如果没有设置该配置项,当Nginx重定向时,它将使用绝对路径,这意味着当用户访问一个虚拟主机时
|
||||||
|
# Nginx可能会将他们重定向到另一个主机的URL,这可能会导致安全问题和用户体验问题。因此,通过
|
||||||
|
# 设置 absolute_redirect off ,Nginx将使用相对路径进行重定向,以确保用户在同一主机上进
|
||||||
|
# 行重定向,而不会遇到上述问题。
|
||||||
|
absolute_redirect off;
|
||||||
|
# 匹配任何主机名
|
||||||
|
server_name _;
|
||||||
|
# 指定Web应用程序的根目录
|
||||||
|
root /app/h5;
|
||||||
|
# 指定默认的索引文件为index.html
|
||||||
|
index index.html;
|
||||||
|
# 启用gzip压缩
|
||||||
|
gzip on;
|
||||||
|
gzip_static on;
|
||||||
|
gzip_buffers 4 16k;
|
||||||
|
gzip_http_version 1.1;
|
||||||
|
gzip_comp_level 5;
|
||||||
|
gzip_types text/plain application/javascript text/css application/xml text/javascript;
|
||||||
|
gzip_vary on;
|
||||||
|
|
||||||
|
# 将所有以/api/开头的请求代理到本地地址为127.0.0.1:9898的Web应用程序后端服务器
|
||||||
|
location /api/ {
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_pass http://127.0.0.1:9898/;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 拒绝所有以.ht开头的请求
|
||||||
|
location ~ /\.ht {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
|
||||||
|
# 处理所有不以/api/开头的请求,尝试查找匹配的文件,如果没有找到则返回index.html
|
||||||
|
location ~* ^/(?![api].*) {
|
||||||
|
try_files $uri /index.html;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
# 监听端口号9900
|
# 监听端口号9900
|
||||||
listen 9900 default_server;
|
listen 9900 default_server;
|
||||||
Reference in New Issue
Block a user