| # WebArena Reddit环境搭建指南 |
|
|
| 本指南介绍如何搭建WebArena Reddit环境,用于Playwright MCP自动化测试。 |
|
|
| ## 系统要求 |
|
|
| - Ubuntu 22.04+ 或其他Linux发行版 |
| - Docker环境 |
| - 至少50GB可用磁盘空间 |
| - 至少4GB内存 |
|
|
| ## 快速设置步骤 |
|
|
| ### 1. 下载Reddit Docker镜像 |
|
|
| WebArena提供3个镜像源,选择网络最快的: |
|
|
| ```bash |
| # 选项1: Google Drive (通常最快) |
| pip install gdown |
| gdown 17Qpp1iu_mPqzgO_73Z9BnFjHrzmX9DGf |
| |
| # 选项2: Archive.org |
| wget https://archive.org/download/webarena-env-forum-image/postmill-populated-exposed-withimg.tar |
| |
| # 选项3: CMU服务器 |
| wget http://metis.lti.cs.cmu.edu/webarena-images/postmill-populated-exposed-withimg.tar |
| ``` |
|
|
| ### 2. 安装Docker (如果尚未安装) |
|
|
| ```bash |
| sudo apt update |
| sudo apt install docker.io -y |
| sudo systemctl start docker |
| sudo systemctl enable docker |
| sudo usermod -aG docker $USER |
| newgrp docker |
| ``` |
|
|
| ### 3. 启动Reddit环境 |
|
|
| ```bash |
| # 加载Docker镜像 (约50GB,需要等待几分钟) |
| docker load --input postmill-populated-exposed-withimg.tar |
| |
| # 启动容器 |
| docker run --name forum -p 9999:80 -d postmill-populated-exposed-withimg |
| |
| # 等待服务启动 (约1-2分钟) |
| sleep 120 |
| |
| # 验证服务状态 |
| docker logs forum | tail -10 |
| curl -I http://localhost:9999 |
| ``` |
|
|
| ### 4. 验证环境 |
|
|
| 访问 `http://localhost:9999` 应该看到Postmill论坛主页,包含: |
| - 导航栏 (Forums, Wiki) |
| - 搜索框 |
| - 登录/注册链接 |
| - 论坛列表 (AskReddit, technology, gaming等) |
|
|
| ## 端口开放策略 |
|
|
| 根据使用场景选择合适的端口开放策略: |
|
|
| ### 策略1: GCP防火墙规则 (推荐 - 生产环境) |
|
|
| **适用场景**: 长期使用、团队协作、稳定的公共访问 |
|
|
| ```bash |
| # 安装gcloud CLI (如果尚未安装) |
| curl https://sdk.cloud.google.com | bash |
| exec -l $SHELL |
| |
| # 认证 |
| gcloud auth login |
| |
| # 创建防火墙规则 |
| gcloud compute firewall-rules create allow-reddit-9999 \ |
| --allow tcp:9999 \ |
| --source-ranges 0.0.0.0/0 \ |
| --description "Allow access to WebArena Reddit on port 9999" |
| |
| # 获取外部IP |
| gcloud compute instances list |
| ``` |
|
|
| **优点**: 永久有效、稳定、无额外依赖 |
| **缺点**: 需要GCP权限、公网完全开放 |
|
|
| ### 策略2: ngrok隧道 (快速分享) |
|
|
| **适用场景**: 临时演示、快速测试、无需GCP权限 |
|
|
| ```bash |
| # 安装ngrok |
| wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz |
| tar xvzf ngrok-v3-stable-linux-amd64.tgz |
| sudo mv ngrok /usr/local/bin |
| |
| # 创建隧道 |
| ngrok http 9999 |
| ``` |
|
|
| **优点**: 即时生效、HTTPS支持、无需服务器配置 |
| **缺点**: 临时URL、需要保持运行、免费版有限制 |
|
|
| ### 策略3: Cloudflared隧道 (免费持久) |
|
|
| **适用场景**: 长期免费使用、无需GCP、需要稳定访问 |
|
|
| ```bash |
| # 安装cloudflared |
| wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 |
| sudo mv cloudflared-linux-amd64 /usr/local/bin/cloudflared |
| sudo chmod +x /usr/local/bin/cloudflared |
| |
| # 创建临时隧道 |
| cloudflared tunnel --url http://localhost:9999 |
| |
| # 或创建永久隧道 (需要Cloudflare账号) |
| cloudflared tunnel login |
| cloudflared tunnel create webarena-reddit |
| cloudflared tunnel route dns webarena-reddit reddit.yourdomain.com |
| ``` |
|
|
| **优点**: 免费、持久、自定义域名 |
| **缺点**: 需要Cloudflare账号、设置稍复杂 |
|
|
| ### 策略4: SSH端口转发 (开发调试) |
|
|
| **适用场景**: 本地开发、安全要求高、团队内部访问 |
|
|
| ```bash |
| # 在本地机器上执行 |
| ssh -L 8080:localhost:9999 user@your-server-ip |
| |
| # 然后访问 http://localhost:8080 |
| ``` |
|
|
| **优点**: 最安全、无需开放公网端口 |
| **缺点**: 需要SSH访问、仅限本地使用 |
|
|
| ## Playwright MCP测试 |
|
|
| 环境搭建完成后,可以使用Playwright MCP进行自动化测试: |
|
|
| ```javascript |
| // 基础连接测试 |
| await page.goto('http://your-reddit-url:9999'); |
| |
| // 导航测试 |
| await page.click('text=Forums'); |
| await page.click('text=AskReddit'); |
| |
| // 表单交互测试 |
| await page.click('text=Log in'); |
| await page.fill('[placeholder="Username"]', 'testuser'); |
| await page.fill('[placeholder="Password"]', 'testpass'); |
| ``` |
|
|
| ## 故障排除 |
|
|
| ### 容器启动失败 |
| ```bash |
| # 检查容器状态 |
| docker ps -a |
| |
| # 查看详细日志 |
| docker logs forum |
| |
| # 重启容器 |
| docker restart forum |
| ``` |
|
|
| ### 服务未就绪 |
| ```bash |
| # 检查PostgreSQL是否完全启动 |
| docker logs forum | grep "database system is ready" |
| |
| # 等待更长时间 (数据库恢复需要时间) |
| sleep 300 |
| ``` |
|
|
| ### 端口被占用 |
| ```bash |
| # 检查端口使用情况 |
| netstat -tlnp | grep 9999 |
| |
| # 使用不同端口 |
| docker run --name forum -p 8888:80 -d postmill-populated-exposed-withimg |
| ``` |
|
|
| ## 环境重置 |
|
|
| 完成测试后重置环境: |
|
|
| ```bash |
| # 停止并删除容器 |
| docker stop forum |
| docker rm forum |
| |
| # 重新启动 |
| docker run --name forum -p 9999:80 -d postmill-populated-exposed-withimg |
| ``` |
|
|
| ## 高级配置 |
|
|
| ### 环境变量设置 (WebArena标准) |
| ```bash |
| export REDDIT="your-server-hostname:9999" |
| export REDDIT_URL="http://your-server-hostname:9999" |
| ``` |
|
|
| ### 批量任务测试 |
| ```bash |
| # 准备WebArena测试配置 |
| mkdir -p ~/.webarena |
| echo "REDDIT=your-server-hostname:9999" >> ~/.webarena/config |
| ``` |
|
|
| --- |
|
|
| **注意**: 这个Reddit环境包含成千上万的预填充数据,完全模拟真实的Reddit使用场景,非常适合进行复杂的Web自动化任务测试。 |