基于 FastAPI + React + MySQL + Redis + Playwright 的闲鱼多账号自动化系统。
主系统负责账号管理、消息收发、自动回复、自动发货、商品发布与后台管理;promotion 子项目负责返佣账号、选品规则、素材库、发布规则、删除规则和相关修复任务。
🔴 诚邀各位开发者提交pr,完善系统
🔴 承接各类项目定制,各类项目均可,有需要可联系,另外我菜,不一定都会
🔴 我用夸克网盘给你分享了「自动发货」,点击链接或复制整段内容,打开「夸克网盘APP」即可获取。
🔴 /~79313YhCQU~:/
🔴 链接:https://pan.quark.cn/s/af567356cba7
| 微信群 | QQ群 | 微信公众号 | Telegram | 赞赏支持 |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 扫码加好友拉微信交流群 | 扫码加入QQ交流群 | 关注公众号发送"最新源码"获取最新代码 | 扫码加入Telegram群 | 如果觉得好用,请作者喝杯咖啡 |
如群二维码过期,请关注公众号获取最新群链接。
| 模块 | 说明 |
|---|---|
| 多账号管理 | 支持多个闲鱼账号登录、状态切换、Cookie 维护与登录续期 |
| 自动回复 | 支持文本关键词、图片关键词、默认回复、商品专属回复 |
| AI 回复 | 支持大模型上下文对话与智能回复 |
| 自动发货 | 支持卡券、虚拟商品、自动补发、发送结果记录 |
| 在线聊天 | 支持会话列表、消息收发、聊天联动 |
| 商品发布 | 支持素材库、地址库、单品发布、批量发布、发布日志 |
| 订单与评价 | 订单拉取、自动评价、求小红花、状态跟踪 |
| 商品采集与分销 | Goofish 采集、货源管理、对接记录、结算链路 |
| 通知与风控 | 支持消息通知、风控日志、系统反馈与公告管理 |
| 模块 | 说明 |
|---|---|
| 返佣账号 | 返佣账号登录、状态管理、Cookie 维护 |
| 选品规则 | 按规则抓取候选商品并自动写入素材库 |
| 素材库 | 管理标题、图片、详情、淘口令、短链、库存、发布状态 |
| 发布规则 | 定时发布返佣商品,复用公共发布能力 |
| 删除规则 | 定时删除已发布商品 |
| 补偿任务 | 已发布商品 ID 回写、短链修复、卡券补偿等 |
| 技术 | 说明 |
|---|---|
| FastAPI | 主系统与返佣后端 API 服务 |
| SQLAlchemy 2.0 | ORM 与数据库访问 |
| MySQL 8.0 | 主数据存储 |
| Redis 7 | 缓存、会话与任务辅助 |
| Playwright | 登录、Cookie 刷新、发布等浏览器自动化 |
| APScheduler | 定时任务调度 |
| Loguru | 日志管理 |
| 技术 | 说明 |
|---|---|
| React 18 + TypeScript | 主系统与返佣前端 |
| Vite | 开发与构建 |
| TailwindCSS | 主系统 UI 样式 |
| Zustand | 状态管理 |
| Lucide React | 图标体系 |
| 技术 | 说明 |
|---|---|
| Docker / Docker Compose | 容器化部署 |
| Nginx | 前端静态资源与反向代理 |
xianyu-auto-reply/
├── backend-web/ # 主 Web API 服务(端口 8089)
├── websocket/ # 闲鱼连接与消息处理服务(端口 8090)
├── scheduler/ # 定时任务服务(端口 8091)
├── common/ # 主系统与返佣系统共享模块
├── frontend/ # 主系统前端(端口 9000)
├── launcher/ # Windows 桌面启动器(Nuitka 打包为 EXE)
├── promotion/
│ ├── backend/ # 返佣后端(端口 8092)
│ └── frontend/ # 返佣前端(端口 9001)
├── scripts/ # CI/CD 与工具脚本
├── docker/frontend/ # 前端 Dockerfile 与 Nginx 配置
├── docker-compose.yml # 本地源码构建编排
├── deploy.sh # 一键部署脚本(自动生成远程镜像版 compose)
├── deploy_remote.sh # 远程 MySQL/Redis 一键部署脚本(自动生成 docker-compose.remote.yml)
├── update.sh # 一键更新脚本(拉取最新远程镜像)
├── build.sh # 本地源码全量构建脚本
├── build_frontend.sh # 单独构建并重启 Frontend
├── build_backend_web.sh # 单独构建并重启 Backend-Web
├── build_websocket.sh # 单独构建并重启 WebSocket
├── build_scheduler.sh # 单独构建并重启 Scheduler
├── EXE打包构建.bat # Windows 桌面启动器打包脚本
├── 离线依赖打包.bat # Windows 离线依赖打包脚本
└── README.md
| 服务 | 默认端口 | 说明 |
|---|---|---|
frontend |
9000 | 主系统前端 |
backend-web |
8089 | 主系统 API 网关、业务接口 |
websocket |
8090 | 闲鱼 WebSocket、消息收发、登录与订单联动 |
scheduler |
8091 | 定时任务执行器 |
promotion/backend |
8092 | 返佣后端 API |
promotion/frontend |
9001 | 返佣前端 |
frontend 负责界面与交互backend-web 负责大部分业务 APIwebsocket 负责闲鱼实时连接、扫码登录、消息处理scheduler 负责自动发货、评价、订单拉取、Cookie 刷新等定时任务common 提供模型、数据库、自检、公共服务与工具promotion/ 目录,前后端独立,当前不在根目录 Docker Compose 编排内/health 健康检查接口/health/ping 检测消息服务存活,并显示账号启动进度或失败原因;调度完成不代表所有账号已连接,实际连接状态以账号管理为准。关闭服务时会先取消未完成的账号调度,再清理账号任务。服务器已安装 Docker 与 Docker Compose 后,直接执行一键部署脚本即可:
curl -fsSL https://xy-update.zhinianboke.com/deploy.sh | sed 's/\r$//' | bash
该脚本会自动完成部署所需的配置生成、镜像拉取、旧容器清理与服务启动。
更新版本,直接执行一键更新脚本即可:
curl -fsSL https://xy-update.zhinianboke.com/update.sh | sed 's/\r$//' | bash
git clone https://github.com/zhinianboke/xianyu-auto-reply.git
cd xianyu-auto-reply
bash deploy.sh
.env 配置文件和 docker-compose.deploy.ymlhttp://服务器IP:9000http://服务器IP:8089/docsadmin / admin123后续更新:
bash update.sh
当 MySQL 和 Redis 由外部(如云数据库 RDS、独立服务器或已有实例)提供时,可使用 deploy_remote.sh。
该脚本不内置 mysql/redis 容器,仅拉取并启动 4 个应用服务(frontend / backend-web / websocket / scheduler),
数据库连接信息通过 .env.remote 配置。与方式一相同,直接远程拉取脚本执行即可:
# 1) 首次运行:自动生成 .env.remote 后退出,提示填写远程连接信息
curl -fsSL https://xy-update.zhinianboke.com/deploy_remote.sh | sed 's/\r$//' | bash
# 2) 编辑 .env.remote,填写真实的远程地址(勿填 localhost)
# MYSQL_HOST / REDIS_HOST 等
vim .env.remote
# 3) 再次运行:校验配置 → 自动生成 docker-compose.remote.yml → 拉取镜像 → 启动
curl -fsSL https://xy-update.zhinianboke.com/deploy_remote.sh | sed 's/\r$//' | bash
已克隆仓库的也可改用本地脚本:
bash deploy_remote.sh(首次生成配置后退出,填好.env.remote再次执行)。
.env.remote,每次运行自动生成 docker-compose.remote.yml,均不影响根目录原有的 .env / docker-compose.yml / docker-compose.deploy.ymlxianyu-backend-web / xianyu-websocket / xianyu-scheduler / xianyu-frontend),与方式二/方式四属于同一套部署,二者只需选其一,不要同时启动xianyu_data)并授权部署机 IP 远程访问,应用启动时会自动建表与补齐字段.env.remote 中填写 REDIS_PASSWORD= 即按无密码连接;有密码时填写实际密码。未定义 REDIS_PASSWORD 时使用默认密码 xianyu@2026,显式空值不会回退到默认密码max_connect_errors=100000;若出现错误码 1129,需在数据库服务器执行 FLUSH HOSTS 解除主机封锁host.docker.internal 或宿主机内网 IP,不要填 localhost / 127.0.0.1bash build.sh rebuild
常用命令:
| 命令 | 说明 |
|---|---|
bash build.sh rebuild |
删除旧容器与镜像,重新构建并启动 |
bash build.sh start |
启动服务 |
bash build.sh stop |
停止服务 |
bash build.sh restart |
重启服务 |
bash build.sh logs |
查看实时日志 |
bash build.sh status |
查看服务状态 |
单独重建某个服务(不影响其他服务):
bash build_frontend.sh # 重建前端
bash build_backend_web.sh # 重建 Backend-Web
bash build_websocket.sh # 重建 WebSocket
bash build_scheduler.sh # 重建 Scheduler
可以使用本机 MySQL / Redis,也可以仅用 Docker 启动基础设施:
docker compose up -d mysql redis
主系统常用 .env 配置示例:
ENVIRONMENT=development
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_DATABASE=xianyu_data
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
REDIS_POOL_SIZE=800
REDIS_SOCKET_TIMEOUT=5
REDIS_SOCKET_CONNECT_TIMEOUT=3
REDIS_SOCKET_KEEPALIVE=true
REDIS_SOCKET_KEEPALIVE_IDLE=60
REDIS_SOCKET_KEEPALIVE_INTERVAL=10
REDIS_SOCKET_KEEPALIVE_COUNT=3
REDIS_HEALTH_CHECK_INTERVAL=30
REDIS_PROTOCOL=2
REDIS_STARTUP_MAX_RETRIES=5
REDIS_STARTUP_RETRY_BASE_DELAY=1
REDIS_STARTUP_RETRY_CAP_DELAY=10
CORS_ORIGINS=*
BACKEND_WEB_PORT=8089
WEBSOCKET_PORT=8090
SCHEDULER_PORT=8091
WEBSOCKET_SERVICE_URL=http://127.0.0.1:8090
SCHEDULER_SERVICE_URL=http://127.0.0.1:8091
BACKEND_WEB_SERVICE_URL=http://127.0.0.1:8089
DB_POOL_SIZE=800
DB_MAX_OVERFLOW=60
DB_POOL_TIMEOUT=30
DB_POOL_RECYCLE=1800
DB_POOL_PRE_PING=true
DB_POOL_USE_LIFO=true
DB_CONNECT_TIMEOUT=10
STATIC_DIR=static
TZ=Asia/Shanghai
各服务的数据库连接池容量统一为 800,连接按需建立。各服务 .env.example、Docker 和本地启动器保留不同的溢出额度:
| 服务 | DB_POOL_SIZE | DB_MAX_OVERFLOW | 单进程峰值 |
|---|---|---|---|
| Backend-Web | 800 | 60 | 860 |
| WebSocket | 800 | 150 | 950 |
| Scheduler | 800 | 30 | 830 |
| 推广后端(可选) | 800 | 20 | 820 |
三个主服务峰值合计为 2640,启用推广后端后为 3460。Docker 的 MYSQL_MAX_CONNECTIONS 默认设为 4000;远程或本机 MySQL 需自行将 max_connections 配置到足够容量。多进程、多副本部署时,应按全部进程的峰值总和额外预留管理连接。
已有部署的 .env 不会被脚本覆盖,请同步检查服务目录中的 DB_POOL_SIZE,以及 Docker 部署目录中的 BACKEND_DB_POOL_SIZE、WEBSOCKET_DB_POOL_SIZE、SCHEDULER_DB_POOL_SIZE 和 MYSQL_MAX_CONNECTIONS。配置更新后需重启对应服务才能生效。
# Backend-Web 服务
cd backend-web
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -e .
python -m playwright install chromium
python -m patchright install chromium
python main.py
# WebSocket 服务
cd websocket
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -e .
python -m playwright install chromium
python -m patchright install chromium
python main.py
# Scheduler 服务
cd scheduler
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -e .
python -m playwright install chromium
python main.py
cd frontend
npm install
npm run dev
# 返佣后端
cd promotion/backend
pip install -e .
python main.py
# 返佣前端
cd promotion/frontend
npm install
npm run dev
| 变量 | 说明 |
|---|---|
MYSQL_HOST / MYSQL_PORT / MYSQL_USER / MYSQL_PASSWORD / MYSQL_DATABASE |
MySQL 连接 |
REDIS_HOST / REDIS_PORT / REDIS_PASSWORD / REDIS_DB |
Redis 连接 |
REDIS_POOL_SIZE / REDIS_SOCKET_TIMEOUT / REDIS_SOCKET_CONNECT_TIMEOUT / REDIS_SOCKET_KEEPALIVE / REDIS_SOCKET_KEEPALIVE_IDLE / REDIS_SOCKET_KEEPALIVE_INTERVAL / REDIS_SOCKET_KEEPALIVE_COUNT / REDIS_HEALTH_CHECK_INTERVAL / REDIS_PROTOCOL / REDIS_STARTUP_MAX_RETRIES / REDIS_STARTUP_RETRY_BASE_DELAY / REDIS_STARTUP_RETRY_CAP_DELAY |
Redis 连接池、超时、Keepalive、健康检查和启动重试配置 |
JWT_SECRET_KEY |
JWT 密钥,由数据库统一托管(首次启动自动生成并持久化),无需手动配置 |
INTERNAL_API_TOKEN |
服务间 /internal API 共享令牌,可留空;首次启动自动生成并持久化到数据库 |
BACKEND_WEB_PORT / WEBSOCKET_PORT / SCHEDULER_PORT |
各服务端口 |
WEBSOCKET_SERVICE_URL / SCHEDULER_SERVICE_URL / BACKEND_WEB_SERVICE_URL |
服务间调用地址 |
FRONTEND_SERVICE_URL |
公开状态接口探测前端的内部地址;Docker 默认 http://frontend:80,本机默认 http://127.0.0.1:9000;自定义端口或跨主机部署时覆盖 |
VITE_BACKEND_SERVICE_URL |
Vite 开发/预览环境的后端代理目标,可回退到 BACKEND_WEB_SERVICE_URL;默认 http://127.0.0.1:8089 |
BACKEND_WEB_PUBLIC_URL |
对外访问地址,用于生成文件 URL |
CORS_ORIGINS |
CORS 白名单 |
BROWSER_HEADLESS |
Playwright 是否无头运行 |
使用前端访问地址请求 GET /api/v1/public/status,无需登录或携带用户令牌。例如前端地址为 https://你的域名 时,请求 https://你的域名/api/v1/public/status;本机默认请求 http://127.0.0.1:9000/api/v1/public/status。Docker Nginx、Vite 开发/预览环境和桌面启动器均提供该入口。
尾部带斜杠的 GET /api/v1/public/status/ 也直接返回相同 JSON 并共享限流额度,不跳转到后端地址。Docker Compose 及部署、更新脚本均透传 FRONTEND_SERVICE_URL;需要自定义时在部署 .env 中填写后端能够访问的前端内部地址
| 日期 | 榜单 | 排名 | 周期新增 | 总 STAR |
|---|