🚀 木雷坞开源的一个功能完善、高性能的企业级短链接服务平台,支持多域名、AB测试、用户管理、实时统计等功能。
| 企业微信 | |
|---|---|
![]() | ![]() |
| QQ群号:1021660914 点击链接加入群聊【木雷坞开源家】 | 扫描上方二维码加入微信群 |
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Web Client │ │ Mobile App │ │ API Client │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ └───────────────────────┼─────────────────────────┘ │ ┌─────────────────────────────────────────────────────┐ │ Load Balancer │ └─────────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────┐ │ DWZ Server │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Controller │ │ Middleware │ │ Router │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ Service │ │ DAO │ │ Model │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────┐ │ Data Layer │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ MySQL │ │ Cache │ │ │ │ PostgreSQL │ │ Redis │ │ │ │ SQLite │ │ Memory │ │ │ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────────┘
无需安装数据库和Redis,使用SQLite和内存缓存,适合个人使用和小型项目。
使用MySQL/PostgreSQL和Redis,适合生产环境和高并发场景。
# 创建项目目录
mkdir mliev-dwz
cd mliev-dwz
# 下载最新版本(以Linux x86_64为例)
wget https://github.com/muleiwu/dwz-server/releases/latest/download/dwz-server_Linux_x86_64.tar.gz
tar -xzf dwz-server_Linux_x86_64.tar.gz
chmod +x dwz-server
# 启动服务
./dwz-server
# 后台运行
nohup ./dwz-server > dwz.log 2>&1 &
打开浏览器访问 http://localhost:8080 进行初始化配置。
mkdir mliev-dwz
cd mliev-dwz
启动后,后台地址是 http://{ip}:{端口}/admin/
version: '3.8'
services:
dwz-server:
container_name: dwz-server
image: docker.cnb.cool/mliev/open/dwz-server:latest
restart: always
ports:
- "8080:8080"
volumes:
- "./config/:/app/config/"
environment:
- TZ=Asia/Shanghai
- GIN_MODE=release
mkdir -p config
chmod 666 ./config
# 后台启动所有服务
docker-compose up -d
# 或者前台启动(可以看到日志)
docker-compose up
# 检查服务状态
docker-compose ps
# 查看服务日志
docker-compose logs -f
打开 http://{您的IP}:8080 进行继续配置(请注意8080端口放开)
提示:独立模式无需配置数据库和Redis,系统会自动使用SQLite和内存缓存。














git clone https://github.com/your-org/dwz-server.git
cd 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 build -t dwz-server .
# 运行容器
docker run -d \
--name dwz-server \
-p 8080:8080 \
-v /path/to/config.yaml:/app/config.yaml \
dwz-server
http://localhost:8080application/json# 创建短链接
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": "user@example.com"
}
# 创建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
server:
mode: release
addr: ":8080"
# 数据库配置 - SQLite(无需外部数据库)
database:
driver: sqlite
filepath: "./config/sqlite.db"
# 缓存配置 - 内存缓存(无需Redis)
cache:
driver: local
# ID生成器配置 - 本地模式(无需Redis)
id_generator:
driver: local
# 短链接配置
shortlink:
domain: "http://localhost:8080"
length: 6
custom_length: true
# JWT配置
jwt:
secret: "your-secret-key-change-this"
expire_hours: 24
server:
mode: release
addr: ":8080"
# 数据库配置 - MySQL/PostgreSQL
database:
driver: mysql # 或 postgresql
host: "localhost"
port: 3306
username: "root"
password: "password"
dbname: "dwz_db"
# Redis配置
redis:
host: "localhost"
port: 6379
password: ""
db: 0
pool_size: 10
min_idle_conns: 5
# 缓存配置 - Redis
cache:
driver: redis
# ID生成器配置 - Redis
id_generator:
driver: redis
# 短链接配置
shortlink:
domain: "http://localhost:8080"
length: 6
custom_length: true
# JWT配置
jwt:
secret: "your-secret-key-change-this"
expire_hours: 24
# 中间件配置
middleware:
operation_log:
enable: true
max_request_size: 1048576
sensitive_fields: ["password", "token"]
async_logging: true
SERVER_ADDR: 服务端口 (默认: :8080)SERVER_MODE: 运行模式 (debug/release/test)DATABASE_DRIVER: 数据库类型 (mysql/postgresql/sqlite)DATABASE_HOST: 数据库主机 (SQLite不需要)DATABASE_PORT: 数据库端口 (SQLite不需要)DATABASE_USERNAME: 数据库用户名 (SQLite不需要)DATABASE_PASSWORD: 数据库密码 (SQLite不需要)DATABASE_NAME: 数据库名称 (SQLite不需要)DATABASE_FILEPATH: SQLite文件路径 (仅SQLite需要)CACHE_DRIVER: 缓存驱动 (redis/local)ID_GENERATOR_DRIVER: ID生成器驱动 (redis/local)REDIS_HOST: Redis主机REDIS_PORT: Redis端口REDIS_PASSWORD: Redis密码REDIS_DB: Redis数据库编号SHORTLINK_DOMAIN: 短链接域名SHORTLINK_LENGTH: 短码长度SHORTLINK_CUSTOM_LENGTH: 是否允许自定义长度JWT_SECRET: JWT密钥JWT_EXPIRE_HOURS: JWT过期时间(小时)# 详细健康检查
GET /health
# 简单健康检查
GET /health/simple
我们欢迎所有形式的贡献,包括但不限于:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)gofmt 格式化代码详细的开发指南请参考 CONTRIBUTING.md
本项目可以二次开发用于商业用途,但是禁止发布衍生版本。具体见 授权协议
感谢所有贡献者的努力和开源社区的支持!
⭐ 如果这个项目对您有帮助,请给我们一个星标!