bab2433c1348c98757929b0629c22104384d4e42
局域网机器管理后台 (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(密码认证)
快速开始
开发模式
# 1. 安装前端依赖并启动开发服务器
cd web
npm install
npm run dev
# 2. 启动后端(在项目根目录另开终端)
cd server
go run .
前端开发服务器默认在 http://localhost:5173,并代理 /api 到 http://127.0.0.1:8080。
生产构建
make build
# 生成的 lan-manager 可直接运行
./lan-manager
Docker 部署(推荐)
方式一:使用 Docker Compose(推荐)
# 1. 克隆项目后,直接启动
docker-compose up -d
# 2. 查看日志
docker-compose logs -f
# 3. 停止服务
docker-compose down
服务将运行在 http://localhost:8080。
数据持久化在 ./data/ 目录(通过 volume 挂载)。
方式二:手动构建和运行
# 构建镜像
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 镜像的场景:
# 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 反向代理示例
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 Ping,3 秒内无响应视为离线
- 磁盘显示策略:机器列表卡片仅展示
/根分区占用;详情页展示所有真实磁盘分区
Docker 部署注意事项
- 数据持久化:通过 volume 挂载
./data目录到容器,确保数据在容器重建后不丢失 - 网络访问:容器需要访问宿主机网络或目标局域网,默认使用 bridge 网络模式
- Ping 权限:容器内可能需要
NET_RAW能力才能执行 ICMP ping,已在 Dockerfile 中通过setcap配置 - 环境变量:建议通过
.env文件或 Docker Compose 管理敏感配置 - 静态文件:使用
WEB_STATIC_PATH环境变量时,需确保路径在容器内存在且可读
Description
Languages
Vue
58.3%
Go
37.6%
JavaScript
2.8%
Dockerfile
0.8%
HTML
0.3%
Other
0.2%