7. 常见问题
常见问题 FAQ
部署
Q1: 启动时提示 8080 端口被占用?
通过环境变量 SERVER_ADDR=:9090 或 config.yaml 中的 http.addr 修改监听端口。
Q2: 独立模式的数据文件在哪里?
默认位于 ./config/sqlite.db。Docker 部署时请确保 ./config/ 目录挂载并有写权限:
mkdir -p config && chmod 666 ./configQ3: 能否把 SQLite 的数据迁移到 MySQL?
可以,但需要手工操作:导出 SQLite 表 → 在目标 MySQL 创建库 → 导入。建议在低峰期、停机迁移。
Q4: JWT_SECRET 忘记改,已经跑了一段时间怎么办?
修改 JWT_SECRET 后所有已签发的 Token 会立即失效,用户需要重新登录,不会丢失数据。生产环境务必在首次部署前就设置好。
使用
Q5: 自定义短码有什么限制?
字符集为 [a-zA-Z0-9\-_.]+,长度受 shortlink.length 和 custom_length 控制。不能与已存在的短码重复。
Q6: 多实例部署时点击计数重复了怎么办?
请将 CACHE_DRIVER 和 ID_GENERATOR_DRIVER 都切换到 redis。local 模式仅适合单实例。
Q7: A/B 测试的流量一致性是怎么保证的?
通过 Cookie / 会话 ID。同一访客在测试期间始终命中同一变体。清除 Cookie 或更换设备会被视为新访客。
Q8: 如何禁用某个短链接而不删除?
调用 PUT /api/v1/short_links/{id}/status 设为 inactive,跳转会回退到错误页。之后可随时改回 active。
性能与运维
Q9: 单实例能承载多少 QPS?
参考值:独立模式(SQLite + 内存缓存)约 1000-3000 QPS;生产模式(MySQL + Redis)单实例 10000+ QPS,具体取决于机器配置。
Q10: 点击数据越来越多,怎么做归档?
当前版本没有内置归档,建议通过 MySQL / PG 的分表或外部工具(如 pt-archiver)定期归档历史数据。也可以通过 DAO 自行扩展分区策略。
Q11: 如何开启 HTTPS?
推荐在 dwz-server 前加 Nginx / Caddy / Traefik 做 TLS 终止;dwz-server 本身继续监听 HTTP。
Q12: 日志文件过大怎么处理?
log 配置项支持按大小滚动(max_size)、按天数过期(max_age)、保留份数(max_backups)与压缩(compress)。
开发
Q13: 能否二次开发用于商业项目?
可以,但禁止发布衍生版本。具体见仓库根目录的 LICENSE。
Q14: 去哪里提 Bug / 功能建议?
- GitHub Issues:https://github.com/muleiwu/dwz-server/issues
- CNB Issues:https://cnb.cool/mliev/dwz/dwz-server/-/issues
- 官方文档:https://www.mliev.com/docs/dwz
- 社群:加入 QQ 群 1021660914