NekoBox
匿名提问箱 / Anonymous Question Box
 ## 安装 ### 需求 * [Go](https://golang.org/dl/) (v1.19 或更高版本,`go.mod` 声明 `go 1.25.0`) * [MySQL](https://www.mysql.com/downloads/) (v5.7 或更高版本) * [Redis](https://redis.io/download/) (v6.0 或更高版本) > 编译依赖说明:`chai2010/webp` 需要 CGO 与系统 `libwebp`(Debian/Ubuntu:`apt install libwebp-dev`), > 静态图片上传时会自动转换为 WebP。若安装失败,转换将自动回退为原始格式(不影响编译之外的功能)。 > 动画 GIF 转 WebP 需要系统安装 `cwebp` 命令行工具,未安装时回退为原始 GIF。 ### 从源码编译 ```bash git clone https://github.com/NekoWheel/NekoBox.git cd NekoBox go build -o NekoBox ``` ### 编辑配置文件 ```bash cp conf/app.sample.ini conf/app.ini ``` ### 运行 ```bash ./NekoBox web ``` ### 常用命令 | 命令 | 用途 | | ---- | ---- | | `./NekoBox web` | 启动 Web 服务 | | `./NekoBox censor` | 批量补审未审查的提问/回答(需配置文本审查服务) | | `./NekoBox uid` | 为历史用户补生成 UID | | `./NekoBox ban --email user@example.com` | 封禁用户并连带清理其提问、追问、私聊与消息(不可恢复,执行前二次确认) | ## 功能特性 - **匿名提问 / 私密提问**:支持匿名或登录后提问,可标记私密(仅通过 token 链接可见) - **问题置顶 / 精选回答**:提问箱主人在管理页置顶提问,公开主页置顶优先展示 - **回答后追问**:提问者凭 token 可对已回答的问题最多追问 3 次,主人可回复 - **Markdown 回答**:回答支持 Markdown 排版(服务端渲染 + 白名单过滤防 XSS) - **分享图**:提问箱主页分享图与单题分享图(含二维码,复用同一绘制模块) - **页面密码 / 提问密码**:可选为提问箱页面设置访问密码、为提问设置密码 - **同 IP 重复内容拦截**:同一 IP 在 5 分钟内提交相同内容会被拒绝 - **匿名 / 登录分级限流**:登录用户享有更高请求额度(端点级滑动窗口限流) - **IP 黑名单**:支持精确 IP 与 CIDR,命中后跳转到指定 URL - **私聊**:登录用户可向开启私聊的提问箱发起会话,支持图片、拉黑、每日上限 - **提问箱统计看板**:管理页展示总提问 / 已回答 / 未回答 / 私密 / 置顶 / 私聊统计 - **全文搜索**:管理页可按关键词搜索自己提问箱的提问与回答 - **热门问题 / 标签榜**:探索页展示热门标签与最新活跃的公开提问 - **数据导出**:支持 Excel 导出与 JSON 全量导出(含追问与私聊,可迁移备份) - **多语言**:简体中文 / 繁體中文 / English / 日本語,支持按 cookie、用户配置与提问箱配置切换 - **深色模式**:全站一键切换深/浅色(cookie 持久化) - **内容审查**:七牛 + 阿里云文本审查(可配置),结果带 30 天缓存 ## 架构   NekoBox 使用 GitHub Actions 进行持续集成和部署。 当用户访问 NekoBox 时,请求将会被发送至阿里云 CDN,CDN 的访问日志将会被实时推送到阿里云日志服务 (SLS)。日志数据将在 SLS 中存储 180 天,用于审计。 用户的信息、提问和回答将被存储在 MySQL 数据库中。 用户的会话、CSRF 令牌和电子邮件验证令牌将被暂时存储在 Redis 中。 用户的整个请求和响应链路将被上传到 Uptrace 用于调试。这些数据将被储存 30 天。管理员可以使用用户提供的 `TraceID` 来追踪查询指定的请求。 当用户提交提问时,问题的内容将被发送到七牛文本审查服务进行审查。如果提问内容存在问题,该内容将被发送到阿里云文本审查服务进行二次审查。 如果内容审查仍未通过,该提问将被拒绝发送。这是由于七牛文本审查服务不是很准确,一些非冒犯性的内容可能被七牛文本审查误报。 当用户收到新的提问时,阿里云邮件服务(DM)会向用户的邮箱发送一封邮件。 你可以在主页查看 NekoBox 的更新日志,也欢迎访问赞助页面来打钱支持 NekoBox。 更新日志和赞助商名单存储在独立部署的 Pocketbase 服务中。 ## 开源协议 MIT License