|
|
@@ -0,0 +1,387 @@
|
|
|
+# 开发环境(deve)运维说明
|
|
|
+
|
|
|
+本文档描述与 **测试环境(sit/test)** 并行运行的 **开发环境** 的设计、部署与日常运维。配置脚本位于仓库 `docs/devops/dev/`。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 1. 环境与目标
|
|
|
+
|
|
|
+| 环境 | Git 分支 | Spring Profile | 宿主机 Java 目录 | 说明 |
|
|
|
+|------|----------|----------------|------------------|------|
|
|
|
+| 测试 sit | `sit` | `test` | `/docker/java` | 现有联调 / 测试 |
|
|
|
+| **开发 deve** | **`deve`** | **`dev`** | **`/deve/java`** | 本环境 |
|
|
|
+
|
|
|
+开发环境目标:
|
|
|
+
|
|
|
+- 与 test **共用中间件**(MySQL、Nacos、RocketMQ、xxl-job-admin、Jenkins),节省资源
|
|
|
+- Java 服务、Redis、业务库、Nacos 命名空间 **隔离**,避免 dev 污染 test
|
|
|
+- Jenkins **按需构建**微服务,默认 `gateway + store + second`
|
|
|
+- 开发者可用 IDEA 直连 dev 中间件,或在服务器跑 `java-dev` 容器联调
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 2. 架构概览
|
|
|
+
|
|
|
+```mermaid
|
|
|
+flowchart TB
|
|
|
+ subgraph host["测试机 120.26.186.130"]
|
|
|
+ subgraph mw["/docker/middleware 共用"]
|
|
|
+ MySQL[(MySQL 30001)]
|
|
|
+ Nacos[Nacos 8848]
|
|
|
+ RMQ[RocketMQ]
|
|
|
+ XXL[xxl-job-admin 30019]
|
|
|
+ RedisTest[redis 30002]
|
|
|
+ Jenkins[Jenkins 30003]
|
|
|
+ Nginx[Nginx 80/443]
|
|
|
+ end
|
|
|
+
|
|
|
+ subgraph mwdev["/docker/middleware-dev 增补"]
|
|
|
+ RedisDev[redis-dev 20022]
|
|
|
+ end
|
|
|
+
|
|
|
+ subgraph test["/docker/java 测试"]
|
|
|
+ GWt[gateway :8000 profile=test]
|
|
|
+ end
|
|
|
+
|
|
|
+ subgraph dev["/deve/java 开发"]
|
|
|
+ GWd[gateway-dev :28000 profile=dev]
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ GWt --> Nacos
|
|
|
+ GWd --> Nacos
|
|
|
+ GWt --> RedisTest
|
|
|
+ GWd --> RedisDev
|
|
|
+ GWt --> MySQL
|
|
|
+ GWd --> MySQL
|
|
|
+ Jenkins --> dev
|
|
|
+ Nginx --> GWt
|
|
|
+ Nginx --> GWd
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3. 隔离矩阵
|
|
|
+
|
|
|
+| 资源 | 测试 | 开发 | 隔离方式 |
|
|
|
+|------|------|------|----------|
|
|
|
+| MySQL 实例 | 共用 `mysql:3306` | 共用 | **不同 database**(dev 库) |
|
|
|
+| Nacos | namespace `acd615de-…` | **public / dev 命名空间** | `bootstrap-test.yml` vs `bootstrap-dev.yml` |
|
|
|
+| Redis | `redis-6.0.8` `30002` | **`redis-dev` `20022`** | 独立实例 + 独立数据目录 |
|
|
|
+| RocketMQ | 共用 | 共用 | consumer group / topic 前缀在 Nacos 区分 |
|
|
|
+| xxl-job-admin | 共用 `30019` | 共用 | **执行器 appname + 回调端口** 区分 |
|
|
|
+| Java 容器 | `gateway`… | `gateway-dev`… | 独立 compose、端口 `28xxx` |
|
|
|
+| 日志 | `/docker/java/logs` | `/deve/java/logs` | 独立目录 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 4. 服务器目录与仓库对应
|
|
|
+
|
|
|
+### 4.1 宿主机路径
|
|
|
+
|
|
|
+```text
|
|
|
+/docker/middleware/ # 测试中间件(已有)
|
|
|
+/docker/middleware-dev/ # 开发增补中间件(redis-dev)
|
|
|
+/docker/java/ # 测试 Java 服务
|
|
|
+/deve/java/ # 开发 Java 服务(compose + jar + logs)
|
|
|
+```
|
|
|
+
|
|
|
+首次部署建议从仓库复制:
|
|
|
+
|
|
|
+```bash
|
|
|
+# 开发 Java
|
|
|
+mkdir -p /deve/java
|
|
|
+cp docs/devops/dev/java/docker-compose.yml /deve/java/
|
|
|
+mkdir -p /deve/java/gateway /deve/java/store /deve/java/second \
|
|
|
+ /deve/java/store-platform /deve/java/lawyer /deve/java/job /deve/java/dining \
|
|
|
+ /deve/java/logs/gateway /deve/java/logs/store ...
|
|
|
+
|
|
|
+# 开发 Redis
|
|
|
+mkdir -p /docker/middleware-dev
|
|
|
+cp -r docs/devops/dev/middleware/* /docker/middleware-dev/
|
|
|
+```
|
|
|
+
|
|
|
+### 4.2 仓库文件索引
|
|
|
+
|
|
|
+| 路径 | 说明 |
|
|
|
+|------|------|
|
|
|
+| `docs/devops/dev/Introduction.md` | 本文档 |
|
|
|
+| `docs/devops/dev/java/docker-compose.yml` | 7 个 Java 微服务 compose |
|
|
|
+| `docs/devops/dev/java/Jenkinsfile` | Jenkins 流水线(Pipeline from SCM) |
|
|
|
+| `docs/devops/dev/middleware/docker-compose.yml` | redis-dev |
|
|
|
+| `docs/devops/dev/middleware/redis-dev/conf/redis.conf` | dev Redis 配置 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 5. 端口一览
|
|
|
+
|
|
|
+### 5.1 Java 服务(宿主机 → 容器)
|
|
|
+
|
|
|
+| 服务 | 容器名 | compose 服务名 | 宿主机端口 | 容器端口 | Profile |
|
|
|
+|------|--------|----------------|------------|----------|---------|
|
|
|
+| gateway | `gateway-dev` | `gateway` | **28000** | 8000 | dev |
|
|
|
+| store | `store-dev` | `store` | **28004** | 30004 | dev |
|
|
|
+| second | `second-dev` | `second` | **28005** | 30005 | dev |
|
|
|
+| store-platform | `store-platform-dev` | `store-platform` | **28006** | 30006 | dev |
|
|
|
+| lawyer | `lawyer-dev` | `lawyer` | **28007** | 30007 | dev |
|
|
|
+| job | `job-dev` | `job` | **28008** / **28018** | 30008 / 9999 | dev |
|
|
|
+| dining | `dining-dev` | `dining` | **28014** | 30014 | dev |
|
|
|
+
|
|
|
+对比测试环境:gateway `8000`,store `30004`,job 回调 `30018`。
|
|
|
+
|
|
|
+### 5.2 中间件(开发相关)
|
|
|
+
|
|
|
+| 组件 | 宿主机端口 | 容器内访问(app-network) |
|
|
|
+|------|------------|---------------------------|
|
|
|
+| redis-dev | **20022** | `redis-dev:6379` |
|
|
|
+| MySQL(共用) | 30001 | `mysql:3306` |
|
|
|
+| Nacos(共用) | 8848 | `nacos-2.5.2:8848` |
|
|
|
+| xxl-job-admin(共用) | 30019 | `xxl-job-admin:8080` |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 6. 部署步骤
|
|
|
+
|
|
|
+### 6.1 前置条件
|
|
|
+
|
|
|
+```bash
|
|
|
+docker network inspect app-network # 须已存在(middleware 创建)
|
|
|
+```
|
|
|
+
|
|
|
+### 6.2 启动 redis-dev
|
|
|
+
|
|
|
+```bash
|
|
|
+cd /docker/middleware-dev
|
|
|
+docker compose up -d
|
|
|
+docker exec redis-dev redis-cli -a Alien123456 ping
|
|
|
+```
|
|
|
+
|
|
|
+### 6.3 启动 Java 服务
|
|
|
+
|
|
|
+日常最小集(约 2~2.5GB 额外内存):
|
|
|
+
|
|
|
+```bash
|
|
|
+cd /deve/java
|
|
|
+docker compose up -d gateway store second
|
|
|
+```
|
|
|
+
|
|
|
+全量:
|
|
|
+
|
|
|
+```bash
|
|
|
+cd /deve/java
|
|
|
+docker compose up -d
|
|
|
+```
|
|
|
+
|
|
|
+### 6.4 Jenkins 容器挂载(必配)
|
|
|
+
|
|
|
+在 `/docker/middleware/docker-compose.yml` 的 `jenkins` 服务中增加:
|
|
|
+
|
|
|
+```yaml
|
|
|
+volumes:
|
|
|
+ - /deve/java:/deve/java # dev 部署目录
|
|
|
+ # 已有:../java:/app_deploy、docker.sock 等
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 7. Nacos 配置(dev 命名空间)
|
|
|
+
|
|
|
+`spring.profiles.active=dev` 读取 `bootstrap-dev.yml`(默认 **public** 命名空间,与 test 的 `acd615de-…` 分离)。
|
|
|
+
|
|
|
+在 dev 命名空间 `common.yml`(及 `alien-job` 等)中确认:
|
|
|
+
|
|
|
+```yaml
|
|
|
+spring:
|
|
|
+ datasource:
|
|
|
+ url: jdbc:mysql://mysql:3306/<dev库名>?...
|
|
|
+ redis:
|
|
|
+ host: redis-dev
|
|
|
+ port: 6379
|
|
|
+ password: Alien123456
|
|
|
+
|
|
|
+xxl:
|
|
|
+ job:
|
|
|
+ admin:
|
|
|
+ addresses: http://xxl-job-admin:8080/xxl-job-admin
|
|
|
+ accessToken: default_token
|
|
|
+ executor:
|
|
|
+ appname: alien-job-dev # 与 test 的 alien-job 区分
|
|
|
+ ip: 120.26.186.130
|
|
|
+ port: 28018 # 宿主机映射端口(非容器内 9999)
|
|
|
+ logpath: /app/logs
|
|
|
+```
|
|
|
+
|
|
|
+RocketMQ:为 dev 配置独立 `consumer.group` 前缀,避免与 test 抢消费。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 8. xxl-job 共用 Admin 的隔离
|
|
|
+
|
|
|
+共用 **一个** `xxl-job-admin`(`30019`),通过 **执行器** 隔离:
|
|
|
+
|
|
|
+| 项 | test (`job`) | dev (`job-dev`) |
|
|
|
+|----|--------------|-----------------|
|
|
|
+| executor.appname | `alien-job` | **`alien-job-dev`** |
|
|
|
+| 回调地址 | `120.26.186.130:30018` | **`120.26.186.130:28018`** |
|
|
|
+| 业务库 | test 库 | dev 库(profile=dev) |
|
|
|
+
|
|
|
+控制台操作:
|
|
|
+
|
|
|
+1. 「执行器管理」中应看到两组:`alien-job` 与 `alien-job-dev` 均 **在线**
|
|
|
+2. dev 定时任务绑定 **`alien-job-dev`** 执行器;test 任务绑定 `alien-job`
|
|
|
+3. dev 任务默认可 **停止**,联调时再启用
|
|
|
+
|
|
|
+验证:
|
|
|
+
|
|
|
+```bash
|
|
|
+curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:28018/
|
|
|
+curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:30018/
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 9. Jenkins 流水线
|
|
|
+
|
|
|
+### 9.1 Job 配置
|
|
|
+
|
|
|
+| 项 | 值 |
|
|
|
+|----|-----|
|
|
|
+| 类型 | Pipeline script from SCM |
|
|
|
+| 仓库 | `http://8.152.195.41:3000/alien/alien_cloud` |
|
|
|
+| 默认分支 | `*/deve` |
|
|
|
+| Script Path | **`docs/devops/dev/java/Jenkinsfile`** |
|
|
|
+
|
|
|
+保存后执行一次构建以注册参数。
|
|
|
+
|
|
|
+### 9.2 构建参数
|
|
|
+
|
|
|
+| 参数 | 默认 | 说明 |
|
|
|
+|------|------|------|
|
|
|
+| `GIT_BRANCH` | `deve` | 可改分支 |
|
|
|
+| `STOP_ALL` | `false` | 为 true 时先 `docker compose stop` 全部 dev 服务 |
|
|
|
+| `DEPLOY_gateway` | **true** | |
|
|
|
+| `DEPLOY_store` | **true** | |
|
|
|
+| `DEPLOY_second` | **true** | |
|
|
|
+| `DEPLOY_store_platform` | false | |
|
|
|
+| `DEPLOY_lawyer` | false | |
|
|
|
+| `DEPLOY_job` | false | |
|
|
|
+| `DEPLOY_dining` | false | |
|
|
|
+
|
|
|
+规则:
|
|
|
+
|
|
|
+- 至少勾选一个微服务
|
|
|
+- `STOP_ALL=true` 时 **必须勾选 gateway**
|
|
|
+- 流水线:`Checkout → [Stop All] → Maven(-pl 勾选模块 -am) → 拷贝 jar 到 /deve/java → compose up -d + restart`
|
|
|
+
|
|
|
+### 9.3 与 sit 任务对比
|
|
|
+
|
|
|
+| sit | deve |
|
|
|
+|-----|------|
|
|
|
+| 脚本写在 Job 内 | SCM `Jenkinsfile` |
|
|
|
+| 分支 `sit` | 参数 `GIT_BRANCH`,默认 `deve` |
|
|
|
+| 全量构建部署 | 按需模块 |
|
|
|
+| `/app_deploy` + `docker restart` | `/deve/java` + `docker compose` |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 10. 内存与资源建议
|
|
|
+
|
|
|
+基于测试机 `docker stats`(7 个 test Java 合计约 5.6GB RSS,宿主机约 10GB 可用):
|
|
|
+
|
|
|
+| 策略 | 服务 | 大约额外内存 |
|
|
|
+|------|------|--------------|
|
|
|
+| **日常推荐** | gateway + store + second | ~2~2.5 GB |
|
|
|
+| 全链路 | 7 个 Java | ~4.5~5.5 GB |
|
|
|
+
|
|
|
+dev compose 默认:`mem_limit` 800M(store 700M),`-Xmx384m`。`store-dev` 为最重模块,若 OOM 可适当提高 `mem_limit` 或 `-Xmx`。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 11. 日常运维命令
|
|
|
+
|
|
|
+```bash
|
|
|
+# 查看 dev 容器状态
|
|
|
+cd /deve/java && docker compose ps
|
|
|
+
|
|
|
+# 查看内存
|
|
|
+docker stats --no-stream gateway-dev store-dev job-dev --format "table {{.Name}}\t{{.MemUsage}}\t{{.MemPerc}}"
|
|
|
+
|
|
|
+# 重启单个服务
|
|
|
+cd /deve/java && docker compose restart store
|
|
|
+
|
|
|
+# 停止全部 dev Java(不影响 test)
|
|
|
+cd /deve/java && docker compose stop
|
|
|
+
|
|
|
+# 日志
|
|
|
+tail -f /deve/java/logs/store/alien-store/*.log
|
|
|
+docker logs -f store-dev --tail 200
|
|
|
+
|
|
|
+# 健康检查
|
|
|
+curl -s http://127.0.0.1:28000/actuator/health
|
|
|
+```
|
|
|
+
|
|
|
+### 日志备份示例
|
|
|
+
|
|
|
+```bash
|
|
|
+tar -czf /tmp/alien-store-logs-$(date +%Y%m%d-%H%M%S).tar.gz \
|
|
|
+ -C /deve/java/logs/store alien-store
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 12. 本地 IDEA 直连
|
|
|
+
|
|
|
+不启动服务器 Java 容器时,可本地起单个服务并连 dev 中间件:
|
|
|
+
|
|
|
+| 配置项 | 值 |
|
|
|
+|--------|-----|
|
|
|
+| `spring.profiles.active` | `dev` |
|
|
|
+| MySQL | `120.26.186.130:30001`,dev 库 |
|
|
|
+| Redis | `120.26.186.130:20022`,密码 `Alien123456` |
|
|
|
+| Nacos | `120.26.186.130:8848`,dev 命名空间 |
|
|
|
+
|
|
|
+**勿**使用 test 的 Nacos namespace,避免注册到 test 服务发现。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 13. Nginx(待配置)
|
|
|
+
|
|
|
+在现有 `nginx-1.28` 的 `conf.d` 中增加 dev 入口(示例):
|
|
|
+
|
|
|
+```nginx
|
|
|
+upstream dev_gateway { server 127.0.0.1:28000; }
|
|
|
+
|
|
|
+server {
|
|
|
+ listen 443 ssl;
|
|
|
+ server_name dev.ailien.shop;
|
|
|
+ location / {
|
|
|
+ proxy_pass http://dev_gateway;
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+静态资源建议独立目录,例如 `/docker/middleware/nginx/html-dev`。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 14. 常见问题
|
|
|
+
|
|
|
+| 现象 | 可能原因 | 处理 |
|
|
|
+|------|----------|------|
|
|
|
+| dev 请求打到 test 服务 | Profile 仍为 `test` 或 Nacos namespace 错误 | 确认 `-Dspring.profiles.active=dev` |
|
|
|
+| Redis 认证失败 | Nacos 未配 password | `common.yml` 补 `Alien123456` |
|
|
|
+| xxl-job 回调失败 | executor.port 写成 9999 | 宿主机侧应为 **28018** |
|
|
|
+| Jenkins 部署 jar 失败 | 未挂载 `/deve/java` | 检查 jenkins volumes |
|
|
|
+| 新 jar 不生效 | 仅 `up -d` 未 restart | 流水线已 `up -d` + `restart`;手工同理 |
|
|
|
+| `STOP_ALL` 后网关不通 | 未勾选 gateway | 勾选 `DEPLOY_gateway` |
|
|
|
+| 构建参数无复选框 | Job 有旧的手动参数冲突 | 删除 Job 内重复参数,重新保存 Job |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 15. 变更记录
|
|
|
+
|
|
|
+| 日期 | 说明 |
|
|
|
+|------|------|
|
|
|
+| 2026-06 | 初版:dev Java compose、redis-dev、Jenkinsfile、本文档 |
|
|
|
+
|
|
|
+配置变更请同步更新仓库 `docs/devops/dev/` 下对应文件,再部署到服务器。
|