chore: 清理二进制部署相关文件,项目已全面转向 Docker 部署
This commit is contained in:
@@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"permissions": {
|
|
||||||
"allow": [
|
|
||||||
"Read(//Users/songshiyu/fsdownload/**)",
|
|
||||||
"Read(//Users/songshiyu/Downloads/**)",
|
|
||||||
"WebFetch(docs.qwen.ai)",
|
|
||||||
"WebFetch(github.com)",
|
|
||||||
"Bash(qwen *)",
|
|
||||||
"Bash(find *)",
|
|
||||||
"Bash(npm *)",
|
|
||||||
"Bash(ls *)",
|
|
||||||
"Bash(npx *)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"$version": 3
|
|
||||||
}
|
|
||||||
Binary file not shown.
@@ -1,175 +0,0 @@
|
|||||||
# LAN Manager Debian 12 部署包
|
|
||||||
|
|
||||||
本包包含 LAN Manager 的 Linux amd64 编译二进制、systemd 服务文件及一键安装脚本。前端资源已静态嵌入二进制中,无需额外安装 Node.js 或 Nginx 即可直接运行。
|
|
||||||
|
|
||||||
## 系统要求
|
|
||||||
|
|
||||||
- Debian 12 (bookworm)
|
|
||||||
- systemd
|
|
||||||
- 不需要安装 SQLite(使用纯 Go 实现的 SQLite 驱动,无需 CGO)
|
|
||||||
|
|
||||||
## 包内文件说明
|
|
||||||
|
|
||||||
```
|
|
||||||
lan-manager # 服务端可执行文件(已嵌入前端)
|
|
||||||
lan-manager.env # 环境变量配置文件
|
|
||||||
lan-manager.service # systemd 服务单元
|
|
||||||
install.sh # 一键安装脚本
|
|
||||||
uninstall.sh # 一键卸载脚本
|
|
||||||
README.md # 本说明文件
|
|
||||||
```
|
|
||||||
|
|
||||||
## 快速安装
|
|
||||||
|
|
||||||
1. 将本包上传到 Debian 12 服务器(例如 `/root/lan-manager-debian12/`)
|
|
||||||
2. 进入目录并执行安装脚本:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd lan-manager-debian12
|
|
||||||
sudo bash install.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
安装脚本会完成以下操作:
|
|
||||||
- 创建系统用户 `lanmgr`
|
|
||||||
- 将程序安装到 `/opt/lan-manager/`
|
|
||||||
- 创建数据目录 `/opt/lan-manager/data/`
|
|
||||||
- 注册并启动 systemd 服务 `lan-manager`
|
|
||||||
- 设置开机自启
|
|
||||||
|
|
||||||
## 安装后验证
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 查看服务状态
|
|
||||||
systemctl status lan-manager
|
|
||||||
|
|
||||||
# 查看实时日志
|
|
||||||
journalctl -u lan-manager -f
|
|
||||||
|
|
||||||
# 测试访问
|
|
||||||
curl http://127.0.0.1:8080/api/auth/me
|
|
||||||
```
|
|
||||||
|
|
||||||
## 配置修改
|
|
||||||
|
|
||||||
所有配置通过 `/opt/lan-manager/lan-manager.env` 中的环境变量管理。常用配置项:
|
|
||||||
|
|
||||||
| 变量 | 说明 | 默认值 |
|
|
||||||
|------|------|--------|
|
|
||||||
| `HOST` | 监听地址 | `0.0.0.0` |
|
|
||||||
| `PORT` | 监听端口 | `8080` |
|
|
||||||
| `DATA_DIR` | 数据目录 | `/opt/lan-manager/data` |
|
|
||||||
| `DB_PATH` | SQLite 数据库文件路径 | `/opt/lan-manager/data/lan-manager.db` |
|
|
||||||
| `ADMIN_USER` | 管理员用户名 | `admin` |
|
|
||||||
| `ADMIN_PASS` | 管理员密码 | `changeme` |
|
|
||||||
| `SESSION_SECRET` | Session Cookie 密钥 | `lan-manager-secret-change-in-production` |
|
|
||||||
| `PING_INTERVAL` | 自动 Ping/SSH 采集间隔(秒) | `60` |
|
|
||||||
| `UI_REFRESH_INTERVAL` | 前端自动刷新间隔(毫秒) | `10000` |
|
|
||||||
|
|
||||||
修改配置后重启服务生效:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo systemctl restart lan-manager
|
|
||||||
```
|
|
||||||
|
|
||||||
## 防火墙与公网访问
|
|
||||||
|
|
||||||
如果需要通过公网访问,建议开放端口或使用 Nginx 反向代理:
|
|
||||||
|
|
||||||
**方式 A:直接开放端口**
|
|
||||||
```bash
|
|
||||||
sudo ufw allow 8080/tcp
|
|
||||||
```
|
|
||||||
|
|
||||||
**方式 B:Nginx 反向代理(推荐)**
|
|
||||||
```nginx
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name your-domain.com;
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## 安全提醒
|
|
||||||
|
|
||||||
- **首次部署后,请立即修改 `ADMIN_PASS` 和 `SESSION_SECRET`。**
|
|
||||||
- 默认情况下访客可直接查看机器列表,但无法进入机器详情页;后端 API 已对详情接口做了权限拦截。
|
|
||||||
- 建议使用 HTTPS(配合 Nginx + Let's Encrypt/certbot)。
|
|
||||||
|
|
||||||
## 数据备份与恢复(升级前必做)
|
|
||||||
|
|
||||||
系统已内置 JSON 全量导出/导入功能,可完整保留机器、服务、关系数据,以及 SSH 配置信息。
|
|
||||||
|
|
||||||
### 方式 A:Web 界面(管理员登录后)
|
|
||||||
进入 **机器列表** 页面,点击右上角的:
|
|
||||||
- **导出数据**:下载 `lan-manager-backup-YYYYMMdd.json`
|
|
||||||
- **导入数据**:选择之前下载的备份文件,系统会以 **覆盖模式** 恢复全部数据
|
|
||||||
|
|
||||||
### 方式 B:命令行
|
|
||||||
```bash
|
|
||||||
# 导出(需要管理员 Cookie 或 session)
|
|
||||||
curl -b your-session-cookie http://localhost:8080/api/export > lan-manager-backup.json
|
|
||||||
|
|
||||||
# 导入(覆盖模式,会清空现有数据后恢复)
|
|
||||||
curl -b your-session-cookie -X POST http://localhost:8080/api/import \
|
|
||||||
-F "file=@lan-manager-backup.json" \
|
|
||||||
-F "mode=overwrite"
|
|
||||||
```
|
|
||||||
|
|
||||||
### ⚠️ 备份文件安全提醒
|
|
||||||
导出文件中 **包含 SSH 密码**(已按数据库中的密文/明文形式导出)。请妥善保管备份文件,避免泄露。
|
|
||||||
|
|
||||||
## 升级步骤
|
|
||||||
|
|
||||||
1. **先导出数据备份**(见上文)
|
|
||||||
2. 停止服务:
|
|
||||||
```bash
|
|
||||||
sudo systemctl stop lan-manager
|
|
||||||
```
|
|
||||||
3. 替换二进制:
|
|
||||||
```bash
|
|
||||||
sudo cp /path/to/new/lan-manager /opt/lan-manager/
|
|
||||||
sudo chown lanmgr:lanmgr /opt/lan-manager/lan-manager
|
|
||||||
sudo chmod +x /opt/lan-manager/lan-manager
|
|
||||||
```
|
|
||||||
4. 启动服务:
|
|
||||||
```bash
|
|
||||||
sudo systemctl start lan-manager
|
|
||||||
```
|
|
||||||
5. **验证数据完整性**,如有问题可执行导入恢复。
|
|
||||||
|
|
||||||
## 卸载
|
|
||||||
|
|
||||||
如果你想完全卸载 LAN Manager,使用自带的卸载脚本即可:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd /root/lan-manager-debian12 # 或你存放安装包的目录
|
|
||||||
sudo bash uninstall.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
卸载脚本会执行以下操作:
|
|
||||||
- 停止并禁用 `lan-manager` systemd 服务
|
|
||||||
- 删除 `/etc/systemd/system/lan-manager.service`
|
|
||||||
- 删除程序及数据目录 `/opt/lan-manager/`
|
|
||||||
- 删除运行用户 `lanmgr`
|
|
||||||
- 提示清理防火墙规则(如有)
|
|
||||||
|
|
||||||
**⚠️ 注意**:卸载会一并删除 `/opt/lan-manager/data/` 下的 SQLite 数据库。如需保留历史数据,请提前备份:
|
|
||||||
```bash
|
|
||||||
cp /opt/lan-manager/data/lan-manager.db /backup/lan-manager.db
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 常见问题
|
|
||||||
|
|
||||||
**Q: 服务启动失败,日志提示端口被占用?**
|
|
||||||
A: 修改 `lan-manager.env` 中的 `PORT` 为其他端口,然后 `systemctl restart lan-manager`。
|
|
||||||
|
|
||||||
**Q: 如何备份数据?**
|
|
||||||
A: 直接复制 SQLite 数据库文件即可:`cp /opt/lan-manager/data/lan-manager.db /backup/lan-manager.db`。
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
INSTALL_DIR="/opt/lan-manager"
|
|
||||||
SERVICE_NAME="lan-manager"
|
|
||||||
USER_NAME="lanmgr"
|
|
||||||
|
|
||||||
echo "=== LAN Manager Debian 12 安装脚本 ==="
|
|
||||||
|
|
||||||
# 1. 检查 root 权限
|
|
||||||
if [ "$EUID" -ne 0 ]; then
|
|
||||||
echo "请使用 root 权限运行:sudo bash install.sh"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 2. 创建用户(如果不存在)
|
|
||||||
if ! id "$USER_NAME" &>/dev/null; then
|
|
||||||
echo "[1/7] 创建运行用户 $USER_NAME ..."
|
|
||||||
useradd --system --no-create-home --shell /usr/sbin/nologin "$USER_NAME"
|
|
||||||
else
|
|
||||||
echo "[1/7] 用户 $USER_NAME 已存在,跳过"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 3. 停止服务(如果正在运行)以便覆盖二进制
|
|
||||||
echo "[2/7] 停止现有服务(如果正在运行)..."
|
|
||||||
if systemctl is-active --quiet "$SERVICE_NAME" 2>/dev/null; then
|
|
||||||
systemctl stop "$SERVICE_NAME"
|
|
||||||
sleep 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 4. 复制程序文件
|
|
||||||
echo "[3/7] 复制程序文件到 $INSTALL_DIR ..."
|
|
||||||
mkdir -p "$INSTALL_DIR"
|
|
||||||
cp lan-manager "$INSTALL_DIR/"
|
|
||||||
cp lan-manager.env "$INSTALL_DIR/"
|
|
||||||
|
|
||||||
# 5. 创建数据目录并授权
|
|
||||||
echo "[4/7] 创建数据目录 ..."
|
|
||||||
mkdir -p "$INSTALL_DIR/data"
|
|
||||||
chown -R "$USER_NAME:$USER_NAME" "$INSTALL_DIR"
|
|
||||||
chmod +x "$INSTALL_DIR/lan-manager"
|
|
||||||
|
|
||||||
# 6. 安装 systemd 服务
|
|
||||||
echo "[5/7] 安装 systemd 服务 ..."
|
|
||||||
cp lan-manager.service /etc/systemd/system/
|
|
||||||
chmod 644 /etc/systemd/system/lan-manager.service
|
|
||||||
systemctl daemon-reload
|
|
||||||
|
|
||||||
# 7. 启动并设置开机自启
|
|
||||||
echo "[6/7] 启动服务并设置开机自启 ..."
|
|
||||||
systemctl enable --now lan-manager
|
|
||||||
|
|
||||||
# 8. 检查状态
|
|
||||||
echo "[7/7] 检查服务状态 ..."
|
|
||||||
sleep 2
|
|
||||||
if systemctl is-active --quiet lan-manager; then
|
|
||||||
echo "✅ 服务已正常启动"
|
|
||||||
else
|
|
||||||
echo "❌ 服务启动失败,请查看日志:journalctl -u lan-manager -n 50"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "=== 安装完成 ==="
|
|
||||||
echo "访问地址: http://$(hostname -I | awk '{print $1}'):8080"
|
|
||||||
echo ""
|
|
||||||
echo "⚠️ 重要提示:"
|
|
||||||
echo " 1. 默认管理员账号: admin / changeme"
|
|
||||||
echo " 2. 请务必修改 $INSTALL_DIR/lan-manager.env 中的 ADMIN_PASS 和 SESSION_SECRET"
|
|
||||||
echo " 3. 修改配置后执行: systemctl restart lan-manager"
|
|
||||||
echo " 4. 查看日志: journalctl -u lan-manager -f"
|
|
||||||
echo " 5. 如需开放防火墙端口: ufw allow 8080/tcp"
|
|
||||||
echo ""
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
# LAN Manager Environment Configuration
|
|
||||||
# 服务监听地址与端口
|
|
||||||
HOST=0.0.0.0
|
|
||||||
PORT=8080
|
|
||||||
|
|
||||||
# 数据目录与数据库路径(建议放在 /opt/lan-manager/data)
|
|
||||||
DATA_DIR=/opt/lan-manager/data
|
|
||||||
DB_PATH=/opt/lan-manager/data/lan-manager.db
|
|
||||||
|
|
||||||
# 后台自动 Ping/SSH 同步间隔(秒)
|
|
||||||
PING_INTERVAL=60
|
|
||||||
SSH_TIMEOUT=10
|
|
||||||
|
|
||||||
# 管理员账号(首次登录后务必修改)
|
|
||||||
ADMIN_USER=admin
|
|
||||||
ADMIN_PASS=changeme
|
|
||||||
|
|
||||||
# Session 密钥(生产环境务必修改,越长越安全)
|
|
||||||
SESSION_SECRET=lan-manager-secret-change-in-production
|
|
||||||
|
|
||||||
# 日志保留天数(0 表示永久保留)
|
|
||||||
LOG_RETENTION_DAYS=30
|
|
||||||
|
|
||||||
# 前端自动刷新间隔(毫秒,0 表示关闭)
|
|
||||||
UI_REFRESH_INTERVAL=10000
|
|
||||||
|
|
||||||
# 密码加密密钥(生产环境务必修改,任意长度字符串即可)
|
|
||||||
ENCRYPT_KEY=lan-manager-secret-change-in-production
|
|
||||||
|
|
||||||
# 可选:外部静态文件路径(默认使用嵌入的前端,无需修改)
|
|
||||||
# WEB_STATIC_PATH=/opt/lan-manager/static
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=LAN Manager
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=lanmgr
|
|
||||||
Group=lanmgr
|
|
||||||
WorkingDirectory=/opt/lan-manager
|
|
||||||
ExecStart=/opt/lan-manager/lan-manager
|
|
||||||
EnvironmentFile=/opt/lan-manager/lan-manager.env
|
|
||||||
Restart=always
|
|
||||||
RestartSec=5
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
INSTALL_DIR="/opt/lan-manager"
|
|
||||||
SERVICE_NAME="lan-manager"
|
|
||||||
USER_NAME="lanmgr"
|
|
||||||
|
|
||||||
echo "=== LAN Manager 卸载脚本 ==="
|
|
||||||
|
|
||||||
if [ "$EUID" -ne 0 ]; then
|
|
||||||
echo "请使用 root 权限运行:sudo bash uninstall.sh"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 1. 停止并禁用服务
|
|
||||||
if systemctl list-units --type=service --all | grep -q "$SERVICE_NAME"; then
|
|
||||||
echo "[1/5] 停止并禁用 systemd 服务 ..."
|
|
||||||
systemctl stop "$SERVICE_NAME" 2>/dev/null || true
|
|
||||||
systemctl disable "$SERVICE_NAME" 2>/dev/null || true
|
|
||||||
else
|
|
||||||
echo "[1/5] 服务不存在,跳过"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 2. 删除 systemd 服务文件
|
|
||||||
if [ -f "/etc/systemd/system/$SERVICE_NAME.service" ]; then
|
|
||||||
echo "[2/5] 删除 systemd 服务文件 ..."
|
|
||||||
rm -f "/etc/systemd/system/$SERVICE_NAME.service"
|
|
||||||
systemctl daemon-reload
|
|
||||||
else
|
|
||||||
echo "[2/5] systemd 服务文件不存在,跳过"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 3. 删除程序和数据目录
|
|
||||||
if [ -d "$INSTALL_DIR" ]; then
|
|
||||||
echo "[3/5] 删除程序目录 $INSTALL_DIR ..."
|
|
||||||
rm -rf "$INSTALL_DIR"
|
|
||||||
else
|
|
||||||
echo "[3/5] 程序目录不存在,跳过"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 4. 删除用户和组
|
|
||||||
if id "$USER_NAME" &>/dev/null; then
|
|
||||||
echo "[4/5] 删除运行用户 $USER_NAME ..."
|
|
||||||
userdel "$USER_NAME" 2>/dev/null || true
|
|
||||||
else
|
|
||||||
echo "[4/5] 用户 $USER_NAME 不存在,跳过"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 5. 清理防火墙规则(可选)
|
|
||||||
echo "[5/5] 检查防火墙规则 ..."
|
|
||||||
if command -v ufw &>/dev/null && ufw status | grep -q "8080/tcp"; then
|
|
||||||
echo " 发现 ufw 规则 8080/tcp,建议手动删除:ufw delete allow 8080/tcp"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "=== 卸载完成 ==="
|
|
||||||
echo "如需保留数据库备份,请确认已备份 /opt/lan-manager/data/lan-manager.db"
|
|
||||||
echo ""
|
|
||||||
67
docs/plan.md
67
docs/plan.md
@@ -1,67 +0,0 @@
|
|||||||
# 局域网机器管理后台 — 实现计划
|
|
||||||
|
|
||||||
## 技术选型
|
|
||||||
|
|
||||||
| 层 | 技术 |
|
|
||||||
|---|---|
|
|
||||||
| 后端 | Go + Gin |
|
|
||||||
| 前端 | Vue 3 + Vite + Element Plus + AntV G6 |
|
|
||||||
| 数据库 | SQLite (modernc.org/sqlite,纯 Go,无需 CGO) |
|
|
||||||
| 认证 | 预设用户名密码 + Session/Cookie |
|
|
||||||
| SSH | golang.org/x/crypto/ssh(仅密码认证) |
|
|
||||||
| Ping | `golang.org/x/net/icmp` + 系统 `/bin/ping` 命令回退 |
|
|
||||||
|
|
||||||
## 项目结构
|
|
||||||
|
|
||||||
```
|
|
||||||
lan-manager/
|
|
||||||
├── server/
|
|
||||||
│ ├── main.go # 入口
|
|
||||||
│ ├── config/ # 配置管理(支持配置文件 + 环境变量)
|
|
||||||
│ ├── models/ # 数据模型
|
|
||||||
│ ├── db/ # 数据库 + migration
|
|
||||||
│ ├── handlers/ # HTTP handlers
|
|
||||||
│ ├── services/ # 业务逻辑 (auth, ping, ssh, import/export)
|
|
||||||
│ └── middleware/ # CORS, 认证, 日志
|
|
||||||
├── web/ # Vue 前端
|
|
||||||
│ └── src/
|
|
||||||
├── scripts/
|
|
||||||
│ └── lan-manager.service # Systemd 服务示例
|
|
||||||
├── go.mod
|
|
||||||
├── go.sum
|
|
||||||
├── Makefile
|
|
||||||
└── README.md
|
|
||||||
```
|
|
||||||
|
|
||||||
## 实施步骤
|
|
||||||
|
|
||||||
### Phase 1: 后端基础
|
|
||||||
1. 初始化 Go 项目 + 依赖(Gin, modernc.org/sqlite, crypto/ssh)
|
|
||||||
2. 配置管理:支持配置文件 + 环境变量(HOST/PORT/DB_PATH/ADMIN_USER/ADMIN_PASS 等)
|
|
||||||
3. SQLite 数据库 + 表创建(含 machines 扩展字段 cpu_info/memory_info/disk_info/uptime/listen_ports/ssh_synced_at)
|
|
||||||
4. 数据模型定义
|
|
||||||
5. 基础 CRUD API (machines, services, relationships)
|
|
||||||
6. 认证模块:登录/登出/Session 中间件,区分访客和管理员权限
|
|
||||||
|
|
||||||
### Phase 2: 核心业务
|
|
||||||
7. Ping 定时检测服务(1 分钟间隔),Linux 上优先使用系统 ping 命令,避免权限问题
|
|
||||||
8. SSH 系统信息获取(仅密码认证,不保存凭据,单次有效),结果支持同步到机器记录
|
|
||||||
9. 操作日志中间件(记录增删改,含用户名)
|
|
||||||
10. 导入/导出 API(JSON 格式)
|
|
||||||
11. 健康检查接口 `/api/health`
|
|
||||||
|
|
||||||
### Phase 3: 前端
|
|
||||||
12. Vue 3 项目初始化 + Element Plus + 路由(Vue Router)
|
|
||||||
13. 登录页面
|
|
||||||
14. 机器列表页(访客:脱敏显示 IP/MAC/备注/关系)
|
|
||||||
15. 机器详情页(访客:隐藏敏感字段和 SSH 入口;管理员:完整功能)
|
|
||||||
16. 拓扑图页(AntV G6,仅管理员可访问)
|
|
||||||
17. 操作日志页(仅管理员)
|
|
||||||
18. 导入/导出功能(仅管理员)
|
|
||||||
|
|
||||||
### Phase 4: 整合与部署
|
|
||||||
19. Go embed 打包前端静态文件 + 支持外置 `WEB_STATIC_PATH`
|
|
||||||
20. 编写 Makefile(含 Linux amd64 交叉编译)
|
|
||||||
21. 编写 Systemd 服务示例脚本
|
|
||||||
22. 测试 + 修复
|
|
||||||
23. README 编写(含 Linux 部署说明)
|
|
||||||
@@ -1,385 +0,0 @@
|
|||||||
# 局域网机器管理后台 — 需求文档
|
|
||||||
|
|
||||||
## 一、项目概述
|
|
||||||
|
|
||||||
搭建一个本地局域网机器管理后台,用于集中管理多台虚拟机/主机(20 台以内),直观展示机器信息、服务部署情况及机器之间的转发/依赖关系,解决"机器多、IP 多、服务分散、容易遗忘"的痛点。
|
|
||||||
|
|
||||||
系统分为**访客模式**和**管理员模式**:
|
|
||||||
- **访客**:无需登录,可查看机器的在线状态、已同步的系统数据(CPU/内存/磁盘等)、服务列表,但无法查看 IP 地址、MAC 地址、拓扑关系,也无法执行任何管理操作。
|
|
||||||
- **管理员**:登录后可查看完整信息(含 IP、MAC、拓扑关系),执行增删改、SSH 信息获取、导入导出等所有操作。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 二、核心功能模块
|
|
||||||
|
|
||||||
### 1. 用户认证
|
|
||||||
|
|
||||||
- **管理员账号**:预设一组用户名/密码,通过环境变量或配置文件初始化
|
|
||||||
- **认证方式**:Session/Cookie 或简单 Token
|
|
||||||
- **未登录用户**:自动降级为访客模式,仅开放只读脱敏接口
|
|
||||||
|
|
||||||
### 2. 机器管理(增删改查)
|
|
||||||
|
|
||||||
| 字段 | 说明 | 是否必填 | 访客可见 |
|
|
||||||
|------|------|---------|---------|
|
|
||||||
| 主机名/别名 | 用户自定义的易记名称,如 `web-server-01` | 是 | ✅ 是 |
|
|
||||||
| IP 地址 | 机器在局域网中的固定 IP,如 `192.168.1.100` | 是 | ❌ 否(仅管理员) |
|
|
||||||
| MAC 地址 | 可选,用于辅助识别 | 否 | ❌ 否(仅管理员) |
|
|
||||||
| 操作系统 | Linux / Windows / macOS(可下拉选择 + 自定义) | 是 | ✅ 是 |
|
|
||||||
| 系统版本 | 如 `Ubuntu 22.04`、`Windows 11`、`macOS 14` | 否 | ✅ 是 |
|
|
||||||
| 备注/描述 | 自由文本,记录用途、负责人等信息 | 否 | ❌ 否(仅管理员) |
|
|
||||||
| 状态 | 在线 / 离线(自动检测) | 自动 | ✅ 是 |
|
|
||||||
| SSH 系统信息 | CPU / 内存 / 磁盘 / 运行时间等(手动触发获取,可同步到机器记录) | 按需 | ✅ 是(已同步的数据) |
|
|
||||||
| 创建时间 / 更新时间 | 系统自动记录 | 自动 | ❌ 否(仅管理员) |
|
|
||||||
|
|
||||||
### 3. 服务管理
|
|
||||||
|
|
||||||
- 每台机器可以关联**多个服务条目**
|
|
||||||
- 服务字段:
|
|
||||||
- **服务名称**(如 `nginx`、`frps`、`docker`、`mysql`、`redis` 等)
|
|
||||||
- **端口号**(如 `80`、`443`、`8080`)
|
|
||||||
- **协议**(TCP / UDP / HTTP / HTTPS)
|
|
||||||
- **备注**(自由描述,如 "反向代理到 192.168.1.50:8080")
|
|
||||||
- 服务类型支持**预设常用服务** + **自定义服务**
|
|
||||||
- **访客可见性**:访客可以看到服务名称、端口、协议,但**不可查看备注**(备注可能包含敏感 IP 或内部信息)
|
|
||||||
|
|
||||||
### 4. 机器关系管理
|
|
||||||
|
|
||||||
- 机器之间可以建立**连接关系**,用于表达端口转发、代理、依赖等
|
|
||||||
- 关系字段:
|
|
||||||
- **源机器** → **目标机器**
|
|
||||||
- **关系类型**(预设 + 自定义):
|
|
||||||
- `端口转发`(如 Nginx 反代、FRP 穿透)
|
|
||||||
- `依赖`(如 A 机器上的应用依赖 B 机器的数据库)
|
|
||||||
- `主从`(如主从复制、集群节点)
|
|
||||||
- `自定义`
|
|
||||||
- **端口信息**:源端口 → 目标端口(如 `8080 → 80`)
|
|
||||||
- **备注**:自由描述
|
|
||||||
- 关系应支持**双向可视化**(A→B 建立关系后,两边都能看到)
|
|
||||||
- **访客可见性**:❌ **完全不可见**,拓扑图和关系列表仅对管理员开放
|
|
||||||
|
|
||||||
### 5. 在线状态检测
|
|
||||||
|
|
||||||
- 定时对每台机器执行 **ICMP Ping** 检测
|
|
||||||
- 检测间隔:**1 分钟**
|
|
||||||
- 界面用颜色/图标直观展示在线状态:🟢 在线 / 🔴 离线
|
|
||||||
- **访客可见性**:✅ **可见**
|
|
||||||
|
|
||||||
### 6. SSH 系统信息获取(安全敏感)
|
|
||||||
|
|
||||||
- **不保存任何 SSH 凭据**(用户名、密码、密钥均不持久化)
|
|
||||||
- 仅支持 **密码认证**,不支持密钥认证
|
|
||||||
- **仅管理员可见和操作**:在机器详情页提供单独的按钮 **"获取系统信息"**
|
|
||||||
- 点击后弹窗要求输入 SSH **用户名**和**密码**
|
|
||||||
- 连接成功后获取以下信息并展示:
|
|
||||||
- 主机名、操作系统版本(精确)
|
|
||||||
- CPU 使用率 / 核心数
|
|
||||||
内存使用率 / 总量
|
|
||||||
- 磁盘使用率 / 各分区
|
|
||||||
- 运行时间(uptime)
|
|
||||||
- 监听中的端口列表
|
|
||||||
- **单次有效**:凭据仅在本次请求中使用,用完即销毁,不写入任何存储
|
|
||||||
- 获取到的信息可选择性地**同步到机器记录中**(如系统版本、CPU、内存、磁盘),同步后访客即可查看这些已缓存的数据
|
|
||||||
- SSH 连接超时时间:10 秒
|
|
||||||
|
|
||||||
### 7. 拓扑/关系图可视化
|
|
||||||
|
|
||||||
- 以**节点-连线图**的形式展示所有机器及其关系
|
|
||||||
- 节点颜色区分操作系统类型
|
|
||||||
- 连线标注关系类型和端口号
|
|
||||||
- 支持拖拽、缩放、点击节点查看详情
|
|
||||||
- 使用 G6 或类似的图可视化库
|
|
||||||
- **访客可见性**:❌ **完全不可见**,仅管理员可访问拓扑图页面
|
|
||||||
|
|
||||||
### 8. 数据导入/导出
|
|
||||||
|
|
||||||
- 支持 **JSON 格式**完整导出(机器 + 服务 + 关系)
|
|
||||||
- 支持 **JSON 格式**导入(覆盖或追加模式)
|
|
||||||
- 导出文件名带时间戳,如 `lan-manager-backup-20260414.json`
|
|
||||||
- **管理员专属功能**,访客无权限
|
|
||||||
|
|
||||||
### 9. 操作日志
|
|
||||||
|
|
||||||
- 记录所有增删改操作:
|
|
||||||
- 操作时间
|
|
||||||
- 操作类型(创建 / 修改 / 删除)
|
|
||||||
- 操作对象(机器 / 服务 / 关系)
|
|
||||||
- 变更内容(旧值 → 新值)
|
|
||||||
- 来源 IP(请求的 IP)
|
|
||||||
- 操作用户(管理员用户名)
|
|
||||||
- 日志只增不改,可在独立页面查看
|
|
||||||
- 支持按时间/操作类型筛选
|
|
||||||
- **管理员专属功能**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 三、UI 界面设计
|
|
||||||
|
|
||||||
### 页面 1:机器列表(主页,访客/管理员共用)
|
|
||||||
|
|
||||||
```
|
|
||||||
┌─────────────────────────────────────────────────────────────────┐
|
|
||||||
│ 🔍 搜索 IP / 主机名 [Linux▼] │
|
|
||||||
├─────────────────────────────────────────────────────────────────┤
|
|
||||||
│ ┌─────┐ ┌─────────────┐ ┌───────────┐ ┌──────────┐ ┌────────┐ │
|
|
||||||
│ │状态 │ │ 主机名 │ │ IP* │ │ 系统 │ │ 服务数 │ │
|
|
||||||
│ ├─────┤ ├─────────────┤ ├───────────┤ ├──────────┤ ├────────┤ │
|
|
||||||
│ │ 🟢 │ │ nginx-proxy │ 192.168.*.* │ Linux │ 2 │ │
|
|
||||||
│ │ 🟢 │ │ db-master │ 192.168.*.* │ Linux │ 1 │ │
|
|
||||||
│ │ 🔴 │ │ dev-win │ 192.168.*.* │ Windows │ 3 │ │
|
|
||||||
│ │ 🟢 │ │ mac-build │ 192.168.*.* │ macOS │ 0 │ │
|
|
||||||
│ └─────┘ └─────────────┘ └───────────┘ └──────────┘ └────────┘ │
|
|
||||||
│ │
|
|
||||||
│ 底部导航: [机器列表] [拓扑图*] [操作日志*] [导入/导出*] [登录] │
|
|
||||||
└─────────────────────────────────────────────────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
> 注:带 `*` 的功能/数据仅管理员可见,访客访问时隐藏或显示为占位符(如 IP 显示为 `***`)。
|
|
||||||
|
|
||||||
- 支持按系统类型筛选、按 IP / 主机名搜索(访客搜索时只能匹配主机名,IP 对访客不可见)
|
|
||||||
- 点击某行进入**机器详情**
|
|
||||||
|
|
||||||
### 页面 2:机器详情(访客/管理员共用,但字段可见性不同)
|
|
||||||
|
|
||||||
```
|
|
||||||
┌──────────────────────────────────────────────────────────────┐
|
|
||||||
│ ← 返回 nginx-proxy │
|
|
||||||
├──────────────────────────────────────────────────────────────┤
|
|
||||||
│ 基本信息 [编辑*] │
|
|
||||||
│ IP: 192.168.1.1 (访客显示: ***.***.*.*) │
|
|
||||||
│ MAC: AA:BB:CC:DD:EE:FF (访客不可见) │
|
|
||||||
│ 系统: Linux (Ubuntu 22.04) │
|
|
||||||
│ 状态: 🟢 在线 │
|
|
||||||
│ 备注: 主网关入口 (访客不可见) │
|
|
||||||
│ │
|
|
||||||
│ SSH 系统信息(管理员触发后展示) │
|
|
||||||
│ CPU: 12% (4 cores) │
|
|
||||||
│ 内存: 2.1G / 8G (26%) │
|
|
||||||
│ 磁盘: / 45G / 100G (45%), /data 120G / 500G (24%) │
|
|
||||||
│ 运行时间: 15 days, 3:22 │
|
|
||||||
│ 监听端口: 22, 80, 443 │
|
|
||||||
│ [获取系统信息*] [同步到记录*] │
|
|
||||||
│ │
|
|
||||||
│ 服务列表 [+ 添加服务*] │
|
|
||||||
│ ┌─────────┬──────┬──────┬──────────────────────┐ │
|
|
||||||
│ │ 名称 │ 端口 │ 协议 │ 备注* │ │
|
|
||||||
│ ├─────────┼──────┼──────┼──────────────────────┤ │
|
|
||||||
│ │ nginx │ 80 │ TCP │ 反代入口 │ │
|
|
||||||
│ │ nginx │ 443 │ TCP │ HTTPS │ │
|
|
||||||
│ └─────────┴──────┴──────┴──────────────────────┘ │
|
|
||||||
│ │
|
|
||||||
│ 关联关系 [+ 添加关系*] │
|
|
||||||
│ → db-master :80 → :3306 [端口转发] [编辑*] [删除*] │
|
|
||||||
│ → frps :8080 → :8080 [依赖] [编辑*] [删除*] │
|
|
||||||
└──────────────────────────────────────────────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
> 注:带 `*` 的按钮/字段仅对管理员显示;关联关系区域对访客完全隐藏。
|
|
||||||
|
|
||||||
### 页面 3:拓扑图
|
|
||||||
|
|
||||||
- 力导向图(force-directed graph),节点可拖拽
|
|
||||||
- 节点颜色:Linux 蓝色、Windows 绿色、macOS 紫色
|
|
||||||
- 连线样式:
|
|
||||||
- 端口转发:实线 + 端口标注
|
|
||||||
- 依赖:虚线 + 文字标注
|
|
||||||
- 主从:带箭头实线
|
|
||||||
- 点击节点高亮关联连线,其余淡化
|
|
||||||
- **仅管理员可访问**,访客访问时重定向到机器列表或提示登录
|
|
||||||
|
|
||||||
### 页面 4:操作日志
|
|
||||||
|
|
||||||
```
|
|
||||||
┌──────────────────────────────────────────────────────────────────┐
|
|
||||||
│ [全部▼] [2026-04-14] [导出日志*] │
|
|
||||||
├──────────────────────────────────────────────────────────────────┤
|
|
||||||
│ 2026-04-14 15:30:22 admin 修改 机器 nginx-proxy │
|
|
||||||
│ 备注: "" → "主网关入口" │
|
|
||||||
│ 2026-04-14 15:28:01 admin 创建 服务 nginx on nginx-proxy │
|
|
||||||
│ 2026-04-14 14:55:10 admin 删除 关系 db-master → cache-01 │
|
|
||||||
│ 2026-04-14 14:30:00 admin 创建 机器 cache-01 │
|
|
||||||
└──────────────────────────────────────────────────────────────────┘
|
|
||||||
```
|
|
||||||
|
|
||||||
- **仅管理员可访问**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 四、技术选型
|
|
||||||
|
|
||||||
| 层 | 技术 | 说明 |
|
|
||||||
|---|---|---|
|
|
||||||
| 后端 | **Go 1.21+** | 单二进制部署,内置 net/http 或 Gin 框架,SSH 客户端用 golang.org/x/crypto/ssh |
|
|
||||||
| 前端 | **Vue 3 + Vite** | 轻量,配合 Element Plus / Naive UI 组件库 |
|
|
||||||
| 拓扑图 | **AntV G6** | 专门的图可视化库,力导向图 + 自定义节点样式 |
|
|
||||||
| 存储 | **SQLite** | 单文件数据库,适合 20 台以内数据量 |
|
|
||||||
| 在线检测 | Go `net` 包 ICMP Ping / 系统 ping 命令回退 | 定时 goroutine,1 分钟间隔 |
|
|
||||||
| SSH | `golang.org/x/crypto/ssh` | 纯 Go 实现,不依赖系统 ssh 命令,仅密码认证 |
|
|
||||||
| 认证 | Session/Cookie | 简单用户名密码,预设单管理员账号 |
|
|
||||||
|
|
||||||
### 项目结构
|
|
||||||
|
|
||||||
```
|
|
||||||
lan-manager/
|
|
||||||
├── server/
|
|
||||||
│ ├── main.go # 入口,HTTP 服务启动
|
|
||||||
│ ├── config/ # 配置管理
|
|
||||||
│ ├── db/ # SQLite 数据库连接 + migration
|
|
||||||
│ ├── models/ # 数据模型 (Machine, Service, Relationship, Log, User)
|
|
||||||
│ ├── handlers/ # HTTP 请求处理
|
|
||||||
│ ├── services/ # 业务逻辑 (ping, ssh, import/export, auth)
|
|
||||||
│ └── middleware/ # CORS, 认证中间件, 日志中间件
|
|
||||||
├── web/
|
|
||||||
│ ├── src/
|
|
||||||
│ │ ├── views/ # 页面组件 (MachineList, MachineDetail, Topology, Logs, Login)
|
|
||||||
│ │ ├── components/ # 复用组件 (StatusBadge, ServiceTable, RelationEditor)
|
|
||||||
│ │ ├── api/ # 前端 API 封装
|
|
||||||
│ │ └── App.vue
|
|
||||||
│ └── index.html
|
|
||||||
├── scripts/
|
|
||||||
│ └── lan-manager.service # Systemd 服务示例
|
|
||||||
├── go.mod
|
|
||||||
├── go.sum
|
|
||||||
├── Makefile # 构建脚本
|
|
||||||
└── README.md
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 五、数据存储设计
|
|
||||||
|
|
||||||
```sql
|
|
||||||
machines 表:
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT
|
|
||||||
hostname TEXT NOT NULL -- 主机名/别名
|
|
||||||
ip TEXT NOT NULL UNIQUE -- IP 地址
|
|
||||||
mac TEXT -- MAC 地址
|
|
||||||
os_type TEXT NOT NULL -- Linux / Windows / macOS / Other
|
|
||||||
os_version TEXT -- 系统版本
|
|
||||||
notes TEXT -- 备注
|
|
||||||
is_online INTEGER DEFAULT 0 -- 0=离线, 1=在线
|
|
||||||
last_ping_at DATETIME -- 最后一次 ping 时间
|
|
||||||
-- SSH 系统信息字段(管理员获取后可选择同步到这里,供访客查看)
|
|
||||||
cpu_info TEXT -- CPU 信息 JSON
|
|
||||||
memory_info TEXT -- 内存信息 JSON
|
|
||||||
disk_info TEXT -- 磁盘信息 JSON
|
|
||||||
uptime TEXT -- 运行时间
|
|
||||||
listen_ports TEXT -- 监听端口列表,逗号分隔
|
|
||||||
ssh_synced_at DATETIME -- 最后一次同步 SSH 数据的时间
|
|
||||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
|
|
||||||
services 表:
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT
|
|
||||||
machine_id INTEGER NOT NULL REFERENCES machines(id) ON DELETE CASCADE
|
|
||||||
name TEXT NOT NULL -- 服务名称
|
|
||||||
port INTEGER NOT NULL -- 端口号
|
|
||||||
protocol TEXT DEFAULT 'TCP' -- TCP / UDP / HTTP / HTTPS
|
|
||||||
notes TEXT -- 备注
|
|
||||||
|
|
||||||
relationships 表:
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT
|
|
||||||
source_machine_id INTEGER NOT NULL REFERENCES machines(id) ON DELETE CASCADE
|
|
||||||
target_machine_id INTEGER NOT NULL REFERENCES machines(id) ON DELETE CASCADE
|
|
||||||
relation_type TEXT NOT NULL -- port_forward / dependency / primary_secondary / custom
|
|
||||||
source_port INTEGER -- 源端口
|
|
||||||
target_port INTEGER -- 目标端口
|
|
||||||
notes TEXT -- 备注
|
|
||||||
|
|
||||||
operation_logs 表:
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT
|
|
||||||
action TEXT NOT NULL -- create / update / delete
|
|
||||||
entity_type TEXT NOT NULL -- machine / service / relationship
|
|
||||||
entity_id INTEGER -- 操作对象的 ID
|
|
||||||
entity_name TEXT -- 操作对象的名称描述
|
|
||||||
old_value TEXT -- 旧值 (JSON)
|
|
||||||
new_value TEXT -- 新值 (JSON)
|
|
||||||
source_ip TEXT -- 请求来源 IP
|
|
||||||
username TEXT -- 操作用户名(admin 或匿名)
|
|
||||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 六、API 设计
|
|
||||||
|
|
||||||
### 认证
|
|
||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
|
||||||
|------|------|------|
|
|
||||||
| POST | `/api/auth/login` | 管理员登录(用户名/密码) |
|
|
||||||
| POST | `/api/auth/logout` | 退出登录 |
|
|
||||||
| GET | `/api/auth/me` | 获取当前登录状态 |
|
|
||||||
|
|
||||||
### 机器
|
|
||||||
|
|
||||||
| 方法 | 路径 | 说明 | 权限 |
|
|
||||||
|------|------|------|------|
|
|
||||||
| GET | `/api/machines` | 获取机器列表(支持 ?os_type=Linux 筛选) | 访客/管理员 |
|
|
||||||
| GET | `/api/machines/:id` | 获取单个机器详情(含服务,管理员额外含关系、IP、MAC、备注) | 访客/管理员 |
|
|
||||||
| POST | `/api/machines` | 创建机器 | 管理员 |
|
|
||||||
| PUT | `/api/machines/:id` | 更新机器 | 管理员 |
|
|
||||||
| DELETE | `/api/machines/:id` | 删除机器 | 管理员 |
|
|
||||||
| POST | `/api/machines/:id/ssh-info` | SSH 获取系统信息(需传用户名密码,单次有效) | 管理员 |
|
|
||||||
| POST | `/api/machines/:id/sync-ssh` | 将最近一次 SSH 获取的信息同步到机器记录 | 管理员 |
|
|
||||||
|
|
||||||
### 服务
|
|
||||||
|
|
||||||
| 方法 | 路径 | 说明 | 权限 |
|
|
||||||
|------|------|------|------|
|
|
||||||
| GET | `/api/machines/:machine_id/services` | 获取某机器的服务列表 | 访客/管理员 |
|
|
||||||
| POST | `/api/machines/:machine_id/services` | 添加服务 | 管理员 |
|
|
||||||
| PUT | `/api/services/:id` | 更新服务 | 管理员 |
|
|
||||||
| DELETE | `/api/services/:id` | 删除服务 | 管理员 |
|
|
||||||
|
|
||||||
### 关系
|
|
||||||
|
|
||||||
| 方法 | 路径 | 说明 | 权限 |
|
|
||||||
|------|------|------|------|
|
|
||||||
| GET | `/api/relationships` | 获取全部关系 | 管理员 |
|
|
||||||
| POST | `/api/relationships` | 创建关系 | 管理员 |
|
|
||||||
| PUT | `/api/relationships/:id` | 更新关系 | 管理员 |
|
|
||||||
| DELETE | `/api/relationships/:id` | 删除关系 | 管理员 |
|
|
||||||
|
|
||||||
### 日志 / 导入导出
|
|
||||||
|
|
||||||
| 方法 | 路径 | 说明 | 权限 |
|
|
||||||
|------|------|------|------|
|
|
||||||
| GET | `/api/logs` | 获取操作日志 | 管理员 |
|
|
||||||
| GET | `/api/export` | 导出数据(JSON 下载) | 管理员 |
|
|
||||||
| POST | `/api/import` | 导入数据(上传 JSON) | 管理员 |
|
|
||||||
|
|
||||||
### 其他
|
|
||||||
|
|
||||||
| 方法 | 路径 | 说明 | 权限 |
|
|
||||||
|------|------|------|------|
|
|
||||||
| GET | `/api/health` | 服务健康检查 | 公开 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 七、已确认的设计决策
|
|
||||||
|
|
||||||
| 项目 | 决定 |
|
|
||||||
|------|------|
|
|
||||||
| 部署方式 | Web 应用,源码部署,Linux Systemd 服务 |
|
|
||||||
| Ping 间隔 | 1 分钟 |
|
|
||||||
| SSH 系统信息 | 支持,**不保存凭据**,仅密码认证,手动输入用户名密码,单次有效,独立按钮触发,仅管理员可用 |
|
|
||||||
| SSH 密钥 | **不支持** |
|
|
||||||
| 自动发现机器 | 不需要,纯手动添加 |
|
|
||||||
| 用户认证 | **需要**,预设单管理员账号,访客免认证只读访问脱敏数据 |
|
|
||||||
| 拓扑图 | 保留,力导向图,**仅管理员可见** |
|
|
||||||
| 导入/导出 | 需要,JSON 格式,管理员专属 |
|
|
||||||
| 操作日志 | 需要,记录所有增删改 |
|
|
||||||
| 机器规模 | 20 台以内 |
|
|
||||||
| 前端技术 | Vue 3 + 组件库 + AntV G6 |
|
|
||||||
| 后端技术 | Go + SQLite |
|
|
||||||
| 数据自动备份 | **不需要** |
|
|
||||||
| 前端构建方式 | 支持 embed 打包 + 外置静态目录两种模式 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 八、待确认细节
|
|
||||||
|
|
||||||
1. **前端 UI 组件库**:Element Plus 还是 Naive UI?(或者你有其他偏好)
|
|
||||||
2. **前端构建方式**:把 Vue 打包后的静态文件嵌入 Go 二进制(`embed.FS`,单文件部署),还是前后端分别部署?(建议同时支持两种)
|
|
||||||
3. **操作日志保留策略**:永久保留还是定期清理(如只保留最近 90 天)?
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=LAN Manager
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
ExecStart=/opt/lan-manager/lan-manager
|
|
||||||
WorkingDirectory=/opt/lan-manager
|
|
||||||
Restart=on-failure
|
|
||||||
Environment="HOST=0.0.0.0"
|
|
||||||
Environment="PORT=8080"
|
|
||||||
Environment="DB_PATH=/opt/lan-manager/data/lan-manager.db"
|
|
||||||
Environment="DATA_DIR=/opt/lan-manager/data"
|
|
||||||
Environment="ADMIN_USER=admin"
|
|
||||||
Environment="ADMIN_PASS=changeme"
|
|
||||||
Environment="SESSION_SECRET=your-random-secret-here"
|
|
||||||
Environment="PING_INTERVAL=60"
|
|
||||||
Environment="SSH_TIMEOUT=10"
|
|
||||||
Environment="LOG_RETENTION_DAYS=90"
|
|
||||||
Environment="UI_REFRESH_INTERVAL=10000"
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
Reference in New Issue
Block a user