Commit dbdf1d9fb07b79050469857b5f4b548fbd14a565

Authored by 芋道源码
Committed by Gitee
2 parents c74ab745 7c1a4db5

!468 feat: Docker最简支持

Merge pull request !468 from dhb52/master
Docker-HOWTO.md 0 → 100644
  1 +# Docker Build & Up
  2 +
  3 +目标: 快速部署体验系统,帮助了解系统之间的依赖关系。
  4 +
  5 +## 功能文件列表
  6 +
  7 +```text
  8 +.
  9 +├── Docker-HOWTO.md
  10 +├── docker-compose.yml
  11 +├── docker.env
  12 +├── yudao-server
  13 +│ ├── Dockerfile
  14 +│ └── nginx.conf
  15 +└── yudao-ui-admin
  16 + ├── .dockerignore
  17 + └── Dockerfile
  18 +```
  19 +
  20 +## Maven build (Optional)
  21 +
  22 +```shell
  23 +# 创建maven缓存volume
  24 +docker volume create --name yudao-maven-repo
  25 +
  26 +docker run -it --rm --name yudao-maven \
  27 + -v yudao-maven-repo:/root/.m2 \
  28 + -v $PWD:/usr/src/mymaven \
  29 + -w /usr/src/mymaven \
  30 + maven mvn clean install package '-Dmaven.test.skip=true'
  31 +```
  32 +
  33 +## Docker Compose Build
  34 +
  35 +```shell
  36 +docker compose --env-file docker.env build
  37 +```
  38 +
  39 +## Docker Compose Up
  40 +
  41 +```shell
  42 +docker compose --env-file docker.env up -d
  43 +```
  44 +
  45 +第一次执行,由于数据库未初始化,因此yudao-server容器会运行失败。执行如下命令初始化数据库:
  46 +
  47 +```shell
  48 +docker exec -i yudao-mysql \
  49 + sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" ruoyi-vue-pro' \
  50 + < ./sql/mysql/ruoyi-vue-pro.sql
  51 +```
  52 +
  53 +注意:这里用docker compose exec 会出现 `the input device is not a TTY` 报错
  54 +
  55 +## Server:Port
  56 +
  57 +- admin: http://localhost:8080
  58 +- API: http://localhost:48080
  59 +- mysql: root/123456, port: 3308
  60 +- redis: port: 6379
