删除部署目录

This commit is contained in:
wuweihua
2026-09-24 13:39:19 +08:00
parent f602060ab4
commit 83864ca40e
7 changed files with 0 additions and 369 deletions
-14
View File
@@ -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!
-27
View File
@@ -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"]
-14
View File
@@ -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
-113
View File
@@ -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://<ECS公网IP>`。
## 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 方案更推荐用于正式环境(可复现、好迁移、易扩缩)。
-39
View File
@@ -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
-120
View File
@@ -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:
-42
View File
@@ -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;
}
}