# 开发环境(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/?... 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/` 下对应文件,再部署到服务器。