Files
lan-manager/README.md

137 lines
4.7 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
## 技术栈
- **后端**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
```
## Debian 12 一键部署
```bash
# 1. 解压部署包
tar -xzf deploy/lan-manager-debian12.tar.gz
cd lan-manager-debian12
# 2. 编辑环境变量(务必修改 ADMIN_PASS 和 ENCRYPT_KEY
nano lan-manager.env
# 3. 执行安装脚本
sudo bash install.sh
```
安装完成后服务自动启动,通过 `systemctl status 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/
├── deploy/ # Debian 12 部署包
├── docs/ # 需求文档与计划
├── scripts/ # systemd 服务示例
├── server/ # Go 后端
│ ├── main.go
│ ├── config/
│ ├── db/
│ ├── handlers/
│ ├── middleware/
│ ├── models/
│ ├── services/
│ └── static/ # 嵌入的前端构建产物
├── web/ # Vue 前端
│ ├── src/
│ └── dist/
├── Makefile
├── go.mod
└── README.md
```
## 注意事项
- **生产环境务必修改**`ADMIN_PASS``SESSION_SECRET``ENCRYPT_KEY`
- **SSH 密码安全**:数据库中 SSH 密码经 AES-256-GCM 加密存储API 永不返回密码明文
- **自动同步 SSH**:若机器已保存 SSH 用户名和密码,后台每次 Ping 检测成功后会自动通过 SSH 抓取系统信息并同步到数据库
- **在线检测机制**:每分钟对所有机器 IP 执行 ICMP Ping3 秒内无响应视为离线
- **磁盘显示策略**:机器列表卡片仅展示 `/` 根分区占用;详情页展示所有真实磁盘分区