合并应用宝 Worker 容器
This commit is contained in:
@@ -1,18 +0,0 @@
|
||||
FROM node:20-bookworm-slim
|
||||
|
||||
ENV PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1 NODE_ENV=production
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends python3 python3-pip ca-certificates \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& python3 -m pip install --no-cache-dir --break-system-packages --upgrade pip
|
||||
|
||||
WORKDIR /app
|
||||
COPY package.json package-lock.json ./
|
||||
RUN npm ci --omit=dev
|
||||
COPY requirements-worker.txt ./
|
||||
RUN python3 -m pip install --no-cache-dir --break-system-packages -r requirements-worker.txt
|
||||
COPY runtime/ ./
|
||||
RUN mkdir -p /app/config/worker-jobs
|
||||
EXPOSE 8810
|
||||
HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD python3 -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8810/health')"
|
||||
CMD ["python3", "scripts/yyb-worker.py", "--host", "0.0.0.0", "--port", "8810"]
|
||||
@@ -1,15 +1,14 @@
|
||||
# YYB Worker Runtime
|
||||
|
||||
此目录是部署到 `douyu_login_py` 的最小 YYB 运行时。构建上下文只包含 Worker 启动所需的 Python、Node/jsdom 依赖、协议脚本和静态重放数据。
|
||||
此目录是随 `douyu-login` 主镜像部署的 YYB 运行时代码。构建会将 Worker 所需的 Python、Node/jsdom 依赖、协议脚本和静态重放数据纳入同一镜像。
|
||||
|
||||
- 源码分析和协议验证工作区仍在 `js_reverse/sites/yyb`;不要将该分析仓库上传到服务器。
|
||||
- 不要向 `runtime/config/` 放入 Cookie、订单响应、二维码或付款链接。每个任务的动态数据仅写入 Docker volume 挂载的 `/app/config/worker-jobs/<job-id>/`。
|
||||
- 不要向 `runtime/config/` 放入 Cookie、订单响应、二维码或付款链接。每个任务的动态数据仅写入挂载目录 `/app/data/yyb-worker-jobs/<job-id>/`。
|
||||
- `mall-order-template.json` 仅保留请求结构与非用户常量。登录态、商品、区服、角色、支付平台、动态令牌和加密字段均由当前任务运行时填充。
|
||||
- 本服务没有 Compose 端口映射,只允许 `douyu-login` 通过默认 Compose 内网的 `http://yyb-worker:8810` 访问。`YYB_WORKER_KEY` 必须与后台服务配置一致。
|
||||
- Worker 在应用容器内仅监听 `127.0.0.1:8810`,Web 后端通过本机地址访问;`YYB_WORKER_KEY` 必须与后台服务配置一致。
|
||||
|
||||
本地独立验证:
|
||||
|
||||
```bash
|
||||
docker build -t douyu-yyb-worker:local services/yyb-worker
|
||||
docker run --rm -e YYB_WORKER_KEY=test-key douyu-yyb-worker:local
|
||||
YYB_WORKER_KEY=test-key uv run python runtime/scripts/yyb-worker.py --host 127.0.0.1
|
||||
```
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
curl_cffi>=0.13
|
||||
pycryptodome>=3.20
|
||||
segno>=1.6
|
||||
@@ -14,6 +14,7 @@ import json
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
import uuid
|
||||
@@ -96,7 +97,7 @@ def _start_login(job_id: str, provider: str, timeout: int) -> None:
|
||||
directory = _job_dir(job_id)
|
||||
session = directory / "mall-session.json"
|
||||
qr = directory / ("qq-login.jpg" if provider == "qq" else "wechat-login.jpg")
|
||||
command = ["python3", f"scripts/login-{provider}.py", "--session", str(session),
|
||||
command = [sys.executable, f"scripts/login-{provider}.py", "--session", str(session),
|
||||
"--qr", str(qr), "--timeout", str(timeout)]
|
||||
with _lock:
|
||||
job["provider"] = provider
|
||||
@@ -135,7 +136,7 @@ def _start_payment(job_id: str, selection: dict) -> None:
|
||||
session = directory / "mall-session.json"
|
||||
response = directory / "mall-order-response.json"
|
||||
output = directory / "jsdom-order"
|
||||
command = ["python3", "main.py", "mall", "auto", "--session", str(session),
|
||||
command = [sys.executable, "main.py", "mall", "auto", "--session", str(session),
|
||||
"--order-template", str(ROOT / "config" / "mall-order-template.json"),
|
||||
"--quantity", "1", "--product-id", str(selection["product_id"]),
|
||||
"--offer-id", str(selection["offer_id"]),
|
||||
@@ -149,7 +150,7 @@ def _start_payment(job_id: str, selection: dict) -> None:
|
||||
job = _jobs[job_id]
|
||||
if job.get("status") != "success" or not response.exists():
|
||||
return
|
||||
pay_command = ["python3", "scripts/jsdom-pay.py", "--session", str(session),
|
||||
pay_command = [sys.executable, "scripts/jsdom-pay.py", "--session", str(session),
|
||||
"--mall-response", str(response), "--out-dir", str(output),
|
||||
"--zone-id", str(selection["zone_id"]),
|
||||
"--pf", str(selection.get("order_pf", "")),
|
||||
|
||||
Reference in New Issue
Block a user