开源项目-木雷短网址 - 企业级短链接服务平台
木雷短网址 - 企业级短链接服务平台
核心功能
短链接生成: 支持自定义短码,自动生成唯一标识
多域名支持: 支持配置多个短链接域名,灵活管理
链接管理: 完整的CRUD操作,支持批量管理
过期管理: 支持设置链接过期时间,自动失效
链接状态: 支持启用/禁用链接状态控制
🧪 AB测试系统
多版本测试: 为同一短链接创建多个目标URL版本
智能分流: 支持平均分配、权重分配等流量分配策略
会话一致性: 同一用户在测试期间始终访问相同版本
实时统计: 实时收集各版本的点击数据和转化率
测试管理: 完整的测试生命周期管理
👥 用户管理
用户认证: 支持用户注册、登录、密码管理
Token管理: 支持API Token和登录Token双重认证
权限控制: 基于用户的访问权限管理
操作日志: 详细记录用户操作,支持审计追踪
📊 统计分析
点击统计: 实时记录点击数据,包括IP、地理位置、设备信息
数据分析: 提供多维度统计分析,包括地理分布、时间分布等
AB测试分析: 专门的AB测试数据分析和转化率统计
导出功能: 支持数据导出,便于进一步分析
🛡️ 安全与监控
操作日志: 自动记录所有操作,支持敏感信息脱敏
健康检查: 提供服务健康状态监控
性能监控: 高并发场景下的性能优化
安全防护: 防止恶意访问和数据泄露
🏗️ 技术架构
技术栈
语言: Go 1.23+
Web框架: Gin
数据库: MySQL/PostgreSQL
缓存: Redis
ORM: GORM
配置管理: Viper
日志: Zap
HTTP客户端: go-resty
架构设计
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Web Client │ │ Mobile App │ │ API Client │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ └───────────────────────┼───────────────────────┘ │ ┌─────────────────────────────────────────────────┐ │ Load Balancer │ └─────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────┐ │ DWZ Server │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ Controller │ │ Middleware │ │ Router │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ Service │ │ DAO │ │ Model │ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────┐ │ Data Layer │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ MySQL │ │ Redis │ │ │ │ PostgreSQL │ │ Cache │ │ │ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────┘
分层架构
Controller层: 处理HTTP请求,参数验证,调用Service
Service层: 业务逻辑处理,事务管理
DAO层: 数据访问,数据库操作
Model层: 数据模型定义
Middleware层: 认证、日志、CORS等中间件
🚀 系统预览
🔧 快速安装
1. 创建项目目录
mkdir mliev-dwzcd mliev-dwz
2. 创建 Docker Compose 文件
启动后,后台地址是 http://{ip}:{端口}/admin/
默认安装后的账号:admin 默认安装后的密码:admin
创建 docker-compose.yml
文件:
version: '3.8'services: dwz-server: container_name: dwz-server image: docker.cnb.cool/mliev/open/dwz-server:latest restart: always ports: - "8080" # 仅暴露给容器网络 volumes: - "./config/:/app/config/" environment: - TZ=Asia/Shanghai - DATABASE_DRIVER=mysql - DATABASE_HOST=mysql - DATABASE_PORT=3306 - DATABASE_DBNAME=dwz - DATABASE_USERNAME=root - DATABASE_PASSWORD=dwz123456 - REDIS_HOST=redis - REDIS_PORT=6379 - REDIS_PASSWORD=redis123456 - REDIS_DB=0 - AUTO_INSTALL=install - GIN_MODE=release depends_on: mysql: condition: service_healthy redis: condition: service_healthy dwz-admin: container_name: dwz-admin image: docker.cnb.cool/mliev/open/dwz-admin-webui:latest restart: always ports: - "8081:80" depends_on: dwz-server: condition: service_healthy environment: - TZ=Asia/Shanghai healthcheck: test: ["CMD", "curl", "-f", "http://localhost:80/"] interval: 30s timeout: 10s retries: 3 start_period: 10s mysql: image: mysql:5.7 container_name: dwz-mysql restart: always environment: - MYSQL_ROOT_PASSWORD=dwz123456 - MYSQL_DATABASE=dwz - MYSQL_USER=dwz - MYSQL_PASSWORD=dwz123456 - TZ=Asia/Shanghai volumes: - "./data/mysql_data:/var/lib/mysql" ports: - "3306" command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "dwz", "-pdwz123456"] interval: 10s timeout: 5s retries: 5 start_period: 30s redis: image: redis:7-alpine container_name: dwz-redis restart: always environment: - TZ=Asia/Shanghai volumes: - "./data/redis_data:/data" ports: - "6379" command: redis-server --requirepass redis123456 healthcheck: test: ["CMD", "redis-cli", "--raw", "incr", "ping"] interval: 10s timeout: 3s retries: 5 start_period: 10s
3. 创建配置目录
mkdir -p config chmod 666 ./config
4. 启动服务
# 后台启动所有服务docker-compose up -d# 或者前台启动(可以看到日志)docker-compose up
5. 验证安装
# 检查服务状态docker-compose ps# 查看服务日志docker-compose logs -f
6. 页面配置
打开 http://{您的IP}:8081
进行继续配置(请注意8081端口放开)
🚀 二次开发
环境要求
Go 1.23+
MySQL 5.7+ 或 PostgreSQL 9.6+
Redis 6.0+
开发步骤
克隆项目
git clone https://github.com/your-org/dwz-server.gitcd dwz-server
安装依赖
go mod download
配置数据库
# 复制配置文件cp config.yaml.example config.yaml# 编辑配置文件,设置数据库连接信息vim config.yaml
初始化数据库
# 创建数据库表结构# 执行项目中的数据库迁移脚本
启动服务
go run main.go
验证服务
# 健康检查curl http://localhost:8080/health# API测试curl -X POST http://localhost:8080/api/v1/short_links \ -H "Content-Type: application/json" \ -d '{"original_url": "https://example.com"}'
Docker 部署
# 构建镜像docker build -t dwz-server .# 运行容器docker run -d \ --name dwz-server \ -p 8080:8080 \ -v /path/to/config.yaml:/app/config.yaml \ dwz-server
📖 API 文档
基础信息
基础URL:
http://localhost:8080
内容类型:
application/json
认证方式: Bearer Token
主要接口
短链接管理
# 创建短链接POST /api/v1/short_links { "original_url": "https://example.com", "domain": "short.ly", "custom_code": "abc123"}# 获取短链接列表GET /api/v1/short_links?page=1&page_size=10# 获取短链接详情GET /api/v1/short_links/{id}# 更新短链接PUT /api/v1/short_links/{id}# 删除短链接DELETE /api/v1/short_links/{id}
用户管理
# 用户登录POST /api/v1/login { "username": "admin", "password": "admin123"}# 创建用户POST /api/v1/users { "username": "newuser", "password": "password123", "email": "[email protected]"}
AB测试
# 创建AB测试POST /api/v1/ab_tests { "short_link_id": 1, "name": "按钮颜色测试", "variants": [ { "name": "红色按钮", "target_url": "https://example.com/red" }, { "name": "蓝色按钮", "target_url": "https://example.com/blue" } ] }# 获取AB测试统计GET /api/v1/ab_tests/{id}/statistics
详细的API文档请参考 API.md
🔧 配置说明
配置文件结构
app: name: "DWZ Server" version: "1.0.0" port: 8080 mode: "debug"database: driver: "mysql" host: "localhost" port: 3306 database: "dwz_server" username: "root" password: "password"redis: host: "localhost" port: 6379 password: "" database: 0middleware: operation_log: enable: true max_request_size: 1048576 sensitive_fields: ["password", "token"] async_logging: true
环境变量
APP_PORT
: 服务端口 (默认: 8080)DB_HOST
: 数据库主机DB_PORT
: 数据库端口DB_USER
: 数据库用户名DB_PASSWORD
: 数据库密码REDIS_HOST
: Redis主机REDIS_PORT
: Redis端口
🔍 性能特点
高性能设计
并发优化: 支持高并发访问,经过性能测试验证
缓存策略: 多级缓存机制,提升响应速度
异步处理: 统计记录异步处理,不影响主流程性能
连接池: 数据库连接池优化,减少连接开销
性能基准
响应时间: 平均响应时间 < 10ms
并发处理: 支持万级并发请求
吞吐量: 单实例支持 10,000+ QPS
可扩展性: 支持水平扩展,多实例部署
🛡️ 安全特性
数据安全
敏感信息脱敏: 自动脱敏密码、Token等敏感信息
访问控制: 基于Token的访问控制机制
操作审计: 完整的操作日志记录
数据加密: 敏感数据加密存储
系统安全
防刷机制: 防止恶意刷取短链接
访问限制: 支持IP访问频率限制
输入验证: 严格的输入参数验证
错误处理: 安全的错误信息返回
📊 监控与运维
健康检查
# 详细健康检查GET /health# 简单健康检查GET /health/simple
日志管理
结构化日志: JSON格式日志输出
日志级别: 支持不同级别日志配置
日志轮转: 自动日志文件轮转
监控集成: 支持主流监控系统集成
性能监控
实时监控: 实时性能指标监控
告警机制: 异常情况自动告警
性能分析: 详细的性能分析报告
容量规划: 基于历史数据的容量规划