Commit dbdf1d9fb07b79050469857b5f4b548fbd14a565
Committed by
Gitee
!468 feat: Docker最简支持
Merge pull request !468 from dhb52/master
Showing
9 changed files
with
236 additions
and
2 deletions
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,11 +9,15 @@ WORKDIR /yudao-server | ||
| 9 | COPY ./target/yudao-server.jar app.jar | 9 | COPY ./target/yudao-server.jar app.jar |
| 10 | 10 | ||
| 11 | ## 设置 TZ 时区 | 11 | ## 设置 TZ 时区 |
| 12 | +ENV TZ=Asia/Shanghai | ||
| 12 | ## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖 | 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 | ## 暴露后端项目的 48080 端口 | 19 | ## 暴露后端项目的 48080 端口 |
| 16 | EXPOSE 48080 | 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
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