删除部署目录
This commit is contained in:
@@ -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!
|
||||
@@ -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"]
|
||||
@@ -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
|
||||
@@ -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 方案更推荐用于正式环境(可复现、好迁移、易扩缩)。
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user