在分布式爬虫系统中,部署与运维成本直接决定了系统的稳定性和扩展性。
为了让 Playwright Worker + Redis + MongoDB 这套组合可以一键启动、一键扩容、一键恢复,我们现在进入 Docker 容器化部署实战!
1. 项目目录结构建议
为了后续打包和部署更清晰,建议项目结构整理成这样:
/playwright-crawler/
│
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
│
├── worker.py # Worker 抓取逻辑
├── dispatcher.py # 任务调度器(Master)
├── monitor.py # FastAPI 监控模块
│
├── README.md # 项目文档
└── configs/
└── settings.yaml # (可选)集中配置项
2. 编写 Dockerfile(打包 Worker 容器)
首先,我们要能打包 Playwright 环境的 Python 容器。
Dockerfile 示例:
FROM mcr.microsoft.com/playwright/python:v1.41.0-jammy
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "worker.py"]
说明:
- 使用官方 Playwright Python 镜像(自带 Chromium/Firefox/WebKit)。
- 安装 Python 依赖。
- 拷贝项目代码。
- 默认启动
worker.py
(你也可以通过参数控制启动不同角色)。
3. 编写 requirements.txt(Python依赖)
requirements.txt:
playwright
motor
redis
fastapi
uvicorn
(根据项目功能,如果只打 Worker,可以删掉 FastAPI;如果统一打镜像,多保留没关系)
4. 编写 docker-compose.yml(定义服务编排)
这步是核心,一次性把 Redis、MongoDB、多个 Worker、Monitor 启动起来!
docker-compose.yml 示例:
version: "3.9"
services:
redis