🚀 木雷坞开源的一个功能完善、高性能的企业级短链接服务平台,支持多域名、AB测试、用户管理、实时统计等功能。
| 企业微信 | |
|---|---|
![]() | ![]() |
| QQ群号:1021660914 点击链接加入群聊【木雷坞开源家】 | 扫描上方二维码加入微信群 |
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Web Client │ │ Mobile App │ │ API Client │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ └───────────────────────┼───────────────────────┘ │ ┌─────────────────────────────────────────────────┐ │ Load Balancer │ └─────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────┐ │ DWZ Server │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ Controller │ │ Middleware │ │ Router │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ Service │ │ DAO │ │ Model │ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────┐ │ Data Layer │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ MySQL │ │ Redis │ │ │ │ PostgreSQL │ │ Cache │ │ │ └─────────────┘ └─────────────┘ │ └─────────────────────────────────────────────────┘














mkdir mliev-dwz
cd mliev-dwz
启动后,后台地址是 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
mkdir -p config
chmod 666 ./config
# 后台启动所有服务
docker-compose up -d
# 或者前台启动(可以看到日志)
docker-compose up
# 检查服务状态
docker-compose ps
# 查看服务日志
docker-compose logs -f
打开 http://{您的IP}:8081 进行继续配置(请注意8081端口放开)
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
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: 0
middleware:
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端口# 详细健康检查
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
本项目可以二次开发用于商业用途,但是禁止发布衍生版本。具体见 授权协议
感谢所有贡献者的努力和开源社区的支持!
⭐ 如果这个项目对您有帮助,请给我们一个星标!