Introduction.md 11 KB

开发环境(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. 架构概览

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 宿主机路径

/docker/middleware/              # 测试中间件(已有)
/docker/middleware-dev/          # 开发增补中间件(redis-dev)
/docker/java/                    # 测试 Java 服务
/deve/java/                      # 开发 Java 服务(compose + jar + logs)

首次部署建议从仓库复制:

# 开发 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 前置条件

docker network inspect app-network   # 须已存在(middleware 创建)

6.2 启动 redis-dev

cd /docker/middleware-dev
docker compose up -d
docker exec redis-dev redis-cli -a Alien123456 ping

6.3 启动 Java 服务

日常最小集(约 2~2.5GB 额外内存):

cd /deve/java
docker compose up -d gateway store second

全量:

cd /deve/java
docker compose up -d

6.4 Jenkins 容器挂载(必配)

/docker/middleware/docker-compose.ymljenkins 服务中增加:

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 等)中确认:

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-admin30019),通过 执行器 隔离:

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-jobalien-job-dev在线
  2. dev 定时任务绑定 alien-job-dev 执行器;test 任务绑定 alien-job
  3. dev 任务默认可 停止,联调时再启用

验证:

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),-Xmx384mstore-dev 为最重模块,若 OOM 可适当提高 mem_limit-Xmx


11. 日常运维命令

# 查看 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

日志备份示例

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.28conf.d 中增加 dev 入口(示例):

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.ymlAlien123456
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/ 下对应文件,再部署到服务器。