# AM Downloader 独立的音乐搜索与下载 Web 服务,使用 AM 音乐 API 解析资源,并可选同步到 WebDAV/NAS。 ## 特性 - 多用户登录、角色与权限隔离(admin / privileged / user) - 积分账户、预扣、成功扣除、失败退款 - 兑换码批次生成、使用、撤销与审计 - 音乐搜索与分页 - 下载队列、用户任务去重、跨用户媒体资源去重、失败重试 - 自动识别实际音频格式,避免错误扩展名 - 标记解析后的音质与实际音质 - WebDAV/NAS 同步 - 可配置同曲低音质版本清理策略 - 可配置上传成功后的本地文件清理策略 - Docker Compose 部署 ## 架构 `9540` 提供 Downloader Web/API;音乐解析服务通过配置的 `AM_API_URL` 访问,默认指向本机 `9530`。 运行时数据库和下载文件不会进入 Git 仓库。 ## 快速部署 ```bash git clone cd am-downloader docker compose up -d --build ``` 默认访问:`http://127.0.0.1:9540` ## 配置 Docker Compose 中只保存非敏感的运行参数。WebDAV 凭据通过 Web UI 的设置页面写入运行时数据库,**不要将数据库提交到 Git**。 可配置: - `PORT`:Web 服务端口,默认 `9540` - `DB_PATH`:SQLite 数据库路径 - `DOWNLOAD_DIR`:下载目录 - `AM_API_URL`:AM 音乐 API 地址 - `WORKERS`:下载 worker 数量 首次部署后进入设置页面填写 WebDAV 地址、用户名、密码和远程目录。 ## 数据与安全 以下内容属于运行时数据,默认被 `.gitignore` 排除: - `data/` - `downloads/` - `*.db` - 日志、临时文件和本地环境文件 提交前应检查 Git diff,确认没有密码、Token、Cookie、私有密钥或个人环境配置。 ## 开发 ```bash go test ./... go build -o am-downloader . ``` 前端为单页静态界面,由 Go 服务直接提供。 ## API 认证: - `POST /api/auth/login` - `POST /api/auth/logout` - `POST /api/auth/password` - `GET /api/auth/me` 用户功能: - `GET /api/search` - `GET /api/tasks` - `POST /api/tasks` - `POST /api/tasks/:id/retry` - `DELETE /api/tasks/:id` - `GET /api/credits` - `POST /api/redeem` - `GET/PUT /api/webdav/config` - `POST /api/webdav/test` 管理员功能: - `GET/POST /api/admin/users` - `PUT /api/admin/users/:id` - `GET /api/admin/redeem` - `POST /api/admin/redeem` - `POST /api/admin/redeem/:id/revoke` - `GET /api/admin/audit` - `GET/PUT /api/admin/settings` - `POST /api/admin/webdav/test` ## 数据库迁移注意事项 首次从旧版本升级时,启动过程会自动执行 GORM schema migration,并将旧任务归属到首次创建的管理员账号;同时把旧的全局任务唯一索引改为按用户隔离的唯一索引,并创建共享媒体资源表。 升级前仍建议先备份 `data/downloader.db`。Docker 部署时不要把 `data/` 或 `downloads/` 加入 Git。 当前版本不会主动删除旧媒体文件;媒体资源记录缺失本地文件时会在下一次请求中重新取得资源。