chore: update deployment docs and assets

This commit is contained in:
danaisuiyuan
2026-06-15 09:33:00 +08:00
parent 4d12a49f7c
commit bdabe3ba95
58 changed files with 1817 additions and 8685 deletions

View File

@@ -0,0 +1,42 @@
# =============================================================
# 步骤二:积分商城环境变量 — 鼎信汇商贸 bygsf212
# 使用方法cp .env.example .env 然后填入真实密码
# .env 不入库(已加入 .gitignore
# =============================================================
TZ=Asia/Shanghai
# ---------- Redis容器内与步骤一独立 ----------
REDIS_PASSWORD=change-me-redis
# ---------- 阿里云 RDS ----------
RDS_HOST=rm-bp1a178eq62lxba9xbo.mysql.rds.aliyuncs.com
RDS_DB=bygsf212
RDS_USER=yangtangyoupin
RDS_PASSWORD=change-me
# ---------- 订单同步(多商户 source / target ----------
SYNC_SOURCE_ID=shop_18
SYNC_TARGET_MER_ID=18
# ---------- Java JAR 宿主机路径FTP 更新后 restart 容器即可) ----------
SINGLE_FRONT_JAR=/www/wwwroot/javaapi/miao-front-2.2.jar
SINGLE_ADMIN_JAR=/www/wwwroot/javaapi/miao-admin-2.2.jar
# ---------- Java 日志目录bind-mount 到宿主机,直接 tail -f 查看) ----------
SINGLE_FRONT_LOG_DIR=/www/wwwroot/javaapi/logs/front
SINGLE_ADMIN_LOG_DIR=/www/wwwroot/javaapi/logs/admin
# ---------- 图片/PDF 目录(与步骤一 H5 Nginx 共享宿主机路径) ----------
CRMEB_IMAGE_DIR=/www/wwwroot/b3y45.com
CRMEB_DOMAIN=https://b3y45.com/
# ---------- 前端静态目录bind-mountrsync 更新后立即生效) ----------
# 积分商城 H5uni-app/HBuilder 编译产物),对应域名 jf.b3y45.com
SINGLE_H5_DIR=/www/wwwroot/jf.b3y45.com
# 积分商城管理后台Vue SPA对应域名 jfadmin.b3y45.com
SINGLE_ADMIN_WEB_DIR=/www/wwwroot/jfadmin.b3y45.com
# ---------- 宿主机暴露端口(供宝塔 Nginx 反代) ----------
SINGLE_ADMIN_PORT=18081
SINGLE_H5_PORT=18082

View File

@@ -0,0 +1 @@
.env

View File

