logo
0
0
WeChat Login

家庭资产管理平台

一个基于 Spring Boot + Vue 3 + CNB 的家庭资产管理平台,支持资产扫描发现、端口监控和服务部署清单管理。

功能特性

1. 资产管理

  • 局域网 IP 扫描
  • 设备信息收集(IP、MAC 地址、主机名)
  • 在线/离线状态监控
  • 资产分类管理

2. 端口监控

  • 常用端口扫描(HTTP, SSH, MySQL, Redis 等)
  • 端口占用情况展示
  • 服务识别
  • Docker 端口映射关联

3. Docker 容器管理

  • 容器列表查看
  • 容器状态监控
  • 镜像信息展示
  • 端口映射查看

4. 服务部署清单

  • 服务信息记录
  • 部署类型管理(Docker、原生、Docker Compose)
  • 配置文件路径记录
  • 健康检查管理
  • 服务分类和搜索

技术栈

后端

  • Spring Boot 3.2.2
  • MyBatis 3.0.3
  • MySQL 8.0+
  • Redis 7.0+
  • MinIO 8.5+
  • Docker Java API 3.3.6
  • Lombok

前端

  • Vue 3.4.21 (Composition API)
  • TypeScript 5.4.2
  • Vite 5.1.6
  • Pinia 2.1.7
  • Element Plus 2.6.0
  • Axios 1.6.7
  • Vue Router 4.3.0

CNB 集成

  • CNB CI/CD
  • Docker 多架构构建
  • Kubernetes 自动部署

项目结构

home-asset-manager/
├── home-asset-manager-backend/    # Spring Boot 后端
│   ├── src/main/java/com/homeasset/
│   │   ├── controller/            # 控制器层
│   │   ├── service/               # 服务层
│   │   ├── mapper/                # 数据访问层
│   │   ├── entity/                # 实体类
│   │   ├── dto/                   # 数据传输对象
│   │   ├── config/                # 配置类
│   │   ├── scanner/               # 扫描器
│   │   └── handler/               # 全局异常处理
│   ├── src/main/resources/
│   │   └── application.yml        # 应用配置
│   ├── pom.xml                    # Maven 配置
│   └── Dockerfile                 # 后端镜像构建
│
├── home-asset-manager-frontend/   # Vue 3 前端
│   ├── src/
│   │   ├── api/                   # API 请求
│   │   ├── components/            # 公共组件
│   │   ├── views/                 # 页面视图
│   │   ├── router/                # 路由配置
│   │   ├── stores/                # Pinia 状态管理
│   │   ├── types/                 # TypeScript 类型
│   │   └── utils/                 # 工具函数
│   ├── package.json               # npm 配置
│   ├── vite.config.ts             # Vite 配置
│   └── Dockerfile                 # 前端镜像构建
│
├── docker-compose.yml             # 本地开发环境
├── .cnb.yml                       # CNB 构建配置
├── schema.sql                     # 数据库初始化脚本
├── .gitignore                     # Git 忽略规则
└── README.md                      # 项目文档

快速开始

使用 Docker Compose(推荐)

  1. 克隆项目:
git clone <repository-url>
cd home-asset-manager
  1. 启动所有服务:
docker-compose up -d
  1. 访问应用:

手动运行

后端

  1. 初始化数据库:
mysql -u root -p < schema.sql
  1. 进入后端目录:
cd home-asset-manager-backend
  1. 修改配置文件 src/main/resources/application.yml(配置公共中间件地址)

  2. 运行后端:

mvn spring-boot:run

前端

  1. 进入前端目录:
cd home-asset-manager-frontend
  1. 安装依赖:
npm install
  1. 运行开发服务器:
npm run dev
  1. 构建生产版本:
npm run build

公共中间件配置

项目使用以下公共中间件(需要配置访问权限):

中间件地址用途
MySQL192.168.5.66:3306关系型数据库
Redis192.168.5.66:6379缓存数据库
MinIO192.168.5.66:9000对象存储

环境变量配置

application.yml 或环境变量中配置:

