Files
sino-mci/AGENTS.md

4.7 KiB
Raw Blame History

Sino-MCI 项目约定

本文件用于固定开发/部署时的关键操作,避免反复踩坑。

1. Java 与 Maven

  • 必须使用 JDK 21/Library/Java/JavaVirtualMachines/zulu-21.jdk/Contents/Home
  • 项目已配置 Maven Toolchain必须在 backend/ 目录下执行完整 reactor 构建
    cd /Users/marsal/Projects/sino-project/sino-mci/backend
    mvn clean install -DskipTests
    
  • 不要-pl 单模块编译,会跳过 .mvn/maven.config 中的 toolchains 配置,导致编译报 JDK 17 错误。
  • 当前环境 java -version 可能显示 JDK 17但 Maven 会通过 toolchain 自动切换到 JDK 21无需手动修改 JAVA_HOME

2. Docker Compose 项目名(重要)

Docker Compose 的 -p 参数决定容器前缀和命名卷前缀。反复换 -p 会产生多个 MySQL 数据卷,导致数据“丢失”的假象。

统一使用项目名 sino-mci

cd /Users/marsal/Projects/sino-project/sino-mci

# 启动全部基础设施 + 应用
# 使用 --profile 同时启用 infra 和 app否则带 profile 的服务不会启动
docker compose -p sino-mci --profile infra --profile app up -d

# 只启动基础设施MySQL/Redis/RabbitMQ/SeaweedFS
docker compose -p sino-mci --profile infra up -d

# 只启动应用mci-server / admin-web / channel-service
docker compose -p sino-mci --profile app up -d

# 停止整个项目(不删除数据卷)
docker compose -p sino-mci --profile infra --profile app down
  • 不带 -p 时,项目名默认就是目录名 sino-mci,与上面等价。
  • 不要再使用 -p infrastructure 或其他名字启动,避免产生新的数据卷。

3. 数据卷

当前项目使用的命名卷:

  • sino-mci_mci-mysql-data
  • sino-mci_mci-seaweedfs-data
  • sino-mci_channel-service-data

检查当前 MySQL 容器挂载的是哪个卷

docker inspect -f '{{ range .Mounts }}{{ if eq .Destination "/var/lib/mysql" }}{{ .Name }}{{ end }}{{ end }}' mci-mysql

查看所有 sino-mci 相关卷

docker volume ls | grep sino-mci

历史 infrastructure_*

早期用 -p infrastructure 启动过,留下以下卷,目前未被使用

  • infrastructure_mci-mysql-data
  • infrastructure_mci-seaweedfs-data
  • infrastructure_channel-service-data

如需迁移/核对其中的数据,请先停止当前 mci-mysql,再临时挂载该卷启动容器查询,查完立即恢复。

4. 常用命令

# 查看服务状态
docker compose -p sino-mci ps

# 查看 mci-server 日志
docker logs -f mci-server --tail 100

# 进入 MySQL
docker exec -it mci-mysql mysql -uroot -proot sino_mci

# 进入 Redis
docker exec -it mci-redis redis-cli

# 重新构建 mci-server 镜像(先执行 mvn clean install -DskipTests
docker compose -p sino-mci --profile app build mci-server

5. 环境变量与快速切换环境

项目使用 .env 统一管理 MySQL、Redis、RabbitMQ、SeaweedFS 以及应用服务的连接地址。

5.1 快速切换本地/远程基础设施

cd /Users/marsal/Projects/sino-project/sino-mci

# 方案 A连接本机 localhost 上的基础设施(默认)
cp .env.local .env

# 方案 B连接远程基础设施如 192.168.1.173
cp .env.remote .env

.env 文件不会被提交(已加入 .gitignore),可以按需要随时切换。

5.2 本地启动后端/前端/Channel Service

# 后端
./scripts/run-local.sh backend

# 前端
./scripts/run-local.sh frontend

# Channel Service
./scripts/run-local.sh channel

run-local.sh 会自动加载项目根目录的 .env,并把 MYSQL_HOSTREDIS_HOSTRABBITMQ_HOSTMCI_SERVER_URLVITE_API_BASE_URL 等变量注入到对应进程中。

5.3 Docker Compose 启动(不受 .env 中 host 影响)

# 只启动基础设施
./scripts/local-up.sh

# 启动基础设施 + 应用服务
./scripts/local-up.sh --with-apps

local-up.sh 会自动把 host 覆盖为 Docker 容器名(mci-mysqlmci-redismci-rabbitmqmci-server),因此无论 .env 中是 localhost 还是远程 IP容器内部都能正确互联。

5.4 手动执行 docker compose 的注意事项

若直接运行 docker compose 命令,容器会使用当前 .env 中的 MYSQL_HOST 等变量。请确保 .env 中的 host 对容器可访问,或改用 local-up.sh 启动。

5.5 默认账号

  • MySQL root 密码:root(仅本地/内网开发使用)
  • 平台管理员:superadmin / admin123

5.6 新增环境/自定义地址

复制任意一份模板后修改:

cp .env.local .env
# 编辑 .env 中的 MYSQL_HOST、REDIS_HOST、RABBITMQ_HOST、MCI_SERVER_URL、VITE_API_BASE_URL