From 83864ca40e932d0011bdfb93f6013216733b36f2 Mon Sep 17 00:00:00 2001 From: wuweihua <88888888> Date: Thu, 24 Sep 2026 13:39:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E9=83=A8=E7=BD=B2=E7=9B=AE?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/.env.example | 14 ----- deploy/Dockerfile.backend | 27 -------- deploy/Dockerfile.frontend | 14 ----- deploy/Docker部署指南.md | 113 --------------------------------- deploy/application-prod.yml | 39 ------------ deploy/docker-compose.yml | 120 ------------------------------------ deploy/nginx-front.conf | 42 ------------- 7 files changed, 369 deletions(-) delete mode 100644 deploy/.env.example delete mode 100644 deploy/Dockerfile.backend delete mode 100644 deploy/Dockerfile.frontend delete mode 100644 deploy/Docker部署指南.md delete mode 100644 deploy/application-prod.yml delete mode 100644 deploy/docker-compose.yml delete mode 100644 deploy/nginx-front.conf diff --git a/deploy/.env.example b/deploy/.env.example deleted file mode 100644 index dcec7c1a..00000000 --- a/deploy/.env.example +++ /dev/null @@ -1,14 +0,0 @@ -# BMS 环境变量模板(复制为 .env 并填真实值) -# docker compose 会自动读取同目录 .env - -# MySQL 密码(生产必改) -BMS_DB_PASSWORD=ChangeMe123! - -# Oracle 从库密码(远端只读) -BMS_ORACLE_PASSWORD=k5x15WP1hE - -# token 密钥(生产必改,随机长串) -TOKEN_SECRET=please-change-me-to-a-random-string - -# Druid 控制台密码(生产必改) -DRUID_LOGIN_PASSWORD=ChangeMe456! diff --git a/deploy/Dockerfile.backend b/deploy/Dockerfile.backend deleted file mode 100644 index 81ec4cf1..00000000 --- a/deploy/Dockerfile.backend +++ /dev/null @@ -1,27 +0,0 @@ -# BMS 后端 Dockerfile -# 构建:docker build -t bms-back:latest -f Dockerfile . -# 依赖:先在本机 mvn package 产出 ruoyi-admin.jar,或用多阶段构建(见下) -FROM eclipse-temurin:17-jre - -# 设置时区与编码 -ENV TZ=Asia/Shanghai \ - LANG=C.UTF-8 \ - JAVA_OPTS="-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m" - -# 工作目录 -WORKDIR /app - -# 上传目录(需与 application-prod.yml 的 ruoyi.profile 一致) -RUN mkdir -p /app/uploadPath /app/logs - -# 拷贝后端 jar(先 mvn package 产出) -COPY bms-back/ruoyi-admin/target/ruoyi-admin.jar /app/ruoyi-admin.jar - -# 拷贝生产配置(可选,若用 --spring.profiles.active=prod) -COPY deploy/application-prod.yml /app/application-prod.yml - -# 对外端口(后端 8080,仅容器内网,由 Nginx 反代) -EXPOSE 8080 - -# 启动(用 prod profile,数据源通过环境变量注入) -ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /app/ruoyi-admin.jar --spring.profiles.active=prod"] diff --git a/deploy/Dockerfile.frontend b/deploy/Dockerfile.frontend deleted file mode 100644 index 02db8827..00000000 --- a/deploy/Dockerfile.frontend +++ /dev/null @@ -1,14 +0,0 @@ -# BMS 前端 Dockerfile(多阶段:Node 构建 → Nginx 托管) -FROM node:18-alpine AS build -WORKDIR /app -COPY bms-front/package.json bms-front/package-lock.json ./ -RUN npm install -COPY bms-front/ ./ -RUN npm run build:prod - -FROM nginx:alpine -# 前端 dist -COPY --from=build /app/dist /usr/share/nginx/html -# 自定义 nginx 配置(含 /prod-api 反代、history 回退) -COPY deploy/nginx-front.conf /etc/nginx/conf.d/default.conf -EXPOSE 80 diff --git a/deploy/Docker部署指南.md b/deploy/Docker部署指南.md deleted file mode 100644 index 7e93aca6..00000000 --- a/deploy/Docker部署指南.md +++ /dev/null @@ -1,113 +0,0 @@ -# BMS Docker 部署指南 - -> 基于阿里云 ECS 4C8G,用 Docker Compose 一键拉起全栈:MySQL + Redis + Elasticsearch + 后端 + 前端。 -> 前提:ECS 已装 Docker + Docker Compose。 - -## 0. 架构 - -``` -浏览器 → frontend(Nginx:80) ──静态──> dist - └─/prod-api/ 反代──> backend:8080(容器内网) -backend 依赖:mysql / redis / elasticsearch(均容器内网,宿主仅 127.0.0.1 端口) -``` - -## 1. 安装 Docker + Compose(阿里云) - -```bash -curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun -systemctl enable --now docker -docker compose version -``` - -## 2. 准备建库脚本(首次初始化) - -MySQL 容器首次启动会自动执行 `docker-entrypoint-initdb.d` 里的 `.sql`: - -```bash -mkdir -p /srv/bms/init-sql -# 按顺序复制 SQL(顺序见 部署手册.md 第 2 步) -# 注意:这些脚本不含 CREATE DATABASE,compose 已用 MYSQL_DATABASE=bms 建库 -cp bms-back/sql/ry_20260417.sql /srv/bms/init-sql/01_ry.sql -cp bms-back/sql/quartz.sql /srv/bms/init-sql/02_quartz.sql -cp bms-back/sql/bms_region.sql /srv/bms/init-sql/03_region.sql -# ... 其余业务脚本按序加 04_、05_ ... -``` - -> 也可不用 init-sql,先 `docker compose up -d mysql` 再手动 `docker exec -i bms-mysql mysql -uroot -p bms < xx.sql`。 - -## 3. 准备后端 jar(或直接构建) - -Dockerfile.backend 依赖 `ruoyi-admin/target/ruoyi-admin.jar`,先本地打包: - -```bash -cd bms-back -mvn clean package -DskipTests -``` - -## 4. 配置数据源环境变量 - -后端要连容器内 MySQL,需把 `application-druid.yml` 里的数据源改成环境变量占位。两种做法: - -**方式 A(推荐):** 改 `application-druid.yml` 用 `${BMS_DB_URL}` 等占位(见 `部署手册.md` 安全收口),compose 已注入这些变量。 - -**方式 B:** 不改代码,启动时用 `SPRING_APPLICATION_JSON` 或 `--spring.datasource...` 覆盖。但更推荐方式 A。 - -## 5. 启动全栈 - -```bash -cd deploy -cp .env.example .env # 改密码 -docker compose up -d # 后台构建并启动 -docker compose ps # 查看状态 -docker compose logs -f backend # 看后端日志 -``` - -## 6. 验证 - -```bash -curl http://127.0.0.1:8080/captchaImage # 后端(本机) -curl http://127.0.0.1:9200 # ES -curl http://127.0.0.1/ # 前端 -``` - -浏览器访问 `http://`。 - -## 7. 内存优化(4C8G 关键) - -| 组件 | 限制 | -|------|------| -| ES | `ES_JAVA_OPTS=-Xms1g -Xmx1g`(已配) | -| 后端 | `JAVA_OPTS -Xmx1024m`(已配) | -| MySQL | `innodb-buffer-pool-size=256M`(已配) | -| Docker 总内存 | 可给 compose 加 `deploy.resources.limits.memory` 进一步兜底 | - -## 8. 常用运维命令 - -```bash -docker compose up -d --build # 重新构建并启动 -docker compose down # 停止(保留数据卷) -docker compose down -v # 停止并删数据卷(危险!) -docker compose logs -f # 全部日志 -docker compose restart backend # 只重启后端 -``` - -## 9. 数据备份 - -```bash -# 备份 MySQL -docker exec bms-mysql sh -c 'mysqldump -uroot -p"$BMS_DB_PASSWORD" bms' > bms_$(date +%F).sql -# ES 数据卷 -docker run --rm -v bms-es-data:/data -v $PWD:/backup alpine tar czf /backup/es_$(date +%F).tar.gz -C /data . -``` - -## 10. 与「宝塔部署」的区别 - -| 项 | 宝塔部署 | Docker 部署 | -|----|---------|-------------| -| 环境隔离 | 共享系统 | 容器隔离,互不干扰 | -| 安装 | 宝塔商店逐个装 | 一条 compose 拉起 | -| 迁移 | 依赖面板 | 拷贝 compose + 数据卷即可 | -| 内存 | 需手动逐个调 | 统一在 compose 里限 | -| 适合 | 习惯面板操作 | 干净、可复现、易迁移 | - -> 两者选其一即可,不要混用。Docker 方案更推荐用于正式环境(可复现、好迁移、易扩缩)。 diff --git a/deploy/application-prod.yml b/deploy/application-prod.yml deleted file mode 100644 index 8c2b22c9..00000000 --- a/deploy/application-prod.yml +++ /dev/null @@ -1,39 +0,0 @@ -# BMS 生产环境配置(宝塔部署用) -# 用法:java -jar ruoyi-admin.jar --spring.profiles.active=prod -# 此文件覆盖 application.yml 中的开发默认值,其余项(server.port、mybatis 等)沿用主配置 - -# 文件上传路径(生产必须改成 Linux 绝对路径) -ruoyi: - profile: /www/wwwroot/bms/uploadPath - -# 关闭热部署 -spring: - devtools: - restart: - enabled: false - # 本机 Redis(宝塔安装) - data: - redis: - host: 127.0.0.1 - port: 6379 - database: 0 - password: # 若宝塔 Redis 设了密码,填这里 - -# 生产日志级别(调试信息不落盘) -logging: - level: - com.ruoyi: info - org.springframework: warn - -# Elasticsearch:保留启用(本机装 ES,注意给 ES 限制堆内存,见 部署手册/ES安装说明) -bms: - elasticsearch: - enabled: true - uris: http://127.0.0.1:9200 - username: - password: - index: bms_biz_log - billing: - mq-mode: redis - mq-queue-key: bms:billing:task - consumer-enabled: true diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml deleted file mode 100644 index c10427fb..00000000 --- a/deploy/docker-compose.yml +++ /dev/null @@ -1,120 +0,0 @@ -# BMS 全栈 Docker Compose 编排(阿里云 ECS 4C8G) -# 用法:docker compose up -d -# 组件:mysql / redis / elasticsearch / backend / frontend - -services: - # ---- MySQL(本机)---- - mysql: - image: mysql:8.0 - container_name: bms-mysql - restart: always - environment: - MYSQL_ROOT_PASSWORD: ${BMS_DB_PASSWORD:-ChangeMe123!} # 生产务必改 - MYSQL_DATABASE: bms - TZ: Asia/Shanghai - command: - - --character-set-server=utf8mb4 - - --collation-server=utf8mb4_unicode_ci - - --max_connections=200 - # 低内存优化 - - --innodb-buffer-pool-size=256M - - --performance-schema=OFF - ports: - - "127.0.0.1:3306:3306" # 仅本机,不开公网 - volumes: - - bms-mysql-data:/var/lib/mysql - # 首次初始化自动导入建库脚本(可选,脚本按顺序放 init 目录) - - ./init-sql:/docker-entrypoint-initdb.d:ro - healthcheck: - test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-p${BMS_DB_PASSWORD:-ChangeMe123!}"] - interval: 10s - timeout: 5s - retries: 10 - - # ---- Redis ---- - redis: - image: redis:7-alpine - container_name: bms-redis - restart: always - command: ["redis-server", "--appendonly", "yes"] - ports: - - "127.0.0.1:6379:6379" # 仅本机 - volumes: - - bms-redis-data:/data - - # ---- Elasticsearch(保留,限堆 1G)---- - elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0 - container_name: bms-es - restart: always - environment: - - discovery.type=single-node - - ES_JAVA_OPTS=-Xms1g -Xmx1g # 关键:限堆,否则吃一半内存 - - xpack.security.enabled=false # 后端 HTTP 直连无鉴权 - - bootstrap.memory_lock=true - ulimits: - memlock: - soft: -1 - hard: -1 - ports: - - "127.0.0.1:9200:9200" # 仅本机 - volumes: - - bms-es-data:/usr/share/elasticsearch/data - healthcheck: - test: ["CMD-SHELL", "curl -s http://localhost:9200 >/dev/null || exit 1"] - interval: 20s - timeout: 5s - retries: 10 - - # ---- 后端 Spring Boot ---- - backend: - build: - context: .. # 指到仓库根目录 - dockerfile: deploy/Dockerfile.backend - container_name: bms-backend - restart: always - environment: - TZ: Asia/Shanghai - JAVA_OPTS: "-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m" - # 数据源环境变量(后端用 ${} 占位,由这里注入) - BMS_DB_URL: "jdbc:mysql://mysql:3306/bms?useUnicode=true&characterEncoding=utf8&connectionCollation=utf8mb4_unicode_ci&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8" - BMS_DB_USER: root - BMS_DB_PASSWORD: ${BMS_DB_PASSWORD:-ChangeMe123!} - # Oracle 从库(远端只读,保留原值) - BMS_ORACLE_URL: "jdbc:oracle:thin:@//120.79.189.203:15281/WSDB" - BMS_ORACLE_USER: readonly_report - BMS_ORACLE_PASSWORD: ${BMS_ORACLE_PASSWORD:-k5x15WP1hE} - # token 密钥 / Druid 密码 - TOKEN_SECRET: ${TOKEN_SECRET:-please-change-me} - DRUID_LOGIN_PASSWORD: ${DRUID_LOGIN_PASSWORD:-ChangeMe456!} - ports: - - "127.0.0.1:8080:8080" # 仅本机,由 frontend 反代 - volumes: - - bms-upload:/app/uploadPath - - bms-logs:/app/logs - depends_on: - mysql: - condition: service_healthy - redis: - condition: service_started - elasticsearch: - condition: service_healthy - - # ---- 前端 Nginx ---- - frontend: - build: - context: .. # 指到仓库根目录 - dockerfile: deploy/Dockerfile.frontend - container_name: bms-frontend - restart: always - ports: - - "80:80" # 对外(或改成 443 上 HTTPS) - depends_on: - - backend - -volumes: - bms-mysql-data: - bms-redis-data: - bms-es-data: - bms-upload: - bms-logs: diff --git a/deploy/nginx-front.conf b/deploy/nginx-front.conf deleted file mode 100644 index 8aea49ed..00000000 --- a/deploy/nginx-front.conf +++ /dev/null @@ -1,42 +0,0 @@ -# BMS 前端 Nginx 配置(容器内) -server { - listen 80; - server_name _; - - root /usr/share/nginx/html; - index index.html; - - gzip on; - gzip_min_length 1k; - gzip_types text/plain text/css application/javascript application/json image/svg+xml; - - # 后端接口反代:/prod-api/xxx -> backend:8080/xxx(backend 为 compose 服务名) - location /prod-api/ { - proxy_pass http://backend:8080/; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_connect_timeout 60s; - proxy_read_timeout 300s; - proxy_send_timeout 300s; - client_max_body_size 20m; - } - - # 上传文件/头像 - location /profile/ { - proxy_pass http://backend:8080/profile/; - proxy_set_header Host $host; - } - - # 禁止外网访问 Druid - location /druid/ { - deny all; - return 404; - } - - # Vue Router history 回退 - location / { - try_files $uri $uri/ /index.html; - } -}