From af8d3a859f0e5ae1960925e2d1788285e8cc3f11 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Thu, 25 Jun 2026 14:07:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/DEPLOYMENT.md | 109 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 95 insertions(+), 14 deletions(-) diff --git a/docs/DEPLOYMENT.md b/docs/DEPLOYMENT.md index 9f7c61c..f92e16f 100644 --- a/docs/DEPLOYMENT.md +++ b/docs/DEPLOYMENT.md @@ -8,7 +8,7 @@ - 必须能运行 Chromium 浏览器(Playwright)。 - 目标站点受 Cloudflare 保护,建议使用日本 IP 代理以提高稳定性。 -- 会话可存储在 Redis(跨实例复用)或进程内存(单实例)中。 +- **必须部署 Redis**:用于 Cloudflare 会话复用,以及与下游采购 worker(`jp_pruchase_zdh_5`)共享任务队列、通知与订单状态。 - 默认监听 `0.0.0.0:31106`。 ## 2. 部署要求 @@ -18,13 +18,69 @@ - Python >= 3.12 - 支持 Docker 与 Docker Compose(推荐) - 可访问日本 IP 的代理(推荐,非必须) -- 可选:Redis >= 5.0 +- **必须:Redis >= 5.0**(本服务强依赖 Redis,部署时必须同时部署) ### 2.2 端口 - 服务默认暴露 `31106`。 - 若修改端口,请同步调整 `docker-compose.yml` 的端口映射与 `.env` 中的 `SURUGAYA_APP_PORT`。 +## 2.3 Redis 部署 + +本服务强依赖 Redis,用于: + +- 跨请求/跨实例复用通过 Cloudflare 后的会话(`cf_clearance`)。 +- 与下游采购 worker(`jp_pruchase_zdh_5`)共享采购任务队列、通知(news)与订单(trade)状态。 +- 作为 `/api/news`、`/api/trade`、任务投递等接口的数据源。 + +因此部署 `jp_surugaya` 时必须**同时部署并启动 Redis**。 + +### Windows 裸机部署 Redis + +1. 下载 Windows 原生 Redis 二进制,例如 [redis-windows/releases](https://github.com/redis-windows/redis-windows/releases)。 +2. 解压到 `C:\jp-deploy\redis`。 +3. 编辑 `redis.windows.conf`(可选): + - 设置 `requirepass your_redis_password`。 + - 设置 `bind 0.0.0.0` 或保持 `127.0.0.1` 按需监听。 +4. 启动: + ```powershell + cd C:\jp-deploy\redis + .\redis-server.exe redis.windows.conf + ``` +5. 验证: + ```powershell + .\redis-cli.exe ping + # 若设置了密码 + .\redis-cli.exe -a your_redis_password ping + ``` + +### Docker Compose 部署 Redis + +在 `docker-compose.yml` 中增加 `redis` 服务,例如: + +```yaml +services: + redis: + image: redis:7-alpine + container_name: surugaya-redis + restart: unless-stopped + command: redis-server --requirepass your_redis_password + networks: + - jp + ports: + - "6379:6379" + volumes: + - ./redis-data:/data + + jp_surugaya: + # ... 原有配置 + environment: + SURUGAYA_REDIS_HOST: redis + SURUGAYA_REDIS_PASSWORD: your_redis_password +``` + +> 生产环境建议将 Redis 数据目录持久化,并限制 `6379` 端口仅内网可访问。 + ## 3. 环境变量配置 所有配置项均通过 `SURUGAYA_` 前缀的环境变量注入,也可写入项目根目录的 `.env` 文件,由 `pydantic-settings` 自动加载。生产部署至少需要修改以下变量: @@ -40,7 +96,7 @@ | `SURUGAYA_PROXY_SERVER` | 代理地址 | 建议配置日本 IP 代理 | | `SURUGAYA_PROXY_USERNAME` | 代理用户名 | 按需配置 | | `SURUGAYA_PROXY_PASSWORD` | 代理密码 | 按需配置 | -| `SURUGAYA_REDIS_HOST` | Redis 主机 | 多实例部署时建议配置 | +| `SURUGAYA_REDIS_HOST` | Redis 主机 | **必须**,例如 `127.0.0.1` 或 `redis` | 完整示例见项目根目录 `.env.example`。 @@ -76,20 +132,23 @@ SURUGAYA_REDIS_DB=0 ### 4.1 步骤 1. 克隆仓库并进入项目根目录。 -2. 复制环境变量模板并修改: +2. 确保 Redis 已部署: + - 若使用 Docker Compose,请在 `docker-compose.yml` 中加入 Redis 服务(参考 [2.3 Redis 部署](#23-redis-部署))。 + - 若使用外部 Redis,在 `.env` 中正确填写 `SURUGAYA_REDIS_HOST` 与密码。 +3. 复制环境变量模板并修改: ```bash cp .env.example .env - # 编辑 .env,重点修改 SURUGAYA_BEARER_TOKEN 与代理配置 + # 编辑 .env,重点修改 SURUGAYA_BEARER_TOKEN、Redis 连接与代理配置 ``` -3. 构建并启动容器: +4. 构建并启动容器: ```bash docker compose up -d --build ``` -4. 查看日志: +5. 查看日志: ```bash docker compose logs -f @@ -110,7 +169,19 @@ docker compose up -d --build ## 5. 部署方式二:裸机/虚拟机 -### 5.1 安装依赖 +### 5.1 前置条件:部署 Redis + +裸机/虚拟机部署前,请先部署 Redis: + +- **Windows**:参考 [2.3 Redis 部署](#23-redis-部署) 中的 Windows 裸机方式。 +- **Linux**:安装并启动 Redis: + ```bash + sudo apt-get install redis-server + sudo systemctl enable redis-server --now + ``` +- 确认 `.env` 中的 `SURUGAYA_REDIS_HOST`、`SURUGAYA_REDIS_PORT`、`SURUGAYA_REDIS_PASSWORD` 配置正确。 + +### 5.2 安装依赖 推荐使用 `uv` 作为包管理器: @@ -125,6 +196,8 @@ uv sync --extra dev uv run playwright install chromium ``` +> 说明:`surugaya-common` 位于本仓库 `packages/surugaya_common` 目录下,通过 `tool.uv.workspace` 作为本地 workspace 包被引用。`uv sync` 会自动安装该本地包,无需额外配置私有索引。 + 若使用传统 pip: ```bash @@ -132,7 +205,7 @@ python -m pip install -e ".[dev]" python -m playwright install chromium ``` -### 5.2 启动服务 +### 5.3 启动服务 ```bash # 方式 1:直接运行 @@ -142,7 +215,7 @@ python -m app.main uvicorn app.main:app --host 0.0.0.0 --port 31106 ``` -### 5.3 后台运行(systemd 示例) +### 5.4 后台运行(systemd 示例) 创建 `/etc/systemd/system/surugaya.service`: @@ -175,7 +248,9 @@ sudo systemctl start surugaya ## 6. 部署方式三:Windows 本地开发 -Windows 本地开发可使用提供的 PowerShell 启动脚本: +Windows 本地开发前,请先按 [2.3 Redis 部署](#23-redis-部署) 启动 Redis。 + +启动脚本: ```powershell .\start-server.ps1 @@ -223,8 +298,8 @@ curl -H "Authorization: Bearer " \ ### 8.3 会话存储 -- 单实例:不配置 Redis,会话退回到进程内存。 -- 多实例或需要跨进程复用:配置 Redis,`cf_clearance` 等会话可在实例间共享。 +- **Redis 是必选项**:本服务必须与 Redis 一起部署,用于会话复用、与下游采购 worker 共享任务与状态。 +- 配置 Redis 后,`cf_clearance` 等会话可在实例间共享;未配置 Redis 时,部分接口(如 `/api/news`、`/api/trade`、任务投递)将不可用。 ### 8.4 日志 @@ -255,7 +330,13 @@ curl -H "Authorization: Bearer " \ - 裸机部署时使用 `start-server.ps1` 会自动结束占用进程。 - Linux 可使用 `lsof -i :31106` 或 `ss -tlnp | grep 31106` 定位占用进程。 -### 9.4 内存持续增长 +### 9.4 Redis 连接失败 + +- 确认 Redis 服务已启动:`redis-cli ping`(Linux)或 `.\redis-cli.exe ping`(Windows)。 +- 检查 `.env` 中的 `SURUGAYA_REDIS_HOST`、`SURUGAYA_REDIS_PORT`、`SURUGAYA_REDIS_PASSWORD` 是否正确。 +- 确认防火墙未拦截 Redis 端口(默认 `6379`)。 + +### 9.5 内存持续增长 - 检查 `SURUGAYA_BROWSER_RECYCLE_AFTER_CONTEXTS` 与 `SURUGAYA_BROWSER_RECYCLE_AFTER_SECONDS` 是否被误关闭。 - 长时间运行后观察 `logs/` 中浏览器回收日志。