开源项目-木雷短网址 – 企业级短链接服务平台
3kg
09-21
5
0

木雷短网址 – 企业级短链接服务平台

核心功能

  • 短链接生成: 支持自定义短码,自动生成唯一标识

  • 多域名支持: 支持配置多个短链接域名,灵活管理

  • 链接管理: 完整的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等中间件

🚀 系统预览

Snipaste_2025-07-16_01-30-57.png

Snipaste_2025-07-16_01-32-13.png

Snipaste_2025-07-16_01-32-59.png

Snipaste_2025-07-16_01-33-14.png

Snipaste_2025-07-16_01-33-45.png

Snipaste_2025-07-16_01-33-56.png

Snipaste_2025-07-16_01-34-36.png

Snipaste_2025-07-16_01-34-59.png

Snipaste_2025-07-16_01-35-19.png

Snipaste_2025-07-16_01-35-56.png

Snipaste_2025-07-16_01-36-07.png

Snipaste_2025-07-16_01-36-18.png

Snipaste_2025-07-16_01-36-35.png

Snipaste_2025-07-16_01-36-59.png

🔧 快速安装

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+

开发步骤

  1. 克隆项目

git clone https://github.com/your-org/dwz-server.gitcd dwz-server
  1. 安装依赖

go mod download

  • 配置数据库

  • # 复制配置文件cp config.yaml.example config.yaml# 编辑配置文件,设置数据库连接信息vim config.yaml
    1. 初始化数据库

    # 创建数据库表结构# 执行项目中的数据库迁移脚本
    1. 启动服务

    go run main.go
    1. 验证服务

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

    基础信息

    • 基础URLhttp://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格式日志输出

    • 日志级别: 支持不同级别日志配置

    • 日志轮转: 自动日志文件轮转

    • 监控集成: 支持主流监控系统集成

    性能监控

    • 实时监控: 实时性能指标监控

    • 告警机制: 异常情况自动告警

    • 性能分析: 详细的性能分析报告

    • 容量规划: 基于历史数据的容量规划

    打赏
    VMware Workstation Pro 17 版本下载大全
    上一篇
    开源项目-木雷短网址 -宝塔安装
    下一篇

    发表评论

    注册不是必须的

    最新文章

    从z-blog转到wordpress

    从z-blog转到wordpress,其实挺简单的,很早之前就想从ZB转到WP,一直拖着没有去操作,今天有空来折腾下。 需要用的插件 一:https://app.zblogcn.com/?id=1501 下载到本地后,在ZB后台插件上传安装/或者在线安装 二、进入插件管理,点击下载好的插件,导出为txt,文件在zb_users/plugin/MT_Export/usr/目录下(这里需要进到宝塔的网 […]

    PDF转Word,拆分,转图片,转PPT,合并,压缩减小PDF文件体积

    金山PDF大学专业定制版(V11.8.0.8845)西工业专业定制版国产软件功能无限制 安装以后软件就已经解suo了所有的功能,包括PDF转Word、PDF转Excel、PDF转PPT、PDF合并、PDF转图、PDF压缩等等功能! 其他的转换大家可以自己去测试,都挺好用的!不过“PDF转为Excel”一次只能转一页,金*的PDF是国产软件,其功能设计都很符合国人的用户习惯,所以用起来非常顺畅。PD […]
    生成中...
    本站对你有帮助的话,
    就请我喝杯咖啡吧