@@ -0,0 +1,120 @@
# 步骤二:积分商城 Docker 部署(鼎信汇商贸 bygsf212
项目:`single-shop-22`(积分商城)
服务:`redis` · `single-front-api`Spring Boot· `single-admin-api`Spring Boot
`single-admin-web`Vue 管理后台)· `single-h5`uni-app/HBuilder H5
步骤一(寄卖商城)与本步骤完全独立,可以单独部署、单独重启。
默认域名:
- 积分商城 H5`jf.b3y45.com`
- 积分商城管理后台:`jfadmin.b3y45.com`
---
## 部署前提:宿主机文件准备
### 1. Java JARSpring Boot API
```bash
mkdir -p /www/wwwroot/javaapi/logs/front
mkdir -p /www/wwwroot/javaapi/logs/admin
scp single-shop-22/backend/crmeb-front/target/miao-front-2.2.jar root@118.31.36.212:/www/wwwroot/javaapi/
scp single-shop-22/backend/crmeb-admin/target/miao-admin-2.2.jar root@118.31.36.212:/www/wwwroot/javaapi/
```
### 2. 前端静态文件
`single_uniapp22miao` 使用 HBuilder/HBuilderX 编译 H5把编译产物上传到积分商城 H5 目录。
```bash
mkdir -p /www/wwwroot/jf.b3y45.com
rsync -a --delete single-shop-22/single_uniapp22miao/unpackage/dist/build/h5/ \
root@118.31.36.212:/www/wwwroot/jf.b3y45.com/
chmod -R 755 /www/wwwroot/jf.b3y45.com/
mkdir -p /www/wwwroot/jfadmin.b3y45.com
rsync -a --delete single-shop-22/backend-adminend/dist/ \
root@118.31.36.212:/www/wwwroot/jfadmin.b3y45.com/
chmod -R 755 /www/wwwroot/jfadmin.b3y45.com/
```
> 如果 HBuilderX 实际输出目录是 `unpackage/dist/build/web/`,把上面的 `build/h5/` 替换成 `build/web/`。
### 3. 图片/PDF 目录
```bash
mkdir -p /www/wwwroot/b3y45.com
```
---
## 快速部署
```bash
cd deploy/docker/step2-single-shop-bygsf212
cp .env.example .env
vim .env
docker compose --env-file .env build
docker compose --env-file .env up -d
docker compose --env-file .env ps
docker compose --env-file .env logs -f single-front-api
docker compose --env-file .env logs -f single-admin-api
```
---
## 域名与端口
| 域名 | 用途 | 宿主机端口 |
|---|---|---|
| `jf.b3y45.com` | 积分商城 H5uni-app/HBuilder | **18082** |
| `jfadmin.b3y45.com` | 积分商城管理后台Vue | **18081** |
> Spring Boot API 端口30032 / 30033仅容器内监听不对外暴露。
> 宝塔 Nginx 通过域名反代到 `127.0.0.1:18081 / 18082`,再由容器内 Nginx 转发到 API。
> 图片/PDF 实际落盘路径为宿主机 `/www/wwwroot/b3y45.com/crmebimage/public/...`。
---
## 验证
| 地址 | 预期 |
|------|------|
| `https://jf.b3y45.com/` | 积分商城 H5 |
| `https://jfadmin.b3y45.com/` | 积分商城管理后台 |
| `http://118.31.36.212:18082/` | H5 直连测试 |
| `http://118.31.36.212:18081/` | 管理后台直连测试 |
---
## bind-mount 目录总览
| 宿主机路径 | 挂入容器路径 | 说明 |
|---|---|---|
| `/www/wwwroot/javaapi/miao-front-2.2.jar` | `/app/app.jar` | 用户端 API JAR |
| `/www/wwwroot/javaapi/miao-admin-2.2.jar` | `/app/app.jar` | 管理端 API JAR |
| `/www/wwwroot/javaapi/logs/front/` | `/app/log` | 用户端 API 日志 |
| `/www/wwwroot/javaapi/logs/admin/` | `/app/log` | 管理端 API 日志 |
| `/www/wwwroot/b3y45.com/` | `/usr/local/crmeb/` | 图片/PDF 写入目录 |
| `/www/wwwroot/jf.b3y45.com/` | `/usr/share/nginx/html` | H5 静态文件 |
| `/www/wwwroot/jfadmin.b3y45.com/` | `/usr/share/nginx/html` | 管理后台静态文件 |
| `../single-shop/application-docker.yml` | `/config/application-docker.yml` | Spring Boot 配置 |
---
## bygsf212 关键配置对照
| 配置项 | 值 |
|---|---|
| RDS Host | `rm-bp1a178eq62lxba9xbo.mysql.rds.aliyuncs.com` |
| DB / User | `bygsf212` / `yangtangyoupin` |
| imagePath 宿主机目录 | `/www/wwwroot/b3y45.com/` |
| CRMEB_DOMAIN | `https://b3y45.com/` |
| SYNC_SOURCE_ID | `shop_18` |
| SYNC_TARGET_MER_ID | `18` |
| Spring profile | `docker`(通过 `application-docker.yml` 注入) |

View File

