# 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`。
