Files
go-site-clone/README_CN.md
2025-11-21 14:02:44 +08:00

451 lines
11 KiB
Markdown
Raw Permalink 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.
# Go Site Clone
<div align="center">
![Go Version](https://img.shields.io/badge/Go-1.24+-00ADD8?style=flat&logo=go)
![Wails](https://img.shields.io/badge/Wails-3.0--alpha-DF5B00?style=flat)
![Nuxt](https://img.shields.io/badge/Nuxt-4.1.2-00DC82?style=flat&logo=nuxt.js)
![License](https://img.shields.io/badge/License-MIT-green?style=flat)
基于 Wails3 + Nuxt.js 开发的网站克隆与本地部署工具
[功能特性](#-功能特性) • [快速开始](#-快速开始) • [使用说明](#-使用说明) • [技术架构](#-技术架构) • [配置说明](#-配置说明)
</div>
---
## 📖 项目简介
Go Site Clone 是一款强大的网站克隆工具能够完整抓取网站的所有资源HTML、CSS、JavaScript、图片、视频等并支持本地部署。采用真实浏览器引擎进行资源抓取配备完善的反检测机制和浏览器指纹伪装系统。
### ✨ 核心亮点
- 🚀 **真实浏览器引擎** - 基于 Chrome DevTools Protocol模拟真实用户行为
- 🎭 **指纹伪装系统** - Canvas 指纹、时区、语言、UserAgent 全方位伪装
- 🔄 **智能资源管理** - 自动去重、同域过滤、分类存储
- 📦 **完整站点克隆** - 支持静态资源、动态内容的完整抓取
- 🖥️ **跨平台支持** - Windows、macOS、Linux 一键打包
- 💫 **现代化界面** - Nuxt.js + Ant Design Vue 响应式 UI
- 🌐 **本地站点服务** - 集成 Nginx一键启动本地镜像站点
---
## 🎯 功能特性
### 资源抓取
- ✅ HTML 页面完整克隆
- ✅ CSS 样式表批量下载
- ✅ JavaScript 脚本文件抓取
- ✅ 图片资源JPG、PNG、GIF、SVG、WebP
- ✅ 视频文件MP4、WebM 等)
- ✅ 字体文件和其他静态资源
- ✅ 智能链接遍历(站内链接自动跟踪)
### 反检测技术
- 🎭 Canvas 指纹随机化
- 🌍 时区模拟(支持全球时区)
- 🗣️ 语言和地域伪装
- 🔐 UserAgent 定制
- 📍 地理位置坐标伪装
- 🕵️ Stealth 插件集成(绕过反爬虫检测)
### 文件管理
- 📁 按域名自动分类存储
- 🔍 资源类型分类管理
- 📊 下载进度实时显示
- 🗂️ 本地站点列表查看
- 📂 一键打开文件夹
### 本地部署
- 🌐 集成 Nginx 服务器
- ⚡ 快速启动本地镜像站点
- 🔧 自定义端口配置
- 📝 站点配置管理
---
## 🚀 快速开始
### 环境要求
- Go 1.24 或更高版本
- Node.js 18+ 和 npm/pnpm
- Wails CLI v3
### 安装依赖
#### 1. 安装 Wails CLI
```bash
go install github.com/wailsapp/wails/v3/cmd/wails3@latest
```
#### 2. 克隆项目
```bash
git clone https://github.com/zhuy1228/go-site-clone.git
cd go-site-clone
```
#### 3. 安装 Go 依赖
```bash
go mod download
```
#### 4. 安装前端依赖
```bash
cd frontend
npm install
# 或使用 pnpm
pnpm install
```
### 开发模式
```bash
# 启动开发服务器(支持热重载)
wails3 dev
```
应用将在开发模式下启动,前后端修改会自动重载。
### 生产构建
```bash
# 构建生产版本
wails3 build
# 构建产物位于 build/ 目录
```
---
## 📚 使用说明
### 基本使用流程
1. **启动应用**
```bash
wails3 dev # 或运行打包后的可执行文件
```
2. **输入目标网站 URL**
- 在界面中输入要克隆的网站地址
- 例如:`https://example.com`
3. **获取资源列表**
- 点击「获取资源」按钮
- 系统自动分析站点并列出所有资源
4. **下载站点**
- 选择需要下载的资源类型
- 点击「下载」开始克隆
- 实时查看下载进度
5. **本地预览**
- 从下载列表中选择站点
- 点击「打开文件夹」查看文件
- 或使用集成的 Nginx 服务进行本地部署
### 配置文件说明
编辑 `config.yaml` 自定义配置:
```yaml
# 应用名称
appName: "Go Site Clone"
# 本地服务端口
port: 6997
# WebSocket 连接地址
wsUrl: "106.12.33.188:6996"
# STUN 服务器地址
stunUrl: "stun:106.12.33.188:3478"
# API 服务地址
apiUrl: "http://106.12.33.188:6996"
# 网站文件保存目录
siteFileDir: "www"
```
### API 接口
应用暴露以下方法供前端调用:
#### `GetResources(url string)`
获取指定 URL 的所有资源列表
**参数:**
- `url`: 目标网站地址
**返回:** `ResourcesList` 对象,包含分类资源
#### `DownloadSite(uri string, resources ResourcesList)`
下载网站资源到本地
**参数:**
- `uri`: 网站地址
- `resources`: 资源列表对象
**返回:** `bool` - 下载是否成功
#### `GetDownloadList()`
获取已下载的网站列表
**返回:** `[]FileDir` - 文件目录列表
#### `OpenSiteFileDir(path string)`
打开指定网站的文件夹
**参数:**
- `path`: 相对路径
**返回:** `bool` - 操作是否成功
---
## 🏗️ 技术架构
### 技术栈
**后端 (Go)**
- [Wails v3](https://wails.io/) - 应用框架
- [go-rod](https://github.com/go-rod/rod) - 浏览器自动化
- [go-rod/stealth](https://github.com/go-rod/stealth) - 反检测
- [goquery](https://github.com/PuerkitoBio/goquery) - HTML 解析
- [go-sqlite3](https://github.com/mattn/go-sqlite3) - 数据库
- [yaml.v3](https://github.com/go-yaml/yaml) - 配置管理
**前端 (Nuxt.js)**
- [Nuxt 4](https://nuxt.com/) - Vue 框架
- [Vue 3](https://vuejs.org/) - 响应式框架
- [Ant Design Vue](https://antdv.com/) - UI 组件库
- [Chart.js](https://www.chartjs.org/) - 图表库
- [Wails Runtime](https://wails.io/) - 前后端通信
### 项目结构
```
go-site-clone/
├── app.go # 应用主逻辑
├── main.go # 程序入口
├── config.yaml # 配置文件
├── go.mod # Go 模块依赖
├── config/ # 配置加载模块
│ └── index.go
├── services/ # 业务服务层
│ ├── site_service.go # 网站克隆核心服务
│ └── nginx_service.go # Nginx 服务管理
├── libs/ # 核心库
│ ├── browser.go # 浏览器池管理
│ ├── chrome.go # Chrome 实例创建
│ ├── sqlite.go # 数据库操作
│ ├── pack.go # 打包工具
│ └── browser-fingerprint/ # 浏览器指纹伪装
│ ├── index.go
│ ├── canvas.go # Canvas 指纹
│ └── timezone.go # 时区模拟
├── types/ # 类型定义
│ ├── fingerprint_type.go # 指纹参数类型
│ ├── task_type.go # 任务类型
│ └── nginx_template.go # Nginx 模板
├── utils/ # 工具函数
│ ├── file.go # 文件下载/管理
│ └── index.go # 环境检查
├── frontend/ # Nuxt.js 前端
│ ├── nuxt.config.ts # Nuxt 配置
│ ├── package.json # 前端依赖
│ ├── app/ # 应用代码
│ │ ├── app.vue # 根组件
│ │ ├── components/ # Vue 组件
│ │ ├── pages/ # 页面路由
│ │ ├── layouts/ # 布局模板
│ │ └── plugins/ # 插件
│ └── bindings/ # Go 绑定类型
├── user-data/ # 浏览器用户数据
├── www/ # 网站文件存储目录
├── plugin/ # 插件
│ └── nginx/ # Nginx 插件
└── build/ # 构建配置
├── darwin/ # macOS 打包配置
├── linux/ # Linux 打包配置
└── windows/ # Windows 打包配置
```
### 核心模块说明
#### 1. 浏览器管理 (`libs/browser.go`)
- 浏览器实例池化
- 并发安全的读写锁
- 自动创建和销毁
#### 2. 网站克隆服务 (`services/site_service.go`)
- 资源抓取引擎
- 智能链接遍历
- 资源去重和过滤
#### 3. 指纹伪装 (`libs/browser-fingerprint/`)
- Canvas 指纹随机化
- 时区和语言模拟
- UserAgent 定制
#### 4. 文件管理 (`utils/file.go`)
- 文件下载和存储
- 目录结构管理
- 文件列表查询
---
## ⚙️ 配置说明
### 浏览器指纹配置
```go
type BrowserFingerprintParams struct {
Canvas bool // 是否随机化 Canvas 指纹
TimeZone string // 时区,如 "America/New_York"
Language string // 语言,如 "en-US"
UserAgent string // 自定义 UserAgent
GeoLocation string // 地理位置,如 "40.7128,-74.0060"
}
```
### 任务参数配置
```go
type TaskParams struct {
URL string // 目标网站 URL
Fingerprint BrowserFingerprintParams // 指纹参数
Proxy string // 代理地址(可选)
}
```
---
## 🔧 开发指南
### 添加新功能
1. **后端服务**
- 在 `services/` 目录创建新服务
- 实现业务逻辑
- 在 `app.go` 中暴露方法给前端
2. **前端界面**
- 在 `frontend/app/pages/` 添加新页面
- 在 `frontend/app/components/` 添加组件
- 使用 Wails Runtime 调用后端方法
### 调试技巧
```bash
# 查看详细日志
wails3 dev -v
# 构建时查看详细信息
wails3 build -v
# 清理构建缓存
wails3 build -clean
```
### 测试
```bash
# 运行 Go 测试
go test ./...
# 运行前端测试(如果配置)
cd frontend
npm test
```
---
## 📦 打包部署
### Windows
```bash
wails3 build -platform windows/amd64
```
生成的可执行文件位于 `build/bin/`
### macOS
```bash
wails3 build -platform darwin/universal
```
生成 `.app` 应用包
### Linux
```bash
wails3 build -platform linux/amd64
```
支持生成 `.deb`、`.rpm`、AppImage 等格式
---
## 🤝 贡献指南
欢迎提交 Issue 和 Pull Request
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 提交 Pull Request
---
## 📄 许可证
本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件
---
## 🙏 致谢
- [Wails](https://wails.io/) - 出色的 Go + Web 框架
- [go-rod](https://go-rod.github.io/) - 强大的浏览器自动化工具
- [Nuxt.js](https://nuxt.com/) - 优雅的 Vue 框架
- [Ant Design Vue](https://antdv.com/) - 精美的 UI 组件库
---
## 📞 联系方式
- 作者: zhuy1228
- 项目链接: [https://github.com/zhuy1228/go-site-clone](https://github.com/zhuy1228/go-site-clone)
---
<div align="center">
**如果这个项目对你有帮助,请给它一个 ⭐️**
Made with ❤️ by zhuy1228
</div>