docs: 同步 README 与 docs 至最新部署与版本方案
- 更新三种部署方式:embed 单容器、./aiops 根目录二进制 - 补充版本管理、release、lghost/aiops 镜像推送说明 - 修正过时的 docker 4 容器、backend/aiops、run.sh start 等描述 - 更新 project-structure、deployment、quick-start 等核心文档
This commit is contained in:
1 parent
9f5ce249f1
commit
286decf0b0
8 files changed
+593
-487
No files matched your search
+244
-97
@@ -1,139 +1,286 @@
|
||||
# 部署指南
|
||||
|
||||
## 开发环境
|
||||
本文档描述 AIOps 的三种部署方式、版本管理和镜像发布流程。
|
||||
|
||||
参见 [快速开始](./quick-start.md)。
|
||||
## 部署方式概览
|
||||
|
||||
```bash
|
||||
./run.sh start
|
||||
| 方式 | 命令 | 容器/产物 | 前端 | 数据库 |
|
||||
|------|------|-----------|------|--------|
|
||||
| 独立二进制 | `./run.sh build` | `./aiops`(项目根目录) | go:embed | 默认 SQLite + redka |
|
||||
| Docker Compose | `./run.sh docker up` | 3 容器 | embed 单端口 8080 | MySQL + Redis |
|
||||
| Kubernetes | `./run.sh kubernetes deploy` | embed 单 Pod | embed 单端口 8080 | 集群内 MySQL/Redis 或 local 模式 |
|
||||
|
||||
> **已废弃**:前后端分离的 4 容器 Compose(Backend + Nginx)已合并为 embed 单应用容器。
|
||||
|
||||
---
|
||||
|
||||
## 版本管理
|
||||
|
||||
### 原则
|
||||
|
||||
```
|
||||
Git tag (v1.5.0) → 唯一发布版本
|
||||
↓
|
||||
┌────┴────┬──────────────┐
|
||||
│ │ │
|
||||
./aiops lghost/aiops K8s deployment
|
||||
version :v1.5.0 image: lghost/aiops:v1.5.0
|
||||
```
|
||||
|
||||
## 生产构建
|
||||
### 版本解析优先级
|
||||
|
||||
### 后端编译
|
||||
`run.sh` 中 `resolve_version()` 统一处理:
|
||||
|
||||
1. 显式参数(`./run.sh build tag v1.5.0`)
|
||||
2. 环境变量 `VERSION=v1.5.0`
|
||||
3. `git describe --tags --always --dirty`
|
||||
4. 兜底 `dev`
|
||||
|
||||
### 查看版本
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
CGO_ENABLED=1 go build -ldflags="-s -w" -o aiops-server cmd/main.go
|
||||
./aiops version
|
||||
./aiops --version
|
||||
curl http://localhost:8080/version
|
||||
```
|
||||
|
||||
### 前端构建
|
||||
响应示例:
|
||||
|
||||
```bash
|
||||
cd app
|
||||
npm run build # 输出到 dist/
|
||||
```
|
||||
|
||||
### 使用 Makefile
|
||||
|
||||
```bash
|
||||
make build # 同时构建前后端
|
||||
```
|
||||
|
||||
## Docker 部署
|
||||
|
||||
### Dockerfile
|
||||
|
||||
后端已有 `backend/Dockerfile`,可基于此构建镜像。
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
docker build -t aiops-server .
|
||||
```
|
||||
|
||||
### docker-compose
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## Nginx 反向代理
|
||||
|
||||
前端构建后部署到 Nginx,后端 API 反向代理:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name aiops.example.com;
|
||||
|
||||
# 前端静态文件
|
||||
location / {
|
||||
root /usr/share/nginx/html;
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
# 后端 API 代理
|
||||
location /api/ {
|
||||
proxy_pass http://127.0.0.1:8080;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
}
|
||||
|
||||
# WebSocket 代理
|
||||
location /ws/ {
|
||||
proxy_pass http://127.0.0.1:8080;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
}
|
||||
```json
|
||||
{
|
||||
"version": "v1.5.0",
|
||||
"build_time": "2026-06-26T08:26:52Z",
|
||||
"git_commit": "9f5ce24",
|
||||
"mode": "local",
|
||||
"db_driver": "sqlite",
|
||||
"redis_driver": "redka"
|
||||
}
|
||||
```
|
||||
|
||||
参考配置文件:`backend/nginx.conf`
|
||||
### 一键发版
|
||||
|
||||
## 系统服务(systemd)
|
||||
```bash
|
||||
docker login
|
||||
./run.sh release v1.5.0
|
||||
```
|
||||
|
||||
创建 `/etc/systemd/system/aiops.service`:
|
||||
依次执行:
|
||||
|
||||
1. 创建 git tag `v1.5.0`(已存在则跳过)
|
||||
2. 编译独立二进制 `./aiops`(ldflags 注入版本)
|
||||
3. 构建 Docker 镜像 `lghost/aiops:v1.5.0`
|
||||
4. 推送到 Docker Hub
|
||||
5. 更新 `deploy/kubernetes/deployment.yaml` 镜像坐标
|
||||
|
||||
发版后可选:
|
||||
|
||||
```bash
|
||||
git push origin master
|
||||
git push origin v1.5.0
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ① 独立二进制
|
||||
|
||||
### 编译
|
||||
|
||||
```bash
|
||||
./run.sh build # 自动解析版本
|
||||
./run.sh build tag v1.5.0 # 指定版本
|
||||
```
|
||||
|
||||
产物固定输出到 **项目根目录** `./aiops`,不会在 `backend/` 下生成。
|
||||
|
||||
构建前会自动清理历史产物:`backend/aiops*`。
|
||||
|
||||
### 启动
|
||||
|
||||
```bash
|
||||
./aiops --mode local # SQLite + redka(默认推荐)
|
||||
./aiops --port 9090
|
||||
./aiops --config config.yaml
|
||||
|
||||
# 后台守护进程
|
||||
./run.sh binary upgrade
|
||||
./run.sh binary status
|
||||
./run.sh binary stop
|
||||
```
|
||||
|
||||
### 平台说明
|
||||
|
||||
| 构建环境 | `./aiops` 格式 | 用途 |
|
||||
|----------|---------------|------|
|
||||
| macOS Apple Silicon | darwin/arm64 | 仅 Mac 本机 |
|
||||
| macOS Intel | darwin/amd64 | 仅 Mac 本机 |
|
||||
| Linux x86_64 | linux/amd64 | Linux 服务器 |
|
||||
|
||||
Mac 上 `./run.sh build` **不能**产出 Linux 二进制;Linux 部署请用 Docker 镜像或在 Linux 上构建。
|
||||
|
||||
### systemd 示例
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=AIOps Server
|
||||
Description=AIOps
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=www-data
|
||||
User=aiops
|
||||
WorkingDirectory=/opt/aiops
|
||||
ExecStart=/opt/aiops/aiops-server
|
||||
ExecStart=/opt/aiops/aiops --mode local --port 8080
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
Environment=GIN_MODE=release
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
```bash
|
||||
systemctl enable aiops
|
||||
systemctl start aiops
|
||||
---
|
||||
|
||||
## ② Docker Compose
|
||||
|
||||
### 架构(3 容器)
|
||||
|
||||
```
|
||||
mysql:8.0 + redis:7-alpine + aiops (Dockerfile.embed)
|
||||
↓
|
||||
http://localhost:8080
|
||||
(API + WebSocket + 前端 SPA)
|
||||
```
|
||||
|
||||
## 环境变量
|
||||
### 启动
|
||||
|
||||
| 变量 | 默认值 | 说明 |
|
||||
|------|--------|------|
|
||||
| PORT | 8080 | 后端端口 |
|
||||
| GIN_MODE | debug | Gin 模式(release/debug) |
|
||||
| GOPROXY | - | Go 模块代理 |
|
||||
```bash
|
||||
./run.sh docker up
|
||||
./run.sh docker up v1.5.0 # 指定版本
|
||||
./run.sh docker up fresh # 无缓存全量重建
|
||||
```
|
||||
|
||||
## 生产配置建议
|
||||
环境变量(可选):
|
||||
|
||||
1. **数据库**: 生产环境使用 MySQL/PostgreSQL,不要用 SQLite
|
||||
2. **JWT Secret**: 更换为高强度随机字符串
|
||||
3. **CORS**: 生产环境配置允许的具体域名,不要用 `*`
|
||||
4. **HTTPS**: 配置 TLS 证书
|
||||
5. **日志**: 使用文件日志 + 日志轮转
|
||||
6. **备份**: 定期备份数据库
|
||||
```bash
|
||||
VERSION=v1.5.0 MYSQL_PASSWORD=xxx ./run.sh docker up
|
||||
```
|
||||
|
||||
### 推送镜像
|
||||
|
||||
```bash
|
||||
./run.sh docker push v1.5.0
|
||||
# 等价于 docker push lghost/aiops:v1.5.0
|
||||
```
|
||||
|
||||
### 连接外部数据库
|
||||
|
||||
使用 `docker-compose.k8s.yml`(仅单应用容器,挂载 `backend/config.external.yaml`):
|
||||
|
||||
```bash
|
||||
VERSION=v1.5.0 docker compose -f docker-compose.k8s.yml up -d --build
|
||||
```
|
||||
|
||||
### 管理命令
|
||||
|
||||
```bash
|
||||
./run.sh docker ps
|
||||
./run.sh docker logs
|
||||
./run.sh docker down
|
||||
./run.sh docker clean # 清理构建缓存
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ③ Kubernetes
|
||||
|
||||
### 镜像
|
||||
|
||||
- 默认镜像:`lghost/aiops:<tag>`
|
||||
- 构建文件:`Dockerfile.embed`
|
||||
- 命名空间:`devops`
|
||||
- 访问:`http://<NODE_IP>:30080`
|
||||
|
||||
### 部署
|
||||
|
||||
```bash
|
||||
./run.sh kubernetes deploy
|
||||
./run.sh kubernetes deploy v1.5.0
|
||||
```
|
||||
|
||||
### 滚动更新
|
||||
|
||||
```bash
|
||||
./run.sh kubernetes upgrade v1.5.0
|
||||
```
|
||||
|
||||
### 推送镜像(Mac 可构建 Linux 镜像)
|
||||
|
||||
```bash
|
||||
./run.sh kubernetes push v1.5.0
|
||||
```
|
||||
|
||||
`Dockerfile.embed` 内固定 `GOOS=linux GOARCH=amd64`,在 Mac 上 `docker build` 产出的是 Linux 镜像。
|
||||
|
||||
### 运维命令
|
||||
|
||||
```bash
|
||||
./run.sh kubernetes status
|
||||
./run.sh kubernetes logs
|
||||
./run.sh kubernetes exec
|
||||
./run.sh kubernetes mysql
|
||||
./run.sh kubernetes redis
|
||||
./run.sh kubernetes scale 3 # 多副本自动切换 release + MySQL 模式
|
||||
./run.sh kubernetes port-forward
|
||||
./run.sh kubernetes delete
|
||||
```
|
||||
|
||||
### 内网部署说明
|
||||
|
||||
若 K8s 节点无法访问 Docker Hub:
|
||||
|
||||
1. **推荐**:同步到内网 Harbor,修改 `deployment.yaml` 中 `image` 为内网地址
|
||||
2. **离线**:`docker save` → `scp` → 节点 `docker load`
|
||||
|
||||
运行节点(如 10.10.10.73/75)只需 `pull` 镜像,不需要把镜像文件直接推到服务器磁盘。
|
||||
|
||||
---
|
||||
|
||||
## Mac 构建 Linux 镜像
|
||||
|
||||
| 操作 | Mac 支持 | 说明 |
|
||||
|------|---------|------|
|
||||
| `./run.sh build` | ✅(darwin 二进制) | 仅本机运行 |
|
||||
| `docker build` (Dockerfile.embed) | ✅ | 产出 linux/amd64 镜像 |
|
||||
| `docker push lghost/aiops:tag` | ✅ | 需 `docker login` |
|
||||
| `./run.sh release v1.x` | ✅ | 完整发版流程 |
|
||||
|
||||
---
|
||||
|
||||
## 健康检查
|
||||
|
||||
```bash
|
||||
# 检查后端是否正常
|
||||
curl http://localhost:8080/health
|
||||
# {"status":"ok"}
|
||||
|
||||
# 检查版本
|
||||
curl http://localhost:8080/version
|
||||
# {"version":"dev","build_time":"...","git_commit":"..."}
|
||||
curl http://localhost:8080/version # 推荐(无 DB 强依赖)
|
||||
curl http://localhost:8080/health # 含 DB 检查
|
||||
```
|
||||
|
||||
K8s 探针使用 `/version`。
|
||||
|
||||
---
|
||||
|
||||
## 生产配置建议
|
||||
|
||||
1. **数据库**:生产使用 MySQL + Redis(`MODE=release`),local 模式仅适合单副本
|
||||
2. **JWT Secret**:更换默认密钥
|
||||
3. **版本**:生产环境 pin 镜像 tag(`lghost/aiops:v1.5.0`),避免使用 `:dev`
|
||||
4. **HTTPS**:Ingress 或前置 Nginx 终止 TLS
|
||||
5. **备份**:定期备份 MySQL 数据和 PVC
|
||||
|
||||
---
|
||||
|
||||
## 相关文件
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `run.sh` | 统一入口(build/docker/kubernetes/release) |
|
||||
| `Dockerfile.embed` | embed 单容器镜像(推荐) |
|
||||
| `docker-compose.yml` | MySQL + Redis + AIOps |
|
||||
| `deploy/kubernetes/deployment.yaml` | K8s Deployment + NodePort |
|
||||
| `.gitignore` | 忽略 `aiops`、`backend/aiops*` 等编译产物 |
|
||||
Reference in new issue
Block a user