Files
am-downloader/README.md
T

108 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 <your-gitea-repository>
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。
当前版本不会主动删除旧媒体文件;媒体资源记录缺失本地文件时会在下一次请求中重新取得资源。