feat(byhlc112): add project deployment configuration

This commit is contained in:
danaisuiyuan
2026-05-29 09:19:30 +08:00
parent ede01c06d2
commit 9eac385378
34 changed files with 1250 additions and 23 deletions

View File

@@ -0,0 +1,41 @@
# =============================================================
# 步骤二:积分商城环境变量 — 宝应宏煜春商贸 byhlc112
# 使用方法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=byhlc112
RDS_USER=yangtangyoupin
RDS_PASSWORD=change-me
# ---------- 订单同步(多商户 source / target ----------
SYNC_SOURCE_ID=shop_16
SYNC_TARGET_MER_ID=16
# ---------- 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/lehoo6.com/crmebimage
# ---------- 前端静态目录bind-mountrsync 更新后立即生效) ----------
# 积分商城 H5uni-app SPA对应域名 jf.lehoo6.com
SINGLE_H5_DIR=/www/wwwroot/jf.lehoo6.com
# 积分商城管理后台Vue SPA对应域名 jfadmin.lehoo6.com
SINGLE_ADMIN_WEB_DIR=/www/wwwroot/jfadmin.lehoo6.com
# ---------- 宿主机暴露端口(供宝塔 Nginx 反代) ----------
SINGLE_ADMIN_PORT=18081
SINGLE_H5_PORT=18082

View File

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

View File

@@ -0,0 +1,122 @@
# 步骤二:积分商城 Docker 部署(宝应宏煜春商贸 byhlc112
项目:`single-shop-22`(积分商城)
服务:`redis` · `single-front-api`Spring Boot· `single-admin-api`Spring Boot
`single-admin-web`Vue 管理后台)· `single-h5`uni-app H5
步骤一(寄卖商城)与本步骤完全独立,可以单独部署、单独重启。
> 这套方案参考 `deploy/docker/step2-single-shop`,按 `czleilei240` 已验证结构复制。
> 当前默认域名假设为:
> - 积分商城 H5`jf.lehoo6.com`
> - 积分商城管理后台:`jfadmin.lehoo6.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@39.97.236.112:/www/wwwroot/javaapi/
scp single-shop-22/backend/crmeb-admin/target/miao-admin-2.2.jar root@39.97.236.112:/www/wwwroot/javaapi/
```
### 2. 前端静态文件
```bash
mkdir -p /www/wwwroot/jf.lehoo6.com
rsync -a --delete single-shop-22/single_uniapp22miao/unpackage/dist/build/web/ \
root@39.97.236.112:/www/wwwroot/jf.lehoo6.com/
chmod -R 755 /www/wwwroot/jf.lehoo6.com/
mkdir -p /www/wwwroot/jfadmin.lehoo6.com
rsync -a --delete single-shop-22/backend-adminend/dist/ \
root@39.97.236.112:/www/wwwroot/jfadmin.lehoo6.com/
chmod -R 755 /www/wwwroot/jfadmin.lehoo6.com/
```
### 3. 图片/PDF 目录
```bash
mkdir -p /www/wwwroot/lehoo6.com/crmebimage
```
---
## 快速部署
```bash
cd deploy/docker/step2-single-shop-byhlc112
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.lehoo6.com` | 积分商城 H5uni-app | **18082** |
| `jfadmin.lehoo6.com` | 积分商城管理后台Vue | **18081** |
> Spring Boot API 端口30032 / 30033仅容器内监听不对外暴露。
> 宝塔 Nginx 通过域名反代到 `127.0.0.1:18081 / 18082`,再由容器内 Nginx 转发到 API。
---
## 验证
| 地址 | 预期 |
|------|------|
| `https://jf.lehoo6.com/` | 积分商城 H5 |
| `https://jfadmin.lehoo6.com/` | 积分商城管理后台 |
| `http://39.97.236.112:18082/` | H5 直连测试 |
| `http://39.97.236.112: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/lehoo6.com/crmebimage/` | `/usr/local/crmeb/crmebimage/` | 图片/PDF 写入目录 |
| `/www/wwwroot/jf.lehoo6.com/` | `/usr/share/nginx/html` | H5 静态文件 |
| `/www/wwwroot/jfadmin.lehoo6.com/` | `/usr/share/nginx/html` | 管理后台静态文件 |
| `../single-shop/application-docker.yml` | `/config/application-docker.yml` | Spring Boot 配置 |
---
## byhlc112 关键配置对照
| 配置项 | 值 |
|---|---|
| RDS Host | `rm-bp1a178eq62lxba9xbo.mysql.rds.aliyuncs.com` |
| DB / User | `byhlc112` / `yangtangyoupin` |
| imagePath 宿主机目录 | `/www/wwwroot/lehoo6.com/crmebimage` |
| SYNC_SOURCE_ID | `shop_16` |
| SYNC_TARGET_MER_ID | `16` |
| Spring profile | `docker`(通过 `application-docker.yml` 注入) |
---
## 待确认项
- 如果积分管理后台域名不是 `jfadmin.lehoo6.com`,需要同步替换 `.env.example`、README 和宝塔 Nginx 配置
- Redis 仍按 Docker 内置实例方案生成;若你想接外部 Redis可以再帮你补一版外部 Redis 配置

View File

@@ -0,0 +1,161 @@
# =============================================================
# 步骤二积分商城single-shop-22独立部署
# 客户:宝应宏煜春商贸 byhlc112
# 包含服务redis · single-admin-api · single-front-api
# single-admin-web(Vue) · single-h5(uni-app)
# =============================================================
name: jifenmall-byhlc112
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}
SYNC_SOURCE_ID: ${SYNC_SOURCE_ID:-shop_16}
SYNC_TARGET_MER_ID: ${SYNC_TARGET_MER_ID:-16}
networks:
single-net:
driver: bridge
volumes:
single-redis-data:
services:
redis:
<<: *common
build:
context: .
dockerfile: redis.Dockerfile
image: jifenmall-byhlc112/redis:local
container_name: single-redis-byhlc112
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-byhlc112/front-api:local
container_name: single-front-api-byhlc112
networks: [single-net]
ports:
- "127.0.0.1:30033:30033"
volumes:
- ${SINGLE_FRONT_JAR}:/app/app.jar:ro
- ${CRMEB_IMAGE_DIR}:/usr/local/crmeb/crmebimage
- ${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}
SYNC_SOURCE_ID: ${SYNC_SOURCE_ID:-shop_16}
SYNC_TARGET_MER_ID: ${SYNC_TARGET_MER_ID:-16}
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-byhlc112/admin-api:local
container_name: single-admin-api-byhlc112
networks: [single-net]
ports:
- "127.0.0.1:30032:30032"
volumes:
- ${SINGLE_ADMIN_JAR}:/app/app.jar:ro
- ${CRMEB_IMAGE_DIR}:/usr/local/crmeb/crmebimage
- ${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}
SYNC_SOURCE_ID: ${SYNC_SOURCE_ID:-shop_16}
SYNC_TARGET_MER_ID: ${SYNC_TARGET_MER_ID:-16}
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-byhlc112/admin-web:local
container_name: single-admin-web-byhlc112
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-byhlc112/h5:local
container_name: single-h5-byhlc112
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"]