Commit ee2cfb9c0db030257d2737b54b2df4f8491571a6
1 parent
a1f5a0f0
feat(deploy): 更新 Docker Compose 部署配置
将 script/docker 迁移为 script/docker-compose,更新 MySQL、Redis、后端和 Nginx 配置。 提供环境变量示例、初始化与运维说明,统一要求 Compose 2.20.2 及以上。
Showing
8 changed files
with
357 additions
and
158 deletions
script/docker-compose/.env.example
0 → 100644
| 1 | +# 复制为 .env 后修改:cp .env.example .env | |
| 2 | +# 以下密码仅为示例,部署前请替换;.env 已被 .gitignore 忽略,不要提交 | |
| 3 | + | |
| 4 | +## 前端 Nginx 对宿主机开放的端口 | |
| 5 | +WEB_PORT=8080 | |
| 6 | + | |
| 7 | +## 后端镜像 tag(每次重新打包后可修改,便于回滚) | |
| 8 | +IMAGE_TAG=local | |
| 9 | + | |
| 10 | +## MySQL(首次初始化时生效,已有数据卷后修改不会改变库内账号密码) | |
| 11 | +MYSQL_DATABASE=ruoyi-vue-pro | |
| 12 | +MYSQL_ROOT_PASSWORD=Root@ChangeMe2026 | |
| 13 | +MYSQL_USER=yudao | |
| 14 | +MYSQL_PASSWORD=Yudao@ChangeMe2026 | |
| 15 | + | |
| 16 | +## Redis | |
| 17 | +REDIS_PASSWORD=Redis@ChangeMe2026 | |
| 18 | + | |
| 19 | +## 后端应用 | |
| 20 | +SPRING_PROFILES_ACTIVE=dev | |
| 21 | +JAVA_OPTS=-Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom | |
| 22 | +# 需与前端打包时的 VITE_APP_CAPTCHA_ENABLE 一致 | |
| 23 | +YUDAO_CAPTCHA_ENABLE=true | ... | ... |
script/docker-compose/.gitignore
0 → 100644
script/docker-compose/README.md
0 → 100644
| 1 | +# Docker Compose 部署(单体版) | |
| 2 | + | |
| 3 | +目标:用 Docker Compose V2 快速搭建一套可登录的体验环境,了解各组件之间的依赖关系。 | |
| 4 | + | |
| 5 | +包含:`yudao-server` 后端、前端 Nginx、MySQL、Redis。仅用于入门体验与测试,不是生产高可用方案。 | |
| 6 | + | |
| 7 | +## 文件列表 | |
| 8 | + | |
| 9 | +```text | |
| 10 | +script/docker-compose | |
| 11 | +├── README.md | |
| 12 | +├── docker-compose.yml <-- 编排文件,相对路径均相对于本目录 | |
| 13 | +├── .env.example <-- 环境变量示例,复制为 .env 后修改 | |
| 14 | +├── .gitignore <-- 忽略 .env、web/dist/ | |
| 15 | +├── nginx | |
| 16 | +│ └── default.conf <-- 静态资源、history 回退、/admin-api、/app-api、/infra/ws 反向代理 | |
| 17 | +└── web | |
| 18 | + └── dist <-- 需自行放入前端打包产物(不随仓库提供) | |
| 19 | +``` | |
| 20 | + | |
| 21 | +| 服务 | 镜像 | 说明 | | |
| 22 | +| --- | --- | --- | | |
| 23 | +| `mysql` | `mysql:8.4` | 首次启动导入 `sql/mysql/ruoyi-vue-pro.sql`、`sql/mysql/quartz.sql`,数据卷 `yudao-boot_mysql-data` | | |
| 24 | +| `redis` | `redis:7.4-alpine` | 开启密码与 AOF,数据卷 `yudao-boot_redis-data` | | |
| 25 | +| `yudao-server` | `yudao-server:${IMAGE_TAG}` | 由 `yudao-server/Dockerfile` 构建,端口 48080,只在 Compose 网络内访问 | | |
| 26 | +| `web` | `nginx:1.28-alpine` | 对宿主机开放 `${WEB_PORT}`(默认 8080) | | |
| 27 | + | |
| 28 | +容器之间通过服务名(`mysql`、`redis`、`yudao-server`)访问。MySQL、Redis、后端默认不映射到宿主机,不会与本机已有的 3306、6379、48080 冲突;需要时取消 `docker-compose.yml` 中对应 `ports` 的注释。 | |
| 29 | + | |
| 30 | +## 前置条件 | |
| 31 | + | |
| 32 | +- Docker Engine + Docker Compose V2.20.2 及以上(`docker compose version` 可查看) | |
| 33 | +- JDK 17、Maven(与源码根 `pom.xml` 的 `java.version` 一致) | |
| 34 | +- 已按前端项目的部署说明完成打包 | |
| 35 | + | |
| 36 | +## 1. 打包后端 | |
| 37 | + | |
| 38 | +在**源码根目录**执行: | |
| 39 | + | |
| 40 | +```shell | |
| 41 | +mvn clean package -pl yudao-server -am -Dmaven.test.skip=true | |
| 42 | +``` | |
| 43 | + | |
| 44 | +产物为 `yudao-server/target/yudao-server.jar`,`docker compose build` 时由 `yudao-server/Dockerfile` 复制进镜像。 | |
| 45 | + | |
| 46 | +## 2. 准备前端产物 | |
| 47 | + | |
| 48 | +前端是独立仓库,这里不构建前端源码。打包前确认前端生产环境配置: | |
| 49 | + | |
| 50 | +- 浏览器访问地址使用 Nginx 的同源地址,例如 `http://localhost:8080`,不要写 `yudao-server`、`127.0.0.1:48080` 等容器名或后端端口 | |
| 51 | +- API 路径为 `/admin-api`:`yudao-ui-admin-vue3` 为 `.env.prod` 的 `VITE_BASE_URL` + `VITE_API_URL`;`yudao-ui-admin-vben` 为 `apps/web-*/.env.production` 的 `VITE_BASE_URL`、`VITE_GLOB_API_URL` | |
| 52 | +- 前端 `VITE_APP_CAPTCHA_ENABLE` 与 `.env` 中的 `YUDAO_CAPTCHA_ENABLE` 一致 | |
| 53 | + | |
| 54 | +将打包产物目录中的内容(包含 `index.html`)复制到 `script/docker-compose/web/dist/`,在**源码根目录**执行: | |
| 55 | + | |
| 56 | +```shell | |
| 57 | +mkdir -p script/docker-compose/web/dist | |
| 58 | +cp -R /path/to/前端打包产物目录/. script/docker-compose/web/dist/ | |
| 59 | +``` | |
| 60 | + | |
| 61 | +例如 `yudao-ui-admin-vue3` 执行 `pnpm build:prod` 后为 `dist-prod`;`yudao-ui-admin-vben` 执行 `pnpm build:antd` 后为 `apps/web-antd/dist`。 | |
| 62 | + | |
| 63 | +## 3. 配置环境变量 | |
| 64 | + | |
| 65 | +```shell | |
| 66 | +cd script/docker-compose | |
| 67 | +cp .env.example .env | |
| 68 | +``` | |
| 69 | + | |
| 70 | +按需修改 `.env`,至少替换 `MYSQL_ROOT_PASSWORD`、`MYSQL_PASSWORD`、`REDIS_PASSWORD` 三个示例密码。 | |
| 71 | + | |
| 72 | +| 变量 | 默认值 | 说明 | | |
| 73 | +| --- | --- | --- | | |
| 74 | +| `WEB_PORT` | `8080` | 前端访问端口 | | |
| 75 | +| `IMAGE_TAG` | `local` | 后端镜像 tag | | |
| 76 | +| `MYSQL_DATABASE` | `ruoyi-vue-pro` | 数据库名 | | |
| 77 | +| `MYSQL_ROOT_PASSWORD` | 示例值 | MySQL root 密码,仅供初始化与运维使用 | | |
| 78 | +| `MYSQL_USER` / `MYSQL_PASSWORD` | `yudao` / 示例值 | 应用使用的账号,只拥有 `MYSQL_DATABASE` 库权限 | | |
| 79 | +| `REDIS_PASSWORD` | 示例值 | Redis 密码 | | |
| 80 | +| `SPRING_PROFILES_ACTIVE` | `dev` | 后端 profile | | |
| 81 | +| `JAVA_OPTS` | `-Xms512m -Xmx512m ...` | JVM 参数 | | |
| 82 | +| `YUDAO_CAPTCHA_ENABLE` | `true` | 是否开启登录验证码 | | |
| 83 | + | |
| 84 | +后端的数据库(主库 `master`、从库 `slave`)、Redis 连接,由 `docker-compose.yml` 通过环境变量覆盖 `application-dev.yaml` 中的 `127.0.0.1` 等地址;其余配置仍使用 `application.yaml`、`application-dev.yaml`。 | |
| 85 | + | |
| 86 | +## 4. 构建并启动 | |
| 87 | + | |
| 88 | +以下命令均在 `script/docker-compose` 目录执行: | |
| 89 | + | |
| 90 | +```shell | |
| 91 | +# 检查配置(变量缺失会直接报错) | |
| 92 | +docker compose config | |
| 93 | + | |
| 94 | +# 构建后端镜像并启动 | |
| 95 | +docker compose up -d --build | |
| 96 | + | |
| 97 | +# 查看状态与日志 | |
| 98 | +docker compose ps | |
| 99 | +docker compose logs -f yudao-server | |
| 100 | +``` | |
| 101 | + | |
| 102 | +首次启动时 MySQL 需要导入 SQL,`yudao-server` 会等到 MySQL、Redis 健康检查通过后再启动。日志出现 `Started YudaoServerApplication` 后访问: | |
| 103 | + | |
| 104 | +- 管理后台:http://localhost:8080 (`WEB_PORT` 修改后对应调整) | |
| 105 | + | |
| 106 | +## 5. 更新 | |
| 107 | + | |
| 108 | +```shell | |
| 109 | +# 后端:回到源码根目录重新打包,再回到本目录重建、重启 | |
| 110 | +cd ../.. | |
| 111 | +mvn clean package -pl yudao-server -am -Dmaven.test.skip=true | |
| 112 | +cd script/docker-compose | |
| 113 | +docker compose up -d --build yudao-server | |
| 114 | + | |
| 115 | +# 前端:清空 web/dist/ 内的文件(保留 dist 目录本身)后复制新产物,再重启 web;修改 nginx/default.conf 后同样执行 | |
| 116 | +rm -rf web/dist/* | |
| 117 | +cp -R /path/to/前端打包产物目录/. web/dist/ | |
| 118 | +docker compose restart web | |
| 119 | +``` | |
| 120 | + | |
| 121 | +如需回滚,可在打包前修改 `.env` 的 `IMAGE_TAG`,保留旧 tag 的镜像。 | |
| 122 | + | |
| 123 | +## 6. 停止与数据 | |
| 124 | + | |
| 125 | +```shell | |
| 126 | +# 停止并删除容器,保留数据卷 | |
| 127 | +docker compose down | |
| 128 | +``` | |
| 129 | + | |
| 130 | +**不要执行 `docker compose down -v`**,它会删除 `yudao-boot_mysql-data`、`yudao-boot_redis-data` 数据卷,数据库内容将全部丢失。 | |
| 131 | + | |
| 132 | +## 数据库初始化说明 | |
| 133 | + | |
| 134 | +- SQL 只在 `mysql-data` 数据卷为空(首次启动)时执行一次;之后修改 SQL 文件、`.env` 中的 `MYSQL_*` 账号密码,都不会作用于已有数据库。 | |
| 135 | +- 首次导入中途失败(例如容器被强制停止),数据卷会处于半初始化状态,需要确认数据可丢弃后执行 `docker compose down`、`docker volume rm yudao-boot_mysql-data` 再重新启动。 | |
| 136 | +- 已有数据卷升级到新版本时,SQL 不会自动执行。请先备份,再手动执行对应的升级 SQL,例如: | |
| 137 | + | |
| 138 | +```shell | |
| 139 | +docker compose exec -T mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" "$MYSQL_DATABASE"' < /path/to/upgrade.sql | |
| 140 | +``` | |
| 141 | + | |
| 142 | +- 使用外部 MySQL 时:自行导入 `sql/mysql/ruoyi-vue-pro.sql`、`sql/mysql/quartz.sql`,删除 `docker-compose.yml` 中的 `mysql` 服务及 `yudao-server` 对它的 `depends_on`,并把 `SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_*`、`SLAVE_*` 改为外部地址;容器内的 `127.0.0.1` 指向容器自身,不是宿主机。 | |
| 143 | + | |
| 144 | +## 其他分支同步替换点 | |
| 145 | + | |
| 146 | +本目录按 JDK 17 + Spring Boot 3.x 分支编写。同步到其他分支时,只需替换: | |
| 147 | + | |
| 148 | +| 分支 | 后端 Dockerfile 基础镜像 | Redis 环境变量前缀 | | |
| 149 | +| --- | --- | --- | | |
| 150 | +| JDK 8 + Spring Boot 2.x | `eclipse-temurin:8-jre` | `SPRING_REDIS_*`(`spring.redis.*`) | | |
| 151 | +| JDK 17 + Spring Boot 3.x | `eclipse-temurin:17-jre` | `SPRING_DATA_REDIS_*`(`spring.data.redis.*`) | | |
| 152 | +| JDK 25 + Spring Boot 4.x | `eclipse-temurin:25-jre` | `SPRING_DATA_REDIS_*`(`spring.data.redis.*`) | | |
| 153 | + | |
| 154 | +并核对该分支 `yudao-server/src/main/resources/application-*.yaml` 的数据源、Redis 配置项与 `sql/mysql` 下的 SQL 文件名。 | ... | ... |
script/docker-compose/docker-compose.yml
0 → 100644
| 1 | +# 芋道 Boot 单体版 Docker Compose 入门部署:yudao-server + 前端 Nginx + MySQL + Redis | |
| 2 | +# 使用说明见同目录 README.md;需 Docker Compose V2.20.2 及以上(docker compose 命令) | |
| 3 | +# 本文件中的相对路径,均相对于本文件所在目录,与执行命令时的当前目录无关 | |
| 4 | + | |
| 5 | +name: yudao-boot | |
| 6 | + | |
| 7 | +services: | |
| 8 | + mysql: | |
| 9 | + image: mysql:8.4 | |
| 10 | + restart: unless-stopped | |
| 11 | + command: | |
| 12 | + - --character-set-server=utf8mb4 | |
| 13 | + - --collation-server=utf8mb4_unicode_ci | |
| 14 | + environment: | |
| 15 | + TZ: Asia/Shanghai | |
| 16 | + MYSQL_DATABASE: ${MYSQL_DATABASE:-ruoyi-vue-pro} | |
| 17 | + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?请在 .env 中设置 MYSQL_ROOT_PASSWORD} | |
| 18 | + MYSQL_USER: ${MYSQL_USER:-yudao} | |
| 19 | + MYSQL_PASSWORD: ${MYSQL_PASSWORD:?请在 .env 中设置 MYSQL_PASSWORD} | |
| 20 | + volumes: | |
| 21 | + - mysql-data:/var/lib/mysql | |
| 22 | + # 仅在 mysql-data 卷为空(首次启动)时,按文件名顺序执行;SQL 文件不存在时直接报错,避免被创建成空目录 | |
| 23 | + - type: bind | |
| 24 | + source: ../../sql/mysql/ruoyi-vue-pro.sql | |
| 25 | + target: /docker-entrypoint-initdb.d/01-ruoyi-vue-pro.sql | |
| 26 | + read_only: true | |
| 27 | + bind: | |
| 28 | + create_host_path: false | |
| 29 | + - type: bind | |
| 30 | + source: ../../sql/mysql/quartz.sql | |
| 31 | + target: /docker-entrypoint-initdb.d/02-quartz.sql | |
| 32 | + read_only: true | |
| 33 | + bind: | |
| 34 | + create_host_path: false | |
| 35 | + # 默认不对宿主机开放;需要本机客户端连接时,取消注释(避免与本机已有 3306 冲突) | |
| 36 | + # ports: | |
| 37 | + # - "127.0.0.1:13306:3306" | |
| 38 | + healthcheck: | |
| 39 | + # 首次初始化时 MySQL 临时实例不监听 TCP,因此 127.0.0.1 可连通即表示初始化完成 | |
| 40 | + test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -u root -p\"$$MYSQL_ROOT_PASSWORD\" --silent"] | |
| 41 | + interval: 10s | |
| 42 | + timeout: 5s | |
| 43 | + retries: 30 | |
| 44 | + start_period: 60s | |
| 45 | + | |
| 46 | + redis: | |
| 47 | + image: redis:7.4-alpine | |
| 48 | + restart: unless-stopped | |
| 49 | + command: ["redis-server", "--appendonly", "yes", "--requirepass", "${REDIS_PASSWORD:?请在 .env 中设置 REDIS_PASSWORD}"] | |
| 50 | + environment: | |
| 51 | + REDISCLI_AUTH: ${REDIS_PASSWORD} | |
| 52 | + volumes: | |
| 53 | + - redis-data:/data | |
| 54 | + # 默认不对宿主机开放;需要时取消注释(避免与本机已有 6379 冲突) | |
| 55 | + # ports: | |
| 56 | + # - "127.0.0.1:16379:6379" | |
| 57 | + healthcheck: | |
| 58 | + test: ["CMD", "redis-cli", "ping"] | |
| 59 | + interval: 10s | |
| 60 | + timeout: 5s | |
| 61 | + retries: 10 | |
| 62 | + | |
| 63 | + yudao-server: | |
| 64 | + # 使用模块自带的 Dockerfile,需先在源码根目录执行 mvn 打包,生成 yudao-server/target/yudao-server.jar | |
| 65 | + build: | |
| 66 | + context: ../../yudao-server | |
| 67 | + image: yudao-server:${IMAGE_TAG:-local} | |
| 68 | + restart: unless-stopped | |
| 69 | + environment: | |
| 70 | + SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE:-dev} | |
| 71 | + JAVA_OPTS: ${JAVA_OPTS:--Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom} | |
| 72 | + # 数据库:主库、从库都要覆盖,否则会使用 application-${SPRING_PROFILES_ACTIVE}.yaml 中的 127.0.0.1 | |
| 73 | + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL: jdbc:mysql://mysql:3306/${MYSQL_DATABASE:-ruoyi-vue-pro}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true | |
| 74 | + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME: ${MYSQL_USER:-yudao} | |
| 75 | + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: ${MYSQL_PASSWORD} | |
| 76 | + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_SLAVE_URL: jdbc:mysql://mysql:3306/${MYSQL_DATABASE:-ruoyi-vue-pro}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true | |
| 77 | + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_SLAVE_USERNAME: ${MYSQL_USER:-yudao} | |
| 78 | + SPRING_DATASOURCE_DYNAMIC_DATASOURCE_SLAVE_PASSWORD: ${MYSQL_PASSWORD} | |
| 79 | + # Redis:Spring Boot 3.x 使用 spring.data.redis.* | |
| 80 | + SPRING_DATA_REDIS_HOST: redis | |
| 81 | + SPRING_DATA_REDIS_PORT: 6379 | |
| 82 | + SPRING_DATA_REDIS_PASSWORD: ${REDIS_PASSWORD} | |
| 83 | + # 需与前端打包时的 VITE_APP_CAPTCHA_ENABLE 一致 | |
| 84 | + YUDAO_CAPTCHA_ENABLE: ${YUDAO_CAPTCHA_ENABLE:-true} | |
| 85 | + YUDAO_DEMO: "false" | |
| 86 | + depends_on: | |
| 87 | + mysql: | |
| 88 | + condition: service_healthy | |
| 89 | + redis: | |
| 90 | + condition: service_healthy | |
| 91 | + # 默认只通过 web 的 Nginx 访问;需要直连后端排查时,取消注释 | |
| 92 | + # ports: | |
| 93 | + # - "127.0.0.1:48080:48080" | |
| 94 | + | |
| 95 | + web: | |
| 96 | + image: nginx:1.28-alpine | |
| 97 | + restart: unless-stopped | |
| 98 | + ports: | |
| 99 | + - "${WEB_PORT:-8080}:80" | |
| 100 | + volumes: | |
| 101 | + # 前端打包产物(包含 index.html 的目录内容)复制到 ./web/dist | |
| 102 | + - type: bind | |
| 103 | + source: ./web/dist | |
| 104 | + target: /usr/share/nginx/html | |
| 105 | + read_only: true | |
| 106 | + bind: | |
| 107 | + create_host_path: false | |
| 108 | + - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro | |
| 109 | + depends_on: | |
| 110 | + - yudao-server | |
| 111 | + | |
| 112 | +volumes: | |
| 113 | + mysql-data: | |
| 114 | + redis-data: | ... | ... |
script/docker-compose/nginx/default.conf
0 → 100644
| 1 | +# 前端静态资源 + 同源反向代理到 yudao-server | |
| 2 | +# 浏览器只访问本 Nginx,前端 API 地址使用同源路径 /admin-api,不要写容器名 | |
| 3 | + | |
| 4 | +map $http_upgrade $connection_upgrade { | |
| 5 | + default upgrade; | |
| 6 | + '' close; | |
| 7 | +} | |
| 8 | + | |
| 9 | +server { | |
| 10 | + listen 80; | |
| 11 | + server_name _; | |
| 12 | + | |
| 13 | + root /usr/share/nginx/html; | |
| 14 | + index index.html; | |
| 15 | + | |
| 16 | + # 与后端 spring.servlet.multipart.max-request-size 保持一致 | |
| 17 | + client_max_body_size 32m; | |
| 18 | + | |
| 19 | + gzip on; | |
| 20 | + gzip_min_length 1k; | |
| 21 | + gzip_comp_level 5; | |
| 22 | + gzip_types text/plain text/css application/javascript application/json application/xml image/svg+xml; | |
| 23 | + gzip_vary on; | |
| 24 | + | |
| 25 | + # 使用 Docker 内置 DNS 动态解析服务名,后端容器重建后无需重启 Nginx | |
| 26 | + resolver 127.0.0.11 valid=10s ipv6=off; | |
| 27 | + set $yudao_backend http://yudao-server:48080; | |
| 28 | + | |
| 29 | + # 前端路由(history 模式)回退到 index.html | |
| 30 | + location / { | |
| 31 | + try_files $uri $uri/ /index.html; | |
| 32 | + } | |
| 33 | + | |
| 34 | + location = /index.html { | |
| 35 | + add_header Cache-Control "no-cache"; | |
| 36 | + } | |
| 37 | + | |
| 38 | + # 管理后台 API、用户 App API | |
| 39 | + location ~ ^/(admin-api|app-api)/ { | |
| 40 | + proxy_pass $yudao_backend; | |
| 41 | + proxy_http_version 1.1; | |
| 42 | + proxy_set_header Host $http_host; | |
| 43 | + proxy_set_header X-Real-IP $remote_addr; | |
| 44 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| 45 | + proxy_set_header X-Forwarded-Proto $scheme; | |
| 46 | + proxy_set_header Connection ""; | |
| 47 | + # 流式响应(SSE)不缓冲 | |
| 48 | + proxy_buffering off; | |
| 49 | + proxy_read_timeout 300s; | |
| 50 | + } | |
| 51 | + | |
| 52 | + # WebSocket | |
| 53 | + location /infra/ws { | |
| 54 | + proxy_pass $yudao_backend; | |
| 55 | + proxy_http_version 1.1; | |
| 56 | + proxy_set_header Host $http_host; | |
| 57 | + proxy_set_header X-Real-IP $remote_addr; | |
| 58 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| 59 | + proxy_set_header X-Forwarded-Proto $scheme; | |
| 60 | + proxy_set_header Upgrade $http_upgrade; | |
| 61 | + proxy_set_header Connection $connection_upgrade; | |
| 62 | + proxy_read_timeout 3600s; | |
| 63 | + } | |
| 64 | +} | ... | ... |
script/docker/Docker-HOWTO.md deleted
| 1 | -# Docker Build & Up | |
| 2 | - | |
| 3 | -目标: 快速部署体验系统,帮助了解系统之间的依赖关系。 | |
| 4 | -依赖:docker compose v2,删除`name: yudao-system`,降低`version`版本为`3.3`以下,支持`docker-compose`。 | |
| 5 | - | |
| 6 | -## 功能文件列表 | |
| 7 | - | |
| 8 | -```text | |
| 9 | -. | |
| 10 | -├── Docker-HOWTO.md | |
| 11 | -├── docker-compose.yml | |
| 12 | -├── docker.env <-- 提供docker-compose环境变量配置 | |
| 13 | -├── yudao-server | |
| 14 | -│ └── Dockerfile | |
| 15 | -└── yudao-ui-admin | |
| 16 | - ├── .dockerignore | |
| 17 | - ├── Dockerfile | |
| 18 | - └── nginx.conf <-- 提供基础配置,gzip压缩、api转发 | |
| 19 | -``` | |
| 20 | - | |
| 21 | -## 构建 jar 包 | |
| 22 | - | |
| 23 | -```shell | |
| 24 | -# 创建maven缓存volume | |
| 25 | -docker volume create --name yudao-maven-repo | |
| 26 | - | |
| 27 | -docker run -it --rm --name yudao-maven \ | |
| 28 | - -v yudao-maven-repo:/root/.m2 \ | |
| 29 | - -v $PWD:/usr/src/mymaven \ | |
| 30 | - -w /usr/src/mymaven \ | |
| 31 | - maven mvn clean install package '-Dmaven.test.skip=true' | |
| 32 | -``` | |
| 33 | - | |
| 34 | -## 构建启动服务 | |
| 35 | - | |
| 36 | -```shell | |
| 37 | -docker compose --env-file docker.env up -d | |
| 38 | -``` | |
| 39 | - | |
| 40 | -首次运行会自动构建容器。可以通过`docker compose build [service]`来手动构建所有或某个docker镜像 | |
| 41 | - | |
| 42 | -`--env-file docker.env`为可选参数,只是展示了通过`.env`文件配置容器启动的环境变量,`docker-compose.yml`本身已经提供足够的默认参数来正常运行系统。 | |
| 43 | - | |
| 44 | -## 服务器的宿主机端口映射 | |
| 45 | - | |
| 46 | -- admin ui: http://localhost:8080 | |
| 47 | -- api server: http://localhost:48080 | |
| 48 | -- mysql: root/123456, port: 3306 | |
| 49 | -- redis: port: 6379 |
script/docker/docker-compose.yml deleted
| 1 | -version: "3.4" | |
| 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 | - - "3306: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 | - - ./sql/mysql/ruoyi-vue-pro.sql:/docker-entrypoint-initdb.d/ruoyi-vue-pro.sql:ro | |
| 19 | - | |
| 20 | - redis: | |
| 21 | - container_name: yudao-redis | |
| 22 | - image: redis:6-alpine | |
| 23 | - restart: unless-stopped | |
| 24 | - ports: | |
| 25 | - - "6379:6379" | |
| 26 | - volumes: | |
| 27 | - - redis:/data | |
| 28 | - | |
| 29 | - server: | |
| 30 | - container_name: yudao-server | |
| 31 | - build: | |
| 32 | - context: ./yudao-server/ | |
| 33 | - image: yudao-server | |
| 34 | - restart: unless-stopped | |
| 35 | - ports: | |
| 36 | - - "48080:48080" | |
| 37 | - environment: | |
| 38 | - # https://github.com/polovyivan/docker-pass-configs-to-container | |
| 39 | - SPRING_PROFILES_ACTIVE: local | |
| 40 | - JAVA_OPTS: | |
| 41 | - ${JAVA_OPTS:- | |
| 42 | - -Xms512m | |
| 43 | - -Xmx512m | |
| 44 | - -Djava.security.egd=file:/dev/./urandom | |
| 45 | - } | |
| 46 | - ARGS: | |
| 47 | - --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} | |
| 48 | - --spring.datasource.dynamic.datasource.master.username=${MASTER_DATASOURCE_USERNAME:-root} | |
| 49 | - --spring.datasource.dynamic.datasource.master.password=${MASTER_DATASOURCE_PASSWORD:-123456} | |
| 50 | - --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} | |
| 51 | - --spring.datasource.dynamic.datasource.slave.username=${SLAVE_DATASOURCE_USERNAME:-root} | |
| 52 | - --spring.datasource.dynamic.datasource.slave.password=${SLAVE_DATASOURCE_PASSWORD:-123456} | |
| 53 | - --spring.data.redis.host=${REDIS_HOST:-yudao-redis} | |
| 54 | - depends_on: | |
| 55 | - - mysql | |
| 56 | - - redis | |
| 57 | - | |
| 58 | - admin: | |
| 59 | - container_name: yudao-admin | |
| 60 | - build: | |
| 61 | - context: ./yudao-ui-admin | |
| 62 | - args: | |
| 63 | - NODE_ENV: | |
| 64 | - ENV=${NODE_ENV:-production} | |
| 65 | - PUBLIC_PATH=${PUBLIC_PATH:-/} | |
| 66 | - VUE_APP_TITLE=${VUE_APP_TITLE:-芋道管理系统} | |
| 67 | - VUE_APP_BASE_API=${VUE_APP_BASE_API:-/prod-api} | |
| 68 | - VUE_APP_APP_NAME=${VUE_APP_APP_NAME:-/} | |
| 69 | - VUE_APP_TENANT_ENABLE=${VUE_APP_TENANT_ENABLE:-true} | |
| 70 | - VUE_APP_CAPTCHA_ENABLE=${VUE_APP_CAPTCHA_ENABLE:-true} | |
| 71 | - VUE_APP_DOC_ENABLE=${VUE_APP_DOC_ENABLE:-true} | |
| 72 | - VUE_APP_BAIDU_CODE=${VUE_APP_BAIDU_CODE:-fadc1bd5db1a1d6f581df60a1807f8ab} | |
| 73 | - image: yudao-admin | |
| 74 | - restart: unless-stopped | |
| 75 | - ports: | |
| 76 | - - "8080:80" | |
| 77 | - depends_on: | |
| 78 | - - server | |
| 79 | - | |
| 80 | -volumes: | |
| 81 | - mysql: | |
| 82 | - driver: local | |
| 83 | - redis: | |
| 84 | - driver: local |
script/docker/docker.env deleted
| 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 |