# Go Site Clone




A powerful website cloning and local deployment tool built with Wails3 + Nuxt.js
[Features](#-features) β’ [Quick Start](#-quick-start) β’ [Usage](#-usage) β’ [Architecture](#-architecture) β’ [Configuration](#-configuration)
---
## π Overview
Go Site Clone is a powerful website cloning tool that can completely capture all resources of a website (HTML, CSS, JavaScript, images, videos, etc.) and support local deployment. It uses a real browser engine for resource capture, equipped with comprehensive anti-detection mechanisms and browser fingerprint spoofing system.
### β¨ Highlights
- π **Real Browser Engine** - Based on Chrome DevTools Protocol, simulating real user behavior
- π **Fingerprint Spoofing** - Canvas fingerprint, timezone, language, UserAgent comprehensive disguise
- π **Smart Resource Management** - Auto deduplication, same-domain filtering, categorized storage
- π¦ **Complete Site Cloning** - Support for static resources and dynamic content
- π₯οΈ **Cross-Platform** - One-click packaging for Windows, macOS, Linux
- π« **Modern UI** - Nuxt.js + Ant Design Vue responsive interface
- π **Local Site Service** - Integrated Nginx for one-click local mirror site startup
---
## π― Features
### Resource Capture
- β
Complete HTML page cloning
- β
Batch CSS stylesheet download
- β
JavaScript file capture
- β
Image resources (JPG, PNG, GIF, SVG, WebP)
- β
Video files (MP4, WebM, etc.)
- β
Fonts and other static resources
- β
Smart link traversal (auto-track internal links)
### Anti-Detection
- π Canvas fingerprint randomization
- π Timezone simulation (global timezone support)
- π£οΈ Language and locale spoofing
- π Custom UserAgent
- π Geolocation coordinate spoofing
- π΅οΈ Stealth plugin integration (bypass anti-bot detection)
### File Management
- π Auto-categorized storage by domain
- π Resource type classification
- π Real-time download progress
- ποΈ Local site list view
- π One-click folder opening
### Local Deployment
- π Integrated Nginx server
- β‘ Quick start local mirror sites
- π§ Custom port configuration
- π Site configuration management
---
## π Quick Start
### Requirements
- Go 1.24 or higher
- Node.js 18+ and npm/pnpm
- Wails CLI v3
### Installation
#### 1. Install Wails CLI
```bash
go install github.com/wailsapp/wails/v3/cmd/wails3@latest
```
#### 2. Clone Repository
```bash
git clone https://github.com/zhuy1228/go-site-clone.git
cd go-site-clone
```
#### 3. Install Go Dependencies
```bash
go mod download
```
#### 4. Install Frontend Dependencies
```bash
cd frontend
npm install
# or use pnpm
pnpm install
```
### Development Mode
```bash
# Start dev server with hot-reload
wails3 dev
```
The app will start in development mode with auto-reload for both frontend and backend changes.
### Production Build
```bash
# Build production version
wails3 build
# Output in build/ directory
```
---
## π Usage
### Basic Workflow
1. **Start Application**
```bash
wails3 dev # or run the built executable
```
2. **Enter Target Website URL**
- Input the website URL you want to clone
- Example: `https://example.com`
3. **Get Resource List**
- Click "Get Resources" button
- System automatically analyzes and lists all resources
4. **Download Site**
- Select resource types to download
- Click "Download" to start cloning
- View real-time download progress
5. **Local Preview**
- Select a site from download list
- Click "Open Folder" to view files
- Or use integrated Nginx service for local deployment
### Configuration
Edit `config.yaml` to customize settings:
```yaml
# Application name
appName: "Go Site Clone"
# Local service port
port: 6997
# WebSocket connection URL
wsUrl: "106.12.33.188:6996"
# STUN server address
stunUrl: "stun:106.12.33.188:3478"
# API service URL
apiUrl: "http://106.12.33.188:6996"
# Website file save directory
siteFileDir: "www"
```
### API Methods
The application exposes the following methods for frontend:
#### `GetResources(url string)`
Get all resource lists for specified URL
**Parameters:**
- `url`: Target website URL
**Returns:** `ResourcesList` object with categorized resources
#### `DownloadSite(uri string, resources ResourcesList)`
Download website resources to local
**Parameters:**
- `uri`: Website URL
- `resources`: Resource list object
**Returns:** `bool` - Success status
#### `GetDownloadList()`
Get list of downloaded websites
**Returns:** `[]FileDir` - File directory list
#### `OpenSiteFileDir(path string)`
Open folder for specified website
**Parameters:**
- `path`: Relative path
**Returns:** `bool` - Operation success status
---
## ποΈ Architecture
### Tech Stack
**Backend (Go)**
- [Wails v3](https://wails.io/) - Application framework
- [go-rod](https://github.com/go-rod/rod) - Browser automation
- [go-rod/stealth](https://github.com/go-rod/stealth) - Anti-detection
- [goquery](https://github.com/PuerkitoBio/goquery) - HTML parsing
- [go-sqlite3](https://github.com/mattn/go-sqlite3) - Database
- [yaml.v3](https://github.com/go-yaml/yaml) - Configuration
**Frontend (Nuxt.js)**
- [Nuxt 4](https://nuxt.com/) - Vue framework
- [Vue 3](https://vuejs.org/) - Reactive framework
- [Ant Design Vue](https://antdv.com/) - UI component library
- [Chart.js](https://www.chartjs.org/) - Charts
- [Wails Runtime](https://wails.io/) - Frontend-backend communication
### Project Structure
```
go-site-clone/
βββ app.go # Application main logic
βββ main.go # Program entry
βββ config.yaml # Configuration file
βββ go.mod # Go module dependencies
β
βββ config/ # Configuration loader
β βββ index.go
β
βββ services/ # Business services
β βββ site_service.go # Website cloning core
β βββ nginx_service.go # Nginx service management
β
βββ libs/ # Core libraries
β βββ browser.go # Browser pool management
β βββ chrome.go # Chrome instance creation
β βββ sqlite.go # Database operations
β βββ pack.go # Packaging utilities
β βββ browser-fingerprint/ # Browser fingerprint spoofing
β βββ index.go
β βββ canvas.go # Canvas fingerprint
β βββ timezone.go # Timezone simulation
β
βββ types/ # Type definitions
β βββ fingerprint_type.go # Fingerprint parameter types
β βββ task_type.go # Task types
β βββ nginx_template.go # Nginx templates
β
βββ utils/ # Utility functions
β βββ file.go # File download/management
β βββ index.go # Environment checks
β
βββ frontend/ # Nuxt.js frontend
β βββ nuxt.config.ts # Nuxt configuration
β βββ package.json # Frontend dependencies
β βββ app/ # Application code
β β βββ app.vue # Root component
β β βββ components/ # Vue components
β β βββ pages/ # Page routes
β β βββ layouts/ # Layout templates
β β βββ plugins/ # Plugins
β βββ bindings/ # Go binding types
β
βββ user-data/ # Browser user data
βββ www/ # Website file storage
βββ plugin/ # Plugins
β βββ nginx/ # Nginx plugin
βββ build/ # Build configuration
βββ darwin/ # macOS packaging config
βββ linux/ # Linux packaging config
βββ windows/ # Windows packaging config
```
---
## βοΈ Configuration
### Browser Fingerprint Config
```go
type BrowserFingerprintParams struct {
Canvas bool // Randomize Canvas fingerprint
TimeZone string // Timezone, e.g., "America/New_York"
Language string // Language, e.g., "en-US"
UserAgent string // Custom UserAgent
GeoLocation string // Geolocation, e.g., "40.7128,-74.0060"
}
```
---
## π§ Development
### Adding Features
1. **Backend Services**
- Create new service in `services/`
- Implement business logic
- Expose methods in `app.go` for frontend
2. **Frontend UI**
- Add new pages in `frontend/app/pages/`
- Add components in `frontend/app/components/`
- Use Wails Runtime to call backend methods
### Debugging
```bash
# View detailed logs
wails3 dev -v
# Build with verbose output
wails3 build -v
# Clean build cache
wails3 build -clean
```
---
## π¦ Build & Deploy
### Windows
```bash
wails3 build -platform windows/amd64
```
Executable in `build/bin/`
### macOS
```bash
wails3 build -platform darwin/universal
```
Generates `.app` bundle
### Linux
```bash
wails3 build -platform linux/amd64
```
Supports `.deb`, `.rpm`, AppImage formats
---
## π€ Contributing
Issues and Pull Requests are welcome!
1. Fork the repository
2. Create feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to branch (`git push origin feature/AmazingFeature`)
5. Submit Pull Request
---
## π License
This project is licensed under the MIT License - see [LICENSE](LICENSE) file
---
## π Acknowledgments
- [Wails](https://wails.io/) - Excellent Go + Web framework
- [go-rod](https://go-rod.github.io/) - Powerful browser automation
- [Nuxt.js](https://nuxt.com/) - Elegant Vue framework
- [Ant Design Vue](https://antdv.com/) - Beautiful UI components
---
## π Contact
- Author: zhuy1228
- Project: [https://github.com/zhuy1228/go-site-clone](https://github.com/zhuy1228/go-site-clone)
---
**If this project helps you, please give it a βοΈ**
Made with β€οΈ by zhuy1228
**[δΈζζζ‘£](README_CN.md)**