Files
linkmaster-node/README.md
2025-12-03 22:08:08 +08:00

467 lines
12 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.
# LinkMaster Node
LinkMaster 节点服务,用于执行网络测试任务。
## 功能
- HTTP GET/POST 测试
- Ping 测试
- DNS 查询
- Traceroute 路由追踪
- Socket 连接测试
- TCPing 端口延迟测试
- FindPing IP段批量ping检测
- 持续 Ping/TCPing 测试
- 心跳上报
## 安装
### 方式一:一键安装(推荐)
从 GitHub 一键安装,只需指定后端服务器地址。安装脚本会自动克隆源码并编译安装:
```bash
# 基本用法(替换为实际的 GitHub 仓库地址)
curl -fsSL https://raw.githubusercontent.com/yourbask/linkmaster-node/main/install.sh | bash -s -- http://your-backend-server:8080
# 示例
# 节点和后端在同一服务器
curl -fsSL https://raw.githubusercontent.com/yourbask/linkmaster-node/main/install.sh | bash -s -- http://localhost:8080
# 节点和后端在不同服务器
curl -fsSL https://raw.githubusercontent.com/yourbask/linkmaster-node/main/install.sh | bash -s -- http://192.168.1.100:8080
```
**重要说明:**
- 节点端需要直接连接后端服务器(端口 8080不是前端地址
- 前端通过 `/api` 路径代理到后端,但节点端不使用代理
- 如果后端在公网,使用公网 IP 或域名
- 如果后端在内网,使用内网 IP
- **本项目是独立的 GitHub 仓库**,与前后端项目分离
**安装说明:**
- 自动检测系统类型和架构
- 自动安装系统依赖(包括 Git 和 Go
- 从 GitHub 克隆源码到 `/opt/linkmaster-node`
- 自动编译并安装二进制文件
- 自动创建 systemd 服务
- 自动启动服务并验证
**指定分支安装:**
```bash
GITHUB_BRANCH=develop curl -fsSL https://raw.githubusercontent.com/yourbask/linkmaster-node/main/install.sh | bash -s -- http://your-backend-server:8080
```
### 方式二:手动编译安装
```bash
# 克隆仓库
git clone https://github.com/yourbask/linkmaster-node.git
cd linkmaster-node
# 编译
go build -o agent ./cmd/agent
# 安装需要root权限
sudo cp agent /usr/local/bin/linkmaster-node
sudo chmod +x /usr/local/bin/linkmaster-node
# 或使用安装脚本
./install.sh http://your-backend-server:8080
```
### 方式三:手动运行
```bash
# 克隆仓库
git clone https://github.com/yourbask/linkmaster-node.git
cd linkmaster-node
# 运行(会自动拉取最新代码并编译)
BACKEND_URL=http://your-backend-server:8080 ./run.sh start
```
## 配置
### 环境变量
- `BACKEND_URL`: 后端服务地址(必需,默认: http://localhost:8080
- `CONFIG_PATH`: 配置文件路径(可选,默认: config.yaml
### 配置文件(可选)
创建 `config.yaml` 文件:
```yaml
server:
port: 2200
backend:
url: http://your-backend-server:8080
heartbeat:
interval: 60
debug: false
```
## 运行脚本
使用 `run.sh` 脚本管理节点端。**每次启动时会自动拉取最新代码并重新编译**
```bash
# 启动服务(会自动拉取最新代码并编译)
./run.sh start
# 停止服务
./run.sh stop
# 重启服务(会拉取最新代码并重新编译)
./run.sh restart
# 查看状态
./run.sh status
# 查看日志
./run.sh logs
# 查看完整日志
./run.sh logs-all
# 指定后端地址启动
BACKEND_URL=http://192.168.1.100:8080 ./run.sh start
```
**重要提示:**
- 启动脚本会自动执行 `git pull` 拉取最新代码
- 拉取代码后会自动执行 `go mod download` 更新依赖
- 然后自动编译生成新的二进制文件
- 如果 Git 拉取失败(如网络问题),会使用当前代码继续编译
- 如果编译失败,服务不会启动
## 脚本工具
项目提供了多个脚本工具,方便安装、卸载、运行、编译和发布。
### 1. install.sh - 一键安装脚本
自动安装 LinkMaster 节点端到系统包括依赖安装、源码编译、systemd 服务配置等。
**使用方法:**
```bash
# 通过 curl 下载并安装(推荐)
curl -fsSL https://gitee.nas.cpolar.cn/yoyo/linkmaster-node/raw/branch/main/install.sh | bash -s -- http://your-backend-server:8080
# 本地运行安装脚本
./install.sh http://your-backend-server:8080
# 指定分支安装
GITHUB_BRANCH=develop curl -fsSL https://gitee.nas.cpolar.cn/yoyo/linkmaster-node/raw/branch/main/install.sh | bash -s -- http://your-backend-server:8080
```
**功能特性:**
- 自动检测系统类型和架构Linux/macOS, amd64/arm64
- 自动检测并配置最快的镜像源Ubuntu/Debian/CentOS
- 自动安装系统依赖curl, wget, git, ping, traceroute 等)
- 自动安装 Go 环境(优先使用系统包管理器,失败则从官网下载)
- 优先从 Releases 下载预编译二进制文件,失败则从源码编译
- 自动创建 systemd 服务并配置自启动
- 自动配置防火墙规则(开放 2200 端口)
- 自动登记节点到后端服务器
- 自动启动服务并验证安装
**安装位置:**
- 二进制文件:`/usr/local/bin/linkmaster-node`
- 源码目录:`/opt/linkmaster-node`
- 服务文件:`/etc/systemd/system/linkmaster-node.service`
- 配置文件:`/opt/linkmaster-node/config.yaml`
### 2. uninstall.sh - 一键卸载脚本
完全卸载 LinkMaster 节点端,包括停止服务、删除文件、清理配置等。
**使用方法:**
```bash
# 通过 curl 下载并运行
curl -fsSL https://gitee.nas.cpolar.cn/yoyo/linkmaster-node/raw/branch/main/uninstall.sh | bash
# 本地运行卸载脚本
./uninstall.sh
# 卸载并删除防火墙规则
./uninstall.sh --remove-firewall
```
**功能特性:**
- 停止并禁用 systemd 服务
- 删除 systemd 服务文件和配置目录
- 删除二进制文件(`/usr/local/bin/linkmaster-node`
- 删除源码目录(`/opt/linkmaster-node`
- 清理所有残留进程
- 重新加载 systemd daemon
- 可选:删除防火墙规则(默认保留)
**注意事项:**
- 卸载前会询问确认(交互式环境)
- 默认保留防火墙规则,避免影响其他服务
- 使用 `--remove-firewall` 参数可删除防火墙规则
### 3. run.sh - 运行管理脚本
用于管理节点端的启动、停止、重启、状态查看和日志查看。**每次启动时会自动拉取最新代码并重新编译**。
**使用方法:**
```bash
# 启动服务(会自动拉取最新代码并编译)
./run.sh start
# 停止服务
./run.sh stop
# 重启服务(会拉取最新代码并重新编译)
./run.sh restart
# 查看运行状态
./run.sh status
# 实时查看日志
./run.sh logs
# 查看完整日志
./run.sh logs-all
# 显示帮助信息
./run.sh help
# 指定后端地址启动
BACKEND_URL=http://192.168.1.100:8080 ./run.sh start
```
**功能特性:**
- 启动时自动执行 `git pull` 拉取最新代码
- 自动执行 `go mod download` 更新依赖
- 自动编译生成新的二进制文件
- 自动检测端口占用并提示处理
- 后台运行并保存 PID 文件
- 健康检查验证服务状态
- 支持通过环境变量 `BACKEND_URL` 指定后端地址
**环境变量:**
- `BACKEND_URL`: 后端服务地址(默认: `http://localhost:8080`
### 4. start-systemd.sh - systemd 启动脚本
用于 systemd 服务启动,直接运行二进制文件。如果二进制文件不存在,会自动拉取代码并编译。
**使用场景:**
- 由 systemd 服务自动调用
- 不需要手动运行
**功能特性:**
- 检查二进制文件是否存在且有效
- 如果二进制文件不存在,自动拉取代码并编译
- 使用 vendor 目录编译(无需网络连接)
- 直接运行二进制文件systemd 管理进程)
**注意事项:**
- 此脚本由 systemd 服务调用,通常不需要手动运行
- 需要确保源码目录存在且是 Git 仓库
- 需要 Go 环境已安装并在 PATH 中
### 5. build-all.sh - 跨平台编译脚本
编译多个操作系统和架构的二进制文件,支持并行编译。
**使用方法:**
```bash
# 编译所有平台
./build-all.sh
# 只编译指定平台
./build-all.sh -p linux/amd64
# 编译前清理输出目录
./build-all.sh -c
# 设置并行编译数量
./build-all.sh -j 2
# 设置版本号
./build-all.sh -v 1.0.0
# 只生成不带版本号的文件
./build-all.sh -s
# 列出所有支持的平台
./build-all.sh -l
# 显示帮助信息
./build-all.sh -h
```
**支持的平台:**
- `linux/amd64` - Linux x86_64
- `linux/arm64` - Linux ARM64
- `darwin/amd64` - macOS Intel
- `darwin/arm64` - macOS Apple Silicon
- `windows/amd64` - Windows x86_64
- `windows/arm64` - Windows ARM64
**功能特性:**
- 支持并行编译(默认 4 个任务)
- 自动生成带版本号和不带版本号的文件
- 输出到 `bin/` 目录
- 显示编译进度和结果
- 支持清理输出目录
**输出文件:**
- `bin/agent-{os}-{arch}` - 不带版本号的二进制文件
- `bin/agent-{os}-{arch}-{version}` - 带版本号的二进制文件
- Windows 平台会自动添加 `.exe` 扩展名
### 6. upload.sh - 发布上传脚本
将编译好的二进制文件上传到 Releases 或通过其他方式发布。
**使用方法:**
```bash
# 上传到 Gitea Releases自动从 .git/config 读取仓库信息)
./upload.sh -m gitea -t v1.0.0 -v 1.0.0
# 指定 Gitea 访问令牌
./upload.sh -m gitea -t v1.0.0 -v 1.0.0 -T your_token
# 上传到 GitHub Releases
./upload.sh -m github -r owner/repo -t v1.0.0 -v 1.0.0
# 通过 SCP 上传
./upload.sh -m scp -H example.com -u user -d /path/to/release
# 通过 SCP 上传(指定私钥)
./upload.sh -m scp -H example.com -u user -d /path/to/release -k ~/.ssh/id_rsa
# 通过 FTP 上传
./upload.sh -m ftp -H ftp.example.com -u user -d /path/to/release
# 复制到本地目录
./upload.sh -m local -d /path/to/release
# 只打包不上传
./upload.sh --pack-only -v 1.0.0
# 不上传压缩包,直接上传二进制文件
./upload.sh -m scp --no-pack -H example.com -u user -d /path/to/release
# 显示帮助信息
./upload.sh -h
```
**支持的上传方式:**
- `gitea` - Gitea Releases自动从 .git/config 读取仓库信息)
- `github` - GitHub Releases需要 GitHub CLI `gh`
- `scp` - 通过 SCP 上传到远程服务器
- `ftp` - 通过 FTP 上传
- `local` - 复制到本地目录
**功能特性:**
- 自动打包二进制文件tar.gz 或 zip
- 自动创建发布说明
- 支持指定平台上传
- 支持自定义版本号和标签
- 支持自定义发布说明
- 自动检测并处理已存在的 Release
**参数说明:**
- `-m, --method`: 上传方式gitea|github|scp|ftp|local
- `-v, --version`: 版本号(默认: 时间戳)
- `-t, --tag`: Git 标签Releases 需要)
- `-p, --platform`: 只上传指定平台
- `-T, --token`: 访问令牌Gitea/GitHub
- `-H, --host`: 主机地址SCP/FTP
- `-u, --user`: 用户名SCP/FTP
- `-d, --dest`: 目标路径SCP/FTP/local
- `-k, --key`: 私钥路径SCP
- `--pack-only`: 只打包不上传
- `--no-pack`: 不上传压缩包,直接上传二进制文件
### 7. vendor.sh - Vendor 依赖打包脚本
将项目依赖下载到 vendor 目录,客户端克隆后可直接编译,无需网络连接。
**使用方法:**
```bash
# 运行脚本(会自动下载依赖并创建 vendor 目录)
./vendor.sh
```
**功能特性:**
- 检查 Go 环境
- 配置 Go 代理(使用官方源)
- 下载所有依赖包
- 创建 vendor 目录
- 更新 .gitignore允许 vendor 目录被提交)
- 自动添加到 Git 暂存区
**使用场景:**
- 项目需要离线编译能力
- 需要确保依赖版本一致性
- 客户端环境网络受限
**注意事项:**
- 需要 Go 环境已安装
- vendor 目录会比较大,需要提交到 Git
- 编译时使用 `-mod=vendor` 标志
**编译命令(使用 vendor**
```bash
go build -mod=vendor -o agent ./cmd/agent
```
## API
### POST /api/test
统一测试接口
```json
{
"type": "ceGet|cePost|cePing|ceDns|ceTrace|ceSocket|ceTCPing|ceFindPing",
"url": "测试目标",
"params": {}
}
```
### POST /api/continuous/start
启动持续测试
```json
{
"type": "ping|tcping",
"target": "测试目标",
"interval": 10,
"max_duration": 60
}
```
### POST /api/continuous/stop
停止持续测试
```json
{
"task_id": "任务ID"
}
```
### GET /api/continuous/status?task_id=xxx
查询任务状态
### GET /api/health
健康检查