... ...
docker-compose.yml 0 → 100644
  1 +version: "3.8"
  2 +
  3 +name: yudao-system
  4 +
  5 +services:
  6 + mysql:
  7 + container_name: yudao-mysql
  8 + image: mysql:8
  9 + restart: unless-stopped
  10 + tty: true
  11 + ports:
  12 + - 13306:3306
  13 + environment:
  14 + MYSQL_DATABASE: ${MYSQL_DATABASE:-ruoyi-vue-pro}
  15 + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-123456}
  16 + volumes:
  17 + - mysql:/var/lib/mysql/
  18 + networks:
  19 + - yudao-network
  20 +
  21 + redis:
  22 + container_name: yudao-redis
  23 + image: redis:6-alpine
  24 + restart: unless-stopped
  25 + ports:
  26 + - 16379:6379
  27 + volumes:
  28 + - redis:/data
  29 + networks:
  30 + - yudao-network
  31 +
  32 + server:
  33 + container_name: yudao-server
  34 + build:
  35 + context: ./yudao-server/
  36 + image: yudao-server
  37 + restart: unless-stopped
  38 + ports:
  39 + - 48080:48080
  40 + environment:
  41 + # https://github.com/polovyivan/docker-pass-configs-to-container
  42 + SPRING_PROFILES_ACTIVE: local
  43 + JAVA_OPTS:
  44 + ${JAVA_OPTS:-
  45 + -Xms512m
  46 + -Xmx512m
  47 + -Djava.security.egd=file:/dev/./urandom
  48 + }
  49 + ARGS:
  50 + --spring.datasource.dynamic.datasource.master.url=${MASTER_DATASOURCE_URL:-jdbc:mysql://yudao-mysql:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true}
  51 + --spring.datasource.dynamic.datasource.master.username=${MASTER_DATASOURCE_USERNAME:-root}
  52 + --spring.datasource.dynamic.datasource.master.password=${MASTER_DATASOURCE_PASSWORD:-123456}
  53 + --spring.datasource.dynamic.datasource.slave.url=${SLAVE_DATASOURCE_URL:-jdbc:mysql://yudao-mysql:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true}
  54 + --spring.datasource.dynamic.datasource.slave.username=${SLAVE_DATASOURCE_USERNAME:-root}
  55 + --spring.datasource.dynamic.datasource.slave.password=${SLAVE_DATASOURCE_PASSWORD:-123456}
  56 + --spring.redis.host=${REDIS_HOST:-yudao-redis}
  57 + networks:
  58 + - yudao-network
  59 + depends_on:
  60 + - mysql
  61 + - redis
  62 +
  63 + admin:
  64 + container_name: yudao-admin
  65 + build:
  66 + context: ./yudao-ui-admin
  67 + args:
  68 + NODE_ENV:
  69 + ENV=${NODE_ENV:-production}
  70 + PUBLIC_PATH=${PUBLIC_PATH:-/}
  71 + VUE_APP_TITLE=${VUE_APP_TITLE:-芋道管理系统}
  72 + VUE_APP_BASE_API=${VUE_APP_BASE_API:-/prod-api}
  73 + VUE_APP_APP_NAME=${VUE_APP_APP_NAME:-/}
  74 + VUE_APP_TENANT_ENABLE=${VUE_APP_TENANT_ENABLE:-true}
  75 + VUE_APP_CAPTCHA_ENABLE=${VUE_APP_CAPTCHA_ENABLE:-true}
  76 + VUE_APP_DOC_ENABLE=${VUE_APP_DOC_ENABLE:-true}
  77 + VUE_APP_BAIDU_CODE=${VUE_APP_BAIDU_CODE:-fadc1bd5db1a1d6f581df60a1807f8ab}
  78 + image: yudao-admin
  79 + restart: unless-stopped
  80 + ports:
  81 + - 8080:80
  82 + networks:
  83 + - yudao-network
  84 + depends_on:
  85 + - server
  86 +
  87 +networks:
  88 + yudao-network:
  89 + driver: bridge
  90 +
  91 +volumes:
  92 + mysql:
  93 + driver: local
  94 + redis:
  95 + driver: local
... ...
docker.env 0 → 100644
  1 +## mysql
  2 +MYSQL_DATABASE=ruoyi-vue-pro
  3 +MYSQL_ROOT_PASSWORD=123456
  4 +
  5 +## server
  6 +JAVA_OPTS=-Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom
  7 +
  8 +MASTER_DATASOURCE_URL=jdbc:mysql://yudao-mysql:3306/${MYSQL_DATABASE}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
  9 +MASTER_DATASOURCE_USERNAME=root
  10 +MASTER_DATASOURCE_PASSWORD=${MYSQL_ROOT_PASSWORD}
  11 +SLAVE_DATASOURCE_URL=${MASTER_DATASOURCE_URL}
  12 +SLAVE_DATASOURCE_USERNAME=${MASTER_DATASOURCE_USERNAME}
  13 +SLAVE_DATASOURCE_PASSWORD=${MASTER_DATASOURCE_PASSWORD}
  14 +REDIS_HOST=yudao-redis
  15 +
  16 +## admin
  17 +NODE_ENV=production
  18 +PUBLIC_PATH=/
  19 +VUE_APP_TITLE=芋道管理系统
  20 +VUE_APP_BASE_API=/prod-api
  21 +VUE_APP_APP_NAME=/
  22 +VUE_APP_TENANT_ENABLE=true
  23 +VUE_APP_CAPTCHA_ENABLE=true
  24 +VUE_APP_DOC_ENABLE=true
  25 +VUE_APP_BAIDU_CODE=fadc1bd5db1a1d6f581df60a1807f8ab
... ...
yudao-server/Dockerfile
... ... @@ -9,11 +9,15 @@ WORKDIR /yudao-server
9 9 COPY ./target/yudao-server.jar app.jar
10 10  
11 11 ## 设置 TZ 时区
  12 +ENV TZ=Asia/Shanghai
12 13 ## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
13   -ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m"
  14 +ENV JAVA_OPTS="-Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom"
  15 +
  16 +## 应用参数
  17 +ENV ARGS=""
14 18  
15 19 ## 暴露后端项目的 48080 端口
16 20 EXPOSE 48080
17 21  
18 22 ## 启动后端项目
19   -CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar
  23 +CMD java ${JAVA_OPTS} -jar app.jar $ARGS
... ...
yudao-ui-admin/.dockerignore 0 → 100644
  1 +.dockerignore
  2 +dist
  3 +node_modules
... ...
yudao-ui-admin/Dockerfile 0 → 100644
  1 +FROM node:16-alpine as build-stage
  2 +
  3 +WORKDIR /admim
  4 +
  5 +COPY .npmrc package.json yarn.lock ./
  6 +RUN --mount=type=cache,id=yarn-store,target=/root/.yarn-store \
  7 + yarn install --frozen-lockfile
  8 +
  9 +COPY . .
  10 +ARG NODE_ENV=""
  11 +RUN env ${NODE_ENV} yarn build:prod
  12 +
  13 +## -- stage: dist => nginx --
  14 +FROM nginx:alpine
  15 +
  16 +ENV TZ=Asia/Shanghai
  17 +
  18 +COPY ./nginx.conf /etc/nginx/conf.d/default.conf
  19 +COPY --from=build-stage /admim/dist /usr/share/nginx/html
  20 +
  21 +EXPOSE 80
... ...
yudao-ui-admin/nginx.conf 0 → 100644
  1 +server {
  2 + listen 80 default_server;
  3 + server_name _; ## 重要!!!修改成你的外网 IP/域名
  4 +
  5 + gzip on;
  6 + gzip_min_length 1k; # 设置允许压缩的页面最小字节数
  7 + gzip_buffers 4 16k; # 用来存储 gzip 的压缩结果
  8 + gzip_http_version 1.1; # 识别 HTTP 协议版本
  9 + gzip_comp_level 2; # 设置 gzip 的压缩比 1-9。1 压缩比最小但最快,而 9 相反
  10 + gzip_types text/plain application/x-javascript text/css application/xml application/javascript; # 指定压缩类型
  11 + gzip_proxied any; # 无论后端服务器的 headers 头返回什么信息,都无条件启用压缩
  12 +
  13 + location / { ## 前端项目
  14 + root /usr/share/nginx/html/;
  15 + index index.html index.htm;
  16 + try_files $uri $uri/ /index.html;
  17 + }
  18 +
  19 + location /prod-api/ { ## 后端项目 - 管理后台
  20 + proxy_pass http://yudao-server:48080/; ## 重要!!!proxy_pass 需要设置为后端项目所在服务器的 IP
  21 + proxy_set_header Host $http_host;
  22 + proxy_set_header X-Real-IP $remote_addr;
  23 + proxy_set_header REMOTE-HOST $remote_addr;
  24 + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  25 + }
  26 +}
... ...
yudao-ui-admin/src/views/bpm/task/done.vue renamed to yudao-ui-admin/src/views/bpm/task/done/index.vue
yudao-ui-admin/src/views/bpm/task/todo.vue renamed to yudao-ui-admin/src/views/bpm/task/todo/index.vue