# 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 健康检查