@@ -0,0 +1,164 @@
# =============================================================
# 步骤二积分商城single-shop-22独立部署
# 客户:鼎信汇商贸 bygsf212
# 包含服务redis · single-admin-api · single-front-api
# single-admin-web(Vue) · single-h5(uni-app/HBuilder)
# =============================================================
name: jifenmall-bygsf212
x-common: &common
restart: unless-stopped
environment:
TZ: ${TZ:-Asia/Shanghai}
logging:
driver: json-file
options:
max-size: "20m"
max-file: "5"
x-spring-common: &spring-common
<<: *common
environment:
TZ: ${TZ:-Asia/Shanghai}
MYSQL_HOST: ${RDS_HOST}
MYSQL_DATABASE: ${RDS_DB}
MYSQL_USERNAME: ${RDS_USER}
MYSQL_PASSWORD: ${RDS_PASSWORD}
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: ${REDIS_PASSWORD}
CRMEB_DOMAIN: ${CRMEB_DOMAIN}
SYNC_SOURCE_ID: ${SYNC_SOURCE_ID:-shop_18}
SYNC_TARGET_MER_ID: ${SYNC_TARGET_MER_ID:-18}
networks:
single-net:
driver: bridge
volumes:
single-redis-data:
services:
redis:
<<: *common
build:
context: .
dockerfile: redis.Dockerfile
image: jifenmall-bygsf212/redis:local
container_name: single-redis-bygsf212
command: ["--requirepass", "${REDIS_PASSWORD}", "--appendonly", "yes"]
volumes:
- single-redis-data:/data
networks: [single-net]
healthcheck:
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
interval: 10s
timeout: 3s
retries: 5
single-front-api:
<<: *spring-common
build:
context: .
dockerfile: ../single-shop/front-api.Dockerfile
image: jifenmall-bygsf212/front-api:local
container_name: single-front-api-bygsf212
networks: [single-net]
ports:
- "127.0.0.1:30033:30033"
volumes:
- ${SINGLE_FRONT_JAR}:/app/app.jar:ro
- ${CRMEB_IMAGE_DIR}:/usr/local/crmeb
- ${SINGLE_FRONT_LOG_DIR}:/app/log
- ../single-shop/application-docker.yml:/config/application-docker.yml:ro
environment:
TZ: ${TZ:-Asia/Shanghai}
MYSQL_HOST: ${RDS_HOST}
MYSQL_DATABASE: ${RDS_DB}
MYSQL_USERNAME: ${RDS_USER}
MYSQL_PASSWORD: ${RDS_PASSWORD}
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: ${REDIS_PASSWORD}
CRMEB_DOMAIN: ${CRMEB_DOMAIN}
SYNC_SOURCE_ID: ${SYNC_SOURCE_ID:-shop_18}
SYNC_TARGET_MER_ID: ${SYNC_TARGET_MER_ID:-18}
SERVER_PORT: 30033
depends_on:
redis:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "curl -sf http://localhost:30033/actuator/health || exit 1"]
interval: 30s
timeout: 10s
retries: 5
start_period: 90s
single-admin-api:
<<: *spring-common
build:
context: .
dockerfile: ../single-shop/admin-api.Dockerfile
image: jifenmall-bygsf212/admin-api:local
container_name: single-admin-api-bygsf212
networks: [single-net]
ports:
- "127.0.0.1:30032:30032"
volumes:
- ${SINGLE_ADMIN_JAR}:/app/app.jar:ro
- ${CRMEB_IMAGE_DIR}:/usr/local/crmeb
- ${SINGLE_ADMIN_LOG_DIR}:/app/log
- ../single-shop/application-docker.yml:/config/application-docker.yml:ro
environment:
TZ: ${TZ:-Asia/Shanghai}
MYSQL_HOST: ${RDS_HOST}
MYSQL_DATABASE: ${RDS_DB}
MYSQL_USERNAME: ${RDS_USER}
MYSQL_PASSWORD: ${RDS_PASSWORD}
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: ${REDIS_PASSWORD}
CRMEB_DOMAIN: ${CRMEB_DOMAIN}
SYNC_SOURCE_ID: ${SYNC_SOURCE_ID:-shop_18}
SYNC_TARGET_MER_ID: ${SYNC_TARGET_MER_ID:-18}
SERVER_PORT: 30032
depends_on:
redis:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "curl -sf http://localhost:30032/actuator/health || exit 1"]
interval: 30s
timeout: 10s
retries: 5
start_period: 90s
single-admin-web:
<<: *common
build:
context: .
dockerfile: ../single-shop/admin-web.Dockerfile
image: jifenmall-bygsf212/admin-web:local
container_name: single-admin-web-bygsf212
networks: [single-net]
ports:
- "${SINGLE_ADMIN_PORT:-18081}:80"
volumes:
- ${SINGLE_ADMIN_WEB_DIR}:/usr/share/nginx/html
depends_on:
- single-admin-api
single-h5:
<<: *common
build:
context: .
dockerfile: ../single-shop/h5.Dockerfile
image: jifenmall-bygsf212/h5:local
container_name: single-h5-bygsf212
networks: [single-net]
ports:
- "${SINGLE_H5_PORT:-18082}:80"
volumes:
- ${SINGLE_H5_DIR}:/usr/share/nginx/html
depends_on:
- single-front-api

View File

@@ -0,0 +1,18 @@
# =============================================================
# RedisAlpine + apk 安装,绕过 Docker Hub 镜像拉取问题)
# 与 step1 方案一致:不依赖 docker.io只需 registry-1.docker.io 拉 alpine:3.19
# =============================================================
FROM alpine:3.19
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk add --no-cache redis tzdata \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& rm -f /etc/apk/cache/*.apk
VOLUME /data
WORKDIR /data
EXPOSE 6379
ENTRYPOINT ["redis-server"]