spring:
  datasource:
    url: jdbc:mysql://192.168.5.66:3306/home_asset_manager
    username: root
    password: password

  redis:
    host: 192.168.5.66
    port: 6379
    password: password

minio:
  endpoint: http://192.168.5.66:9000
  access-key: minioadmin
  secret-key: minioadmin123

CNB 平台集成

CNB 配置

  1. 组织:code-channel
  2. 仓库:home-asset-manager
  3. 平台地址:https://cnb.cool

部署到 CNB

  1. 配置 Git:
git config --local user.name cool.cnb
git config --local user.email "WyCMvfISebPSRhNfPflU92+cool.cnb@noreply.cnb.cool"
  1. 添加远程仓库:
git remote add origin https://cnb.cool/code-channel/home-asset-manager.git
  1. 推送代码:
git add .
git commit -m "初始化项目"
git push -u origin master
  1. CNB 会自动触发 CI/CD 流程:
    • 构建 Docker 镜像
    • 推送到镜像仓库
    • 更新 Kubernetes 集群

CNB 环境变量

CNB 会自动注入以下环境变量:

  • CNB_DOCKER_REGISTRY - Docker 仓库地址(docker.cnb.cool)
  • CNB_REPO_SLUG_LOWERCASE - 仓库路径
  • CI_COMMIT_SHORT_SHA - Git 提交短哈希

密钥配置

在密钥仓库 code-channel/secret 创建配置文件:

  • kuboard-cicd-home-asset-manager.yml

API 接口

资产管理 API

  • POST /api/assets/scan - 扫描网络资产
  • GET /api/assets - 获取所有资产
  • GET /api/assets/online - 获取在线资产
  • GET /api/assets/offline - 获取离线资产
  • PUT /api/assets/{id} - 更新资产信息
  • DELETE /api/assets/{id} - 删除资产
  • GET /api/assets/statistics - 获取资产统计

端口扫描 API

  • POST /api/scan/ports/{ip} - 扫描指定 IP 的端口
  • GET /api/scan/ports/{ip} - 获取指定 IP 的端口信息
  • GET /api/scan/ports - 获取所有开放端口

Docker API

  • POST /api/scan/docker - 扫描 Docker 容器
  • GET /api/scan/docker - 获取所有容器
  • GET /api/scan/docker/running - 获取运行中的容器

服务清单 API

  • GET /api/services - 获取所有服务
  • POST /api/services - 创建服务
  • PUT /api/services/{id} - 更新服务
  • DELETE /api/services/{id} - 删除服务
  • GET /api/services/statistics - 获取服务统计

开发指南

后端开发规范

  1. 分层结构

    • Controller:接收请求,参数校验
    • Service:业务逻辑处理
    • Mapper:数据访问
    • Entity:数据库实体
    • DTO:数据传输对象
  2. 统一响应格式

Result<Asset> result = Result.success(asset);
  1. 全局异常处理
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public Result<?> handleException(Exception e) {
        return Result.error(500, e.getMessage());
    }
}

前端开发规范

  1. 组合式 API
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { getAssets } from '@/api/asset'

const assets = ref<Asset[]>([])

onMounted(async () => {
  assets.value = await getAssets()
})
</script>
  1. API 请求封装
import request from '@/utils/request'

export const getAssets = () => {
  return request<Asset[]>({
    url: '/assets',
    method: 'get'
  })
}
  1. Pinia 状态管理
export const useAppStore = defineStore('app', () => {
  const loading = ref(false)
  const setLoading = (value: boolean) => {
    loading.value = value
  }
  return { loading, setLoading }
})

注意事项

  1. Docker 权限:后端需要访问 Docker socket,确保有相应权限
  2. 网络扫描:网络扫描可能需要一些时间,请耐心等待
  3. 防火墙:确保防火墙允许访问所需的端口
  4. 资源限制:大量 IP 扫描会消耗较多系统资源
  5. 中间件访问:确保能访问公共中间件服务

许可证

MIT License

About

家庭资产管理平台 - 支持资产扫描、端口监控、Docker容器管理和自动化部署

Language
Java65.4%
Vue26.1%
JavaScript3.9%
TypeScript2.9%
Others1.7%