Files
lan-manager/README.md
shirainbown 73ca3ee65a feat: UI 全面升级,新增 Dashboard 仪表盘
- 新增 Dashboard.vue 首页(统计卡片、系统分布、在线率趋势)
- 路由调整:根路径 / 默认重定向到 /dashboard
- 新增品牌图标(logo.svg、favicon)
- 登录页、侧边栏、拓扑图视觉增强
- 全局 CSS 变量重定义(GitHub 风格)
- 拓扑图新增布局切换和过滤控制
- 更新 README.md 部署指导,删除旧二进制部署说明
2026-06-19 00:28:00 +08:00

196 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 局域网机器管理后台 (LAN Manager)
一个轻量的局域网机器管理后台,用于集中管理多台虚拟机/主机20 台以内),展示机器信息、服务部署情况及机器之间的转发/依赖关系。
## 功能特性
- **访客模式**无需登录可查看机器在线状态、已同步的系统数据CPU/内存/磁盘等)、服务列表(脱敏显示)
- **管理员模式**:登录后可查看完整信息(含 IP、MAC、拓扑关系执行增删改、SSH 信息获取、导入导出等操作
- **机器管理**主机名、IP、MAC、操作系统、备注、在线状态自动检测
- **服务管理**:为每台机器维护多个服务条目(名称、端口、协议、备注)
- **关系管理**:建立机器之间的端口转发、依赖、主从等关系
- **拓扑可视化**:基于 AntV G6 的力导向图,支持拖拽、缩放
- **SSH 系统信息获取**支持手动触发也可配置自动同步SSH 密码采用 AES-256-GCM 加密存储
- **数据导入/导出**JSON 格式完整备份与恢复
- **操作日志**:记录所有增删改操作及来源 IP
- **PVE 虚拟机管理**:支持 Proxmox VE 节点管理、VM 状态查看、远程启停操作
## 技术栈
- **后端**Go 1.21+ + Gin + SQLite (modernc.org/sqlite)
- **前端**Vue 3 + Vite + Element Plus + AntV G6
- **认证**Session/Cookie
- **SSH**golang.org/x/crypto/ssh密码认证
## 快速开始
### 开发模式
```bash
# 1. 安装前端依赖并启动开发服务器
cd web
npm install
npm run dev
# 2. 启动后端(在项目根目录另开终端)
cd server
go run .
```
前端开发服务器默认在 `http://localhost:5173`,并代理 `/api``http://127.0.0.1:8080`
### 生产构建
```bash
make build
# 生成的 lan-manager 可直接运行
./lan-manager
```
## Docker 部署(推荐)
### 方式一:使用 Docker Compose推荐
```bash
# 1. 克隆项目后,直接启动
docker-compose up -d
# 2. 查看日志
docker-compose logs -f
# 3. 停止服务
docker-compose down
```
服务将运行在 `http://localhost:8080`
数据持久化在 `./data/` 目录(通过 volume 挂载)。
### 方式二:手动构建和运行
```bash
# 构建镜像
docker build -t lan-manager .
# 运行容器
docker run -d \
--name lan-manager \
-p 8080:8080 \
-v $(pwd)/data:/app/data \
-e ADMIN_PASS=your-secure-password \
-e ENCRYPT_KEY=your-encrypt-key \
lan-manager
```
### 方式三:服务器部署(本地构建二进制 + 服务器构建镜像)
适用于服务器网络较慢、无法直接拉取 node/golang 镜像的场景:
```bash
# 1. 本地交叉编译 Linux 二进制
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o server/lan-manager-linux ./server/main.go
# 2. 本地构建前端
cd web && npm run build
# 3. 将二进制和 dist/ 上传到服务器
cp server/lan-manager-linux /server/path/
cp -r web/dist /server/path/
# 4. 在服务器上构建镜像(只需 alpine 基础镜像,无需 node/golang
cd /server/path
docker build -t lan-manager .
# 5. 运行容器
docker run -d \
--name lan-manager \
-p 8080:8080 \
-v $(pwd)/data:/app/data \
-e ADMIN_PASS=your-secure-password \
-e ENCRYPT_KEY=your-encrypt-key \
-e WEB_STATIC_PATH=/app/static \
--restart unless-stopped \
lan-manager
```
## Nginx 反向代理示例
```nginx
server {
listen 443 ssl;
server_name aa.cn;
ssl_certificate /path/to/aa.cn.crt;
ssl_certificate_key /path/to/aa.cn.key;
client_max_body_size 50M;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 60s;
}
}
```
## 环境变量
| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `HOST` | `0.0.0.0` | 监听地址 |
| `PORT` | `8080` | 监听端口 |
| `DB_PATH` | `./data/lan-manager.db` | SQLite 数据库路径 |
| `DATA_DIR` | `./data` | 数据目录 |
| `ADMIN_USER` | `admin` | 管理员用户名 |
| `ADMIN_PASS` | `admin` | 管理员密码(生产环境务必修改) |
| `SESSION_SECRET` | `lan-manager-secret-change-in-production` | Session 密钥 |
| `ENCRYPT_KEY` | `lan-manager-default-key-change-in-production` | SSH 密码 AES 加密密钥 |
| `PING_INTERVAL` | `60` | Ping 检测间隔(秒) |
| `SSH_TIMEOUT` | `10` | SSH 连接超时(秒) |
| `LOG_RETENTION_DAYS` | `0` | 日志保留天数0 表示永久保留) |
| `UI_REFRESH_INTERVAL` | `10000` | 前端页面自动刷新间隔毫秒0 表示关闭) |
| `WEB_STATIC_PATH` | `""` | 外置静态文件目录(空则使用 embed |
## 项目结构
```
lan-manager/
├── server/ # Go 后端
│ ├── main.go
│ ├── config/
│ ├── db/
│ ├── handlers/
│ ├── middleware/
│ ├── models/
│ ├── services/
│ └── static/ # 嵌入的前端构建产物
├── web/ # Vue 前端
│ ├── src/
│ ├── public/ # 静态资源logo、favicon 等)
│ └── dist/ # 构建产物
├── Dockerfile # Docker 构建文件
├── docker-compose.yml # Docker Compose 配置
├── Makefile
├── go.mod
└── README.md
```
## 注意事项
- **生产环境务必修改**`ADMIN_PASS``SESSION_SECRET``ENCRYPT_KEY`
- **SSH 密码安全**:数据库中 SSH 密码经 AES-256-GCM 加密存储API 永不返回密码明文
- **自动同步 SSH**:若机器已保存 SSH 用户名和密码,后台每次 Ping 检测成功后会自动通过 SSH 抓取系统信息并同步到数据库
- **在线检测机制**:每分钟对所有机器 IP 执行 ICMP Ping3 秒内无响应视为离线
- **磁盘显示策略**:机器列表卡片仅展示 `/` 根分区占用;详情页展示所有真实磁盘分区
## Docker 部署注意事项
1. **数据持久化**:通过 volume 挂载 `./data` 目录到容器,确保数据在容器重建后不丢失
2. **网络访问**:容器需要访问宿主机网络或目标局域网,默认使用 bridge 网络模式
3. **Ping 权限**:容器内可能需要 `NET_RAW` 能力才能执行 ICMP ping已在 Dockerfile 中通过 `setcap` 配置
4. **环境变量**:建议通过 `.env` 文件或 Docker Compose 管理敏感配置
5. **静态文件**:使用 `WEB_STATIC_PATH` 环境变量时,需确保路径在容器内存在且可读