refactor: Dockerfile.embed → Dockerfile + fix Login TS error

- Dockerfile.embed 重命名为 Dockerfile(统一命名规范)
- docker-compose.yml / run.sh 引用更新
- 全量文档(CLAUDE/AGENTS/README/docs)Dockerfile.embed → Dockerfile
- fix: Login.tsx User 类型缺少 email/status 字段
This commit is contained in:
attacker committed 2026-07-01 04:54:53 +00:00
1 parent 4cb0e62857
commit 092d0e4b9e
11 files changed
+21 -21

No files matched your search

+4 -4
View File
@@ -50,13 +50,13 @@
| `config.yaml` | 本地开发默认配置(SQLite + redka,端口 8080) | | `config.yaml` | 本地开发默认配置(SQLite + redka,端口 8080) |
| `docker-compose.yml` | 3 容器:MySQL 8.0 + Redis 7-alpine + AIOps(:8080) | | `docker-compose.yml` | 3 容器:MySQL 8.0 + Redis 7-alpine + AIOps(:8080) |
| `docker-compose.k8s.yml` | 单应用容器 + 外部 DB | | `docker-compose.k8s.yml` | 单应用容器 + 外部 DB |
| `Dockerfile.embed` | 4-stage Embed 镜像(前端→后端→Agent→Runtime),Compose 与 K8s 共用 | | `Dockerfile` | 4-stage Embed 镜像(前端→后端→Agent→Runtime),Compose 与 K8s 共用 |
| `.env.example` | Docker Compose 环境变量示例 | | `.env.example` | Docker Compose 环境变量示例 |
| `deploy/kubernetes/` | K8s 清单:`devops` 命名空间、NodePort 30080 | | `deploy/kubernetes/` | K8s 清单:`devops` 命名空间、NodePort 30080 |
| `run.sh` | 统一入口:dev / build / docker / kubernetes / release / binary | | `run.sh` | 统一入口:dev / build / docker / kubernetes / release / binary |
| `Makefile` | 快捷命令(dev / build / docker-up / lint 等),部分委托给 `run.sh`,部分已陈旧 | | `Makefile` | 快捷命令(dev / build / docker-up / lint 等),部分委托给 `run.sh`,部分已陈旧 |
> 注意:项目根目录**没有**独立的 `Dockerfile`,只有 `Dockerfile.embed`。`docker-compose.yml` 直接引用 `Dockerfile.embed`。 > 注意:项目根目录使用 `Dockerfile`(4-stage embed 单容器方案)。前端构建嵌入后端二进制,`docker-compose.yml` 直接引用。
### 2.2 后端 ### 2.2 后端
@@ -120,7 +120,7 @@ aiops/
├── tests/ # 集成测试脚本 ├── tests/ # 集成测试脚本
├── scripts/ # 构建辅助脚本(kubectl 安装、alpine 镜像源等) ├── scripts/ # 构建辅助脚本(kubectl 安装、alpine 镜像源等)
├── run.sh # 统一入口 ├── run.sh # 统一入口
├── Dockerfile.embed # 推荐生产镜像 ├── Dockerfile # 推荐生产镜像
├── docker-compose.yml ├── docker-compose.yml
├── docker-compose.k8s.yml ├── docker-compose.k8s.yml
├── config.yaml ├── config.yaml
@@ -486,7 +486,7 @@ WebSocket 无法设置自定义 header → 后端 `JWTAuth` 支持 `?token=` que
| FE4 | Radix Dialog 警告 | 必须有 `<DialogDescription>` | | FE4 | Radix Dialog 警告 | 必须有 `<DialogDescription>` |
| FE5 | Select.Item 空字符串 value | 用 sentinel 值 `__manual` | | FE5 | Select.Item 空字符串 value | 用 sentinel 值 `__manual` |
| FE6 | API 字段名不匹配 | 检查前后端命名一致性 | | FE6 | API 字段名不匹配 | 检查前后端命名一致性 |
| Build | Mac 构建 Linux 二进制 | 不能直接用 `./run.sh build`;用 `Dockerfile.embed` 或在 Linux 构建 | | Build | Mac 构建 Linux 二进制 | 不能直接用 `./run.sh build`;用 `Dockerfile` 或在 Linux 构建 |
--- ---
+2 -2
View File
@@ -62,7 +62,7 @@
在 K8s 集群 `devops` 命名空间部署,单容器 embed 模式,NodePort 30080 暴露。 在 K8s 集群 `devops` 命名空间部署,单容器 embed 模式,NodePort 30080 暴露。
```bash ```bash
./run.sh k8s deploy # 构建 Dockerfile.embed 镜像 + 全量部署 (MySQL+Redis+App) ./run.sh k8s deploy # 构建 Dockerfile 镜像 + 全量部署 (MySQL+Redis+App)
./run.sh k8s upgrade # 重新构建 + 滚动更新(不停机) ./run.sh k8s upgrade # 重新构建 + 滚动更新(不停机)
./run.sh k8s status # 查看 pods/svc/pvc/ingress ./run.sh k8s status # 查看 pods/svc/pvc/ingress
./run.sh k8s logs # 应用日志 (follow) ./run.sh k8s logs # 应用日志 (follow)
@@ -207,7 +207,7 @@ aiops/
│ └── reporter/ # HTTP 上报 │ └── reporter/ # HTTP 上报
│ │
├── deploy/kubernetes/ # K8s 部署清单 (devops 命名空间) ├── deploy/kubernetes/ # K8s 部署清单 (devops 命名空间)
├── Dockerfile.embed # 4 阶段 Embed 镜像 (前端→后端→Agent→Runtime) ├── Dockerfile # 4 阶段 Embed 镜像 (前端→后端→Agent→Runtime)
├── docker-compose.yml # 4 容器部署 (mysql+redis+backend+frontend) ├── docker-compose.yml # 4 容器部署 (mysql+redis+backend+frontend)
├── run.sh # 统一入口脚本 ├── run.sh # 统一入口脚本
└── Makefile # 快捷命令 └── Makefile # 快捷命令
View File
File renamed without changes.
+2 -2
View File
@@ -94,7 +94,7 @@ curl http://localhost:8080/version # 查看运行版本
``` ```
> Mac 上 `./run.sh build` 产出 **darwin** 二进制,仅本机可用。 > Mac 上 `./run.sh build` 产出 **darwin** 二进制,仅本机可用。
> Linux 服务器请在 Linux 上构建,或使用 Docker/K8s embed 镜像(`Dockerfile.embed` 固定 `GOOS=linux GOARCH=amd64`)。 > Linux 服务器请在 Linux 上构建,或使用 Docker/K8s embed 镜像(`Dockerfile` 固定 `GOOS=linux GOARCH=amd64`)。
### Agent 构建 ### Agent 构建
@@ -144,7 +144,7 @@ aiops/
├── deploy/kubernetes/ # K8s 部署清单 (devops 命名空间) ├── deploy/kubernetes/ # K8s 部署清单 (devops 命名空间)
├── docker-compose.yml # MySQL + Redis + AIOps embed(3 容器) ├── docker-compose.yml # MySQL + Redis + AIOps embed(3 容器)
├── docker-compose.k8s.yml # 单应用容器(连接外部 DB) ├── docker-compose.k8s.yml # 单应用容器(连接外部 DB)
├── Dockerfile.embed # embed 单容器镜像(推荐) ├── Dockerfile # embed 单容器镜像(推荐)
├── run.sh # 统一入口脚本 ├── run.sh # 统一入口脚本
└── aiops # 独立二进制产物(gitignore,项目根目录) └── aiops # 独立二进制产物(gitignore,项目根目录)
``` ```
+1 -1
View File
@@ -54,7 +54,7 @@ services:
image: ${DOCKERHUB_IMAGE:-lghost/aiops}:${VERSION:-dev} image: ${DOCKERHUB_IMAGE:-lghost/aiops}:${VERSION:-dev}
build: build:
context: . context: .
dockerfile: Dockerfile.embed dockerfile: Dockerfile
args: args:
VERSION: ${VERSION:-dev} VERSION: ${VERSION:-dev}
BUILD_TIME: ${BUILD_TIME:-unknown} BUILD_TIME: ${BUILD_TIME:-unknown}
+1 -1
View File
@@ -28,7 +28,7 @@ aiops/
├── agent/ # 监控 Agent(独立 Go module) ├── agent/ # 监控 Agent(独立 Go module)
├── docs/ # 开发文档 + Agent CLI 设计文档集 ├── docs/ # 开发文档 + Agent CLI 设计文档集
├── deploy/kubernetes/ # K8s 部署清单 ├── deploy/kubernetes/ # K8s 部署清单
├── Dockerfile.embed # 推荐生产镜像 ├── Dockerfile # 推荐生产镜像
├── docker-compose.yml # 3 容器部署 ├── docker-compose.yml # 3 容器部署
└── run.sh # 统一入口脚本 └── run.sh # 统一入口脚本
``` ```
+1 -1
View File
@@ -66,4 +66,4 @@ Compose: ./run.sh docker up → mysql + redis + aiops (embed, :8080)
K8s: ./run.sh kubernetes → lghost/aiops:<tag> embed 单 Pod K8s: ./run.sh kubernetes → lghost/aiops:<tag> embed 单 Pod
``` ```
> 前后端分离的 Nginx 容器已废弃,统一使用 `Dockerfile.embed` 单容器方案。 > 前后端分离的 Nginx 容器已废弃,统一使用 `Dockerfile` 单容器方案。
+5 -5
View File
@@ -143,7 +143,7 @@ WantedBy=multi-user.target
### 架构(3 容器) ### 架构(3 容器)
``` ```
mysql:8.0 + redis:7-alpine + aiops (Dockerfile.embed) mysql:8.0 + redis:7-alpine + aiops (Dockerfile)
↓ ↓
http://localhost:8080 http://localhost:8080
(API + WebSocket + 前端 SPA) (API + WebSocket + 前端 SPA)
@@ -194,7 +194,7 @@ VERSION=v1.5.0 docker compose -f docker-compose.k8s.yml up -d --build
### 镜像 ### 镜像
- 默认镜像:`lghost/aiops:<tag>` - 默认镜像:`lghost/aiops:<tag>`
- 构建文件:`Dockerfile.embed` - 构建文件:`Dockerfile`
- 命名空间:`devops` - 命名空间:`devops`
- 访问:`http://<NODE_IP>:30080` - 访问:`http://<NODE_IP>:30080`
@@ -217,7 +217,7 @@ VERSION=v1.5.0 docker compose -f docker-compose.k8s.yml up -d --build
./run.sh kubernetes push v1.5.0 ./run.sh kubernetes push v1.5.0
``` ```
`Dockerfile.embed` 内固定 `GOOS=linux GOARCH=amd64`,在 Mac 上 `docker build` 产出的是 Linux 镜像。 `Dockerfile` 内固定 `GOOS=linux GOARCH=amd64`,在 Mac 上 `docker build` 产出的是 Linux 镜像。
### 运维命令 ### 运维命令
@@ -248,7 +248,7 @@ VERSION=v1.5.0 docker compose -f docker-compose.k8s.yml up -d --build
| 操作 | Mac 支持 | 说明 | | 操作 | Mac 支持 | 说明 |
|------|---------|------| |------|---------|------|
| `./run.sh build` | ✅(darwin 二进制) | 仅本机运行 | | `./run.sh build` | ✅(darwin 二进制) | 仅本机运行 |
| `docker build` (Dockerfile.embed) | ✅ | 产出 linux/amd64 镜像 | | `docker build` (Dockerfile) | ✅ | 产出 linux/amd64 镜像 |
| `docker push lghost/aiops:tag` | ✅ | 需 `docker login` | | `docker push lghost/aiops:tag` | ✅ | 需 `docker login` |
| `./run.sh release v1.x` | ✅ | 完整发版流程 | | `./run.sh release v1.x` | ✅ | 完整发版流程 |
@@ -280,7 +280,7 @@ K8s 探针使用 `/version`。
| 文件 | 说明 | | 文件 | 说明 |
|------|------| |------|------|
| `run.sh` | 统一入口(build/docker/kubernetes/release) | | `run.sh` | 统一入口(build/docker/kubernetes/release) |
| `Dockerfile.embed` | embed 单容器镜像(推荐) | | `Dockerfile` | embed 单容器镜像(推荐) |
| `docker-compose.yml` | MySQL + Redis + AIOps | | `docker-compose.yml` | MySQL + Redis + AIOps |
| `deploy/kubernetes/deployment.yaml` | K8s Deployment + NodePort | | `deploy/kubernetes/deployment.yaml` | K8s Deployment + NodePort |
| `.gitignore` | 忽略 `aiops`、`backend/aiops*` 等编译产物 | | `.gitignore` | 忽略 `aiops`、`backend/aiops*` 等编译产物 |
+3 -3
View File
@@ -84,7 +84,7 @@ aiops/
├── deploy/kubernetes/ # K8s 清单 (devops 命名空间) ├── deploy/kubernetes/ # K8s 清单 (devops 命名空间)
├── docker-compose.yml # MySQL + Redis + AIOps embed ├── docker-compose.yml # MySQL + Redis + AIOps embed
├── docker-compose.k8s.yml # 单应用 + 外部 DB ├── docker-compose.k8s.yml # 单应用 + 外部 DB
├── Dockerfile.embed # embed 单容器镜像(推荐) ├── Dockerfile # embed 单容器镜像(推荐)
├── run.sh # 统一入口脚本 ├── run.sh # 统一入口脚本
├── aiops # 独立二进制产物(gitignore) ├── aiops # 独立二进制产物(gitignore)
└── README.md └── README.md
@@ -117,7 +117,7 @@ aiops/
| 文件 | 用途 | | 文件 | 用途 |
|------|------| |------|------|
| `run.sh` | build / docker / kubernetes / release 统一入口 | | `run.sh` | build / docker / kubernetes / release 统一入口 |
| `Dockerfile.embed` | 生产推荐:前端嵌入后端单容器 | | `Dockerfile` | 生产推荐:前端嵌入后端单容器 |
| `docker-compose.yml` | 3 容器:MySQL + Redis + AIOps | | `docker-compose.yml` | 3 容器:MySQL + Redis + AIOps |
| `backend/static/` | `go:embed` 目标,由 `./run.sh build` 同步 | | `backend/static/` | `go:embed` 目标,由 `./run.sh build` 同步 |
| `./aiops` | 独立二进制输出路径(项目根目录) | | `./aiops` | 独立二进制输出路径(项目根目录) |
@@ -163,5 +163,5 @@ aiops/
编译时通过 ldflags 注入 `main.Version` / `BuildTime` / `GitCommit`: 编译时通过 ldflags 注入 `main.Version` / `BuildTime` / `GitCommit`:
- `./run.sh build` / `./run.sh build tag v1.5.0` - `./run.sh build` / `./run.sh build tag v1.5.0`
- `Dockerfile.embed` 构建参数 `VERSION` / `BUILD_TIME` / `GIT_COMMIT` - `Dockerfile` 构建参数 `VERSION` / `BUILD_TIME` / `GIT_COMMIT`
- 运行时:`./aiops version`、`GET /version` - 运行时:`./aiops version`、`GET /version`
+1 -1
View File
@@ -34,7 +34,7 @@ export function Login() {
setError(''); setError('');
setLoading(true); setLoading(true);
try { try {
const result = await authApi.login(username, password) as { user: { id: number; username: string }; token: string; permissions?: string[] }; const result = await authApi.login(username, password) as { user: { id: number; username: string; email: string; status: number }; token: string; permissions?: string[] };
useUserStore.getState().login(result.user, result.token, result.permissions ?? null); useUserStore.getState().login(result.user, result.token, result.permissions ?? null);
localStorage.setItem('token', result.token); localStorage.setItem('token', result.token);
navigate('/', { replace: true }); navigate('/', { replace: true });
+1 -1
View File
@@ -507,7 +507,7 @@ build_embed_image() {
export DOCKER_BUILDKIT=1 export DOCKER_BUILDKIT=1
local build_args=( local build_args=(
-f Dockerfile.embed -f Dockerfile
--build-arg "VERSION=${BUILD_VERSION}" --build-arg "VERSION=${BUILD_VERSION}"
--build-arg "BUILD_TIME=${BUILD_TIME}" --build-arg "BUILD_TIME=${BUILD_TIME}"
--build-arg "GIT_COMMIT=${GIT_COMMIT}" --build-arg "GIT_COMMIT=${GIT_COMMIT}"