Replace artifactory URLs in lockfile and update runtime/default docs to use https://registry.npmjs.org for dependency installs. Co-authored-by: Cursor <cursoragent@cursor.com>
104 lines
3.2 KiB
Markdown
104 lines
3.2 KiB
Markdown
# media_crawler
|
||
|
||
资源爬取自动入库项目,采用前后端分层:
|
||
|
||
- `frontend/`: Vue + JavaScript 页面
|
||
- `backend/`: Python Flask API(编排 TMDB -> HDHIVE -> Emby -> CMS)
|
||
|
||
## 本地启动
|
||
|
||
### 1) 启动后端(Flask)
|
||
|
||
```bash
|
||
cd backend
|
||
python3 -m venv .venv
|
||
source .venv/bin/activate
|
||
pip install -r requirements.txt
|
||
cp .env.example .env
|
||
python app.py
|
||
```
|
||
|
||
默认端口:
|
||
- 后端:`14620`
|
||
- 前端:`14621`
|
||
|
||
后端 `.env` 中 `HDHIVE` 相关参数按 OpenAPI 文档配置:
|
||
|
||
- `HDHIVE_BASE_URL` 例如 `https://hdhive.com`
|
||
- `HDHIVE_API_KEY` 对应请求头 `X-API-Key`(必填)
|
||
- `HDHIVE_ACCESS_TOKEN` 对应 `Authorization: Bearer ...`(按授权场景可选)
|
||
|
||
后端 `CMS` 入库参数支持两种模式:
|
||
|
||
- 直接给固定 token:`CMS_TOKEN`
|
||
- 自动登录获取 token:`CMS_LOGIN_URL` + `CMS_USERNAME` + `CMS_PASSWORD`
|
||
|
||
入库接口地址使用 `CMS_ADD_SHARE_URL`(或 `CMS_BASE_URL` 自动拼接 `/api/cloud/add_share_down`)。
|
||
|
||
### 2) 启动前端(Vite)
|
||
|
||
```bash
|
||
cd frontend
|
||
cp .env.example .env
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
## 页面能力
|
||
|
||
- 主页面支持按关键词在 TMDB 搜索影视
|
||
- 点击影视封面进入详情页,展示 HDHive 资源列表
|
||
- 点击资源链接触发入库任务(按资源 slug 入库)
|
||
- 任务中心位于二级页面 `/tasks`
|
||
- 前端调用 Flask API:`POST /api/tasks`、`GET /api/tasks`、`GET /api/tasks/{taskId}/logs`
|
||
- 前端新增接口:`GET /api/media/search`、`GET /api/media/{type}/{tmdbId}`
|
||
- 任务状态、结果、错误和步骤日志展示
|
||
- 后端使用 SQLite 保存任务、资源和日志,并按 `tmdb_id` 做幂等控制
|
||
- 后端统一错误分类:`validation`、`authentication`、`authorization`、`rate_limit`、`not_found`、`business_rule`、`network`、`timeout`、`upstream`、`internal`
|
||
|
||
## Docker 单容器运行
|
||
|
||
项目提供了单容器运行前后端的 `Dockerfile`,容器启动时会先从 Git 拉取最新代码,然后再启动:
|
||
|
||
- Flask 后端:`14620`
|
||
- 前端预览服务:`14621`
|
||
|
||
### 构建镜像
|
||
|
||
```bash
|
||
docker build -t media-crawler:latest .
|
||
```
|
||
|
||
构建较慢时可使用加速参数(BuildKit + host 网络 + 可选 apt 镜像):
|
||
|
||
```bash
|
||
DOCKER_BUILDKIT=1 docker build --network=host \
|
||
--build-arg APT_MIRROR=mirrors.aliyun.com \
|
||
-t media-crawler:latest .
|
||
```
|
||
|
||
### 运行容器
|
||
|
||
```bash
|
||
docker run --rm -it \
|
||
-p 14620:14620 \
|
||
-p 14621:14621 \
|
||
-v media_crawler_runtime:/app/runtime \
|
||
--env-file backend/.env \
|
||
-e GIT_REPO_URL=https://git.rc707blog.top/rose_cat707/media_crawler.git \
|
||
-e GIT_BRANCH=main \
|
||
media-crawler:latest
|
||
```
|
||
|
||
可选环境变量:
|
||
|
||
- `GIT_REPO_URL`:容器启动时拉取代码的仓库地址
|
||
- `GIT_BRANCH`:拉取分支(默认 `main`)
|
||
- `WORKTREE_DIR`:容器内代码目录(默认 `/app/runtime`)
|
||
- `NPM_REGISTRY`:前端依赖安装镜像源(默认 `https://registry.npmjs.org`)
|
||
- `NPM_FALLBACK_REGISTRY`:`NPM_REGISTRY` 失败时回退源(默认 `https://registry.npmjs.org`)
|
||
- `FORCE_FRONTEND_REBUILD`:强制每次重装前端依赖并重建(默认 `0`,仅 lockfile 变更时才安装构建)
|
||
- `NPM_INSTALL_TIMEOUT_SEC`:前端依赖安装超时秒数(默认 `900`)
|
||
- `NPM_PROGRESS_INTERVAL_SEC`:安装过程心跳日志间隔秒数(默认 `15`)
|
||
|