diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index c7ee884..39af9f5 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -700,7 +700,7 @@ uv run python tests/test_moves.py ### P4:可选部署 - 反向代理、TLS、远程访问鉴权; -- 如有需要再提供 Dockerfile; +- 仓库已提供 `Dockerfile` / `docker-compose.yml` / `config.docker.example.json`;容器内执行 `python app.py --config /config/config.json`,挂载 `/config` 与 `/data`; - Docker 不作为本机开发、联调或日常运行的前置条件。 --- diff --git a/README.md b/README.md index 72ff753..6ab113c 100644 --- a/README.md +++ b/README.md @@ -207,6 +207,41 @@ uv run python tools/import_fans_history.py --from-file data.js --days 90 - 页面的“日增”只在存在前一天数据时计算,跨多天不会标成日增; - 写入前建议先备份 `data/app.db`,例如 `data/backup/app-pre-fans-YYYYMMDD.db`。 +## 快速部署(Docker) + +仓库根目录已包含 `Dockerfile`、`docker-compose.yml`、`.dockerignore` 和 `config.docker.example.json`。 + +```powershell +# 1. 准备服务器配置;至少填写 B 站 Cookie / Telegram,并保留 /data 绝对路径 +Copy-Item config.docker.example.json config.json + +# 2. 构建并后台启动 +docker compose up -d --build + +# 3. 查看日志与健康状态 +docker compose logs -f +curl http://127.0.0.1:8080/api/health +``` + +- 容器执行 `python app.py --config /config/config.json`,同时运行只读 Web、调度和 Telegram; +- `config.json` 挂载到 `/config/config.json`,`data/` 挂载到 `/data/`; +- 服务器配置需使用 `web.host = 0.0.0.0` 并设置 `web.auth_token`,否则服务拒绝启动; +- `storage.database_path` 使用 `/data/app.db`,`storage.backup_dir` 使用 `/data/backup`; +- 首次部署可先在本地执行 `uv run python app.py auth --account read` 扫码,再把生成好的 `config.json` 放到服务器; +- 也可在容器内扫码:`docker compose run --rm board python app.py auth --account read --no-browser`,二维码会打印在临时文件路径,可用 `docker cp` 取出; +- 数据卷包含数据库、备份与预览库,建议定期备份 `/data`。 + +不使用 Compose 时: + +```powershell +docker build -t reaction-board . +docker run -d --name reaction-board --restart unless-stopped ` + -p 8080:8080 ` + -v ${PWD}/config.json:/config/config.json ` + -v ${PWD}/data:/data ` + reaction-board +``` + ## 配置 复制样例配置,并填写 B 站账号信息: diff --git a/project.md b/project.md index 2175b06..b13800f 100644 --- a/project.md +++ b/project.md @@ -697,15 +697,13 @@ fan_delta_cum = follower(d) - follower(首日) ## 10. 部署 -```dockerfile -FROM python:3.14-slim -WORKDIR /app -COPY . /app -ENV TZ=Asia/Shanghai PYTHONUNBUFFERED=1 -VOLUME ["/data"] -EXPOSE 8080 -HEALTHCHECK CMD python -c "import urllib.request;urllib.request.urlopen('http://127.0.0.1:8080/api/health')" -CMD ["python", "app.py"] +仓库已提供: + +```text +Dockerfile 单容器镜像(只安装 httpx 0.28.1) +docker-compose.yml 挂载 ./config.json → /config、./data → /data +.dockerignore 排除凭据、数据、测试与本地环境 +config.docker.example.json 服务器配置样例(0.0.0.0 + /data 绝对路径) ``` - 单容器跑「调度 + Web」,数据卷 `/data/app.db`;