From 480ba146880668a725e92dac77f54a66bd8f723d Mon Sep 17 00:00:00 2001 From: JamesFlare1212 Date: Mon, 6 Apr 2026 18:19:48 -0400 Subject: [PATCH] fix(warp-proxy): host.docker.internal --- .gitignore | 3 +- PROXY-TESTING.md | 292 ------------------------------------ docker-compose.yaml | 11 +- services/playwright-auth.ts | 2 +- 4 files changed, 6 insertions(+), 302 deletions(-) delete mode 100644 PROXY-TESTING.md diff --git a/.gitignore b/.gitignore index 36ecc09..37a150c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules nkcs-engage.cookie.txt .env -redis_data \ No newline at end of file +redis_data +warp \ No newline at end of file diff --git a/PROXY-TESTING.md b/PROXY-TESTING.md deleted file mode 100644 index 660ea87..0000000 --- a/PROXY-TESTING.md +++ /dev/null @@ -1,292 +0,0 @@ -# 代理功能测试报告 - -## ✅ 测试结果 - -### 1. Warp Proxy 服务测试 - -**测试命令**: -```bash -sudo docker compose --profile proxy up -d warp-proxy -``` - -**结果**: ✅ 成功 -- 镜像拉取成功:`ghcr.io/mon-ius/docker-warp-socks:v5` -- 服务启动成功 -- WireGuard 连接建立 -- Sing-box 代理服务器运行 - -**验证**: -```bash -# 获取 warp-proxy IP -WARP_IP=$(sudo docker inspect dsas-cca-warp-proxy --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}') -echo $WARP_IP # 172.18.0.2 -``` - -### 2. SOCKS5 代理测试 - -**测试命令**: -```bash -curl -x "socks5h://172.18.0.2:9091" https://www.cloudflare.com/cdn-cgi/trace -``` - -**结果**: ✅ 成功 -``` -fl=650f209 -h=www.cloudflare.com -ip=104.28.195.179 -ts=1775508745.000 -colo=EWR -loc=US -tls=TLSv1.3 -warp=on # ← 确认 Warp 已启用 -``` - -### 3. HTTP 代理测试 - -**测试命令**: -```bash -curl -x "http://172.18.0.2:9091" https://www.cloudflare.com/cdn-cgi/trace -``` - -**结果**: ✅ 成功 -- 返回相同的 trace 信息 -- `warp=on` 确认代理工作 - -### 4. Playwright + Proxy 测试 - -**测试代码**: -```typescript -const browser = await chromium.launch({ - headless: true, - proxy: { - server: 'socks5://172.18.0.2:9091', - bypass: 'localhost,127.0.0.1' - } -}); -``` - -**结果**: ✅ 成功 -``` -🚀 Starting browser with proxy: socks5://172.18.0.2:9091 -✅ Proxy test result: -warp=on -loc=US -🎯 Warp enabled: YES ✅ -``` - -### 5. 集成测试 (Docker Compose + App) - -**问题发现**: ❌ `ERR_PROXY_CONNECTION_FAILED` - -**原因**: -- 容器 DNS 解析 `warp-proxy` 可能有问题 -- 或者应用启动时 warp-proxy 还未完全就绪 - -**解决方案**: -1. **方案 A**: 使用 IP 地址代替容器名 - ```bash - WARP_IP=$(docker inspect dsas-cca-warp-proxy --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}') - echo "ALL_PROXY=socks5://${WARP_IP}:9091" >> .env - ``` - -2. **方案 B**: 增加启动延迟 - - 在 `docker-compose.yaml` 中增加 `healthcheck.start_period` - - 或者使用 `depends_on.condition: service_healthy` - -## 📋 使用指南 - -### 启用代理 - -**步骤 1**: 配置环境变量 -```bash -# .env 文件 -USE_PROXY=true -# 可选:指定 IP 地址(推荐) -ALL_PROXY=socks5://172.18.0.2:9091 -``` - -**步骤 2**: 启动服务 -```bash -# 启动包含 warp-proxy 的服务 -sudo docker compose --profile proxy up -d -``` - -**步骤 3**: 验证 -```bash -# 查看日志确认代理已启用 -sudo docker compose logs app | grep "Using proxy" -# 应该看到:Using proxy: socks5://warp-proxy:9091 -``` - -### 快速测试脚本 - -```bash -#!/bin/bash -# test-proxy.sh - -echo "🔍 Testing Warp Proxy Setup..." - -# 1. Check if warp-proxy is running -if ! docker compose ps | grep -q "warp-proxy"; then - echo "❌ Warp proxy not running. Starting..." - docker compose --profile proxy up -d warp-proxy - sleep 15 -fi - -# 2. Get warp-proxy IP -WARP_IP=$(docker inspect dsas-cca-warp-proxy --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}') -echo "📍 Warp Proxy IP: $WARP_IP" - -# 3. Test SOCKS5 proxy -echo "🧪 Testing SOCKS5 proxy..." -RESULT=$(curl -s -x "socks5h://${WARP_IP}:9091" https://www.cloudflare.com/cdn-cgi/trace 2>&1) -if echo "$RESULT" | grep -q "warp=on"; then - echo "✅ SOCKS5 proxy working!" -else - echo "❌ SOCKS5 proxy failed" - exit 1 -fi - -# 4. Test HTTP proxy -echo "🧪 Testing HTTP proxy..." -RESULT=$(curl -s -x "http://${WARP_IP}:9091" https://www.cloudflare.com/cdn-cgi/trace 2>&1) -if echo "$RESULT" | grep -q "warp=on"; then - echo "✅ HTTP proxy working!" -else - echo "❌ HTTP proxy failed" - exit 1 -fi - -echo "🎉 All proxy tests passed!" -``` - -## 🔧 故障排除 - -### 问题 1: ERR_PROXY_CONNECTION_FAILED - -**症状**: Playwright 无法连接到代理 - -**原因**: -1. warp-proxy 未完全启动 -2. DNS 解析失败 -3. 网络配置问题 - -**解决**: - -**方法 1**: 使用 IP 地址 -```bash -# 获取 warp-proxy IP -WARP_IP=$(docker inspect dsas-cca-warp-proxy --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}') - -# 编辑 .env -echo "ALL_PROXY=socks5://${WARP_IP}:9091" >> .env - -# 重启应用 -docker compose restart app -``` - -**方法 2**: 等待 warp-proxy 完全启动 -```bash -# 检查 warp-proxy 状态 -docker compose logs warp-proxy | grep "sing-box started" - -# 等待 30 秒后再启动应用 -sleep 30 -docker compose restart app -``` - -### 问题 2: 代理未生效 - -**检查清单**: -1. ✅ `USE_PROXY=true` 已设置 -2. ✅ warp-proxy 服务正在运行 -3. ✅ 日志显示 "Using proxy: ..." -4. ✅ 网络连接正常 - -**验证命令**: -```bash -# 检查环境变量 -docker exec dsas-cca-backend env | grep PROXY - -# 检查日志 -docker compose logs app | grep -i proxy -``` - -### 问题 3: Warp 连接失败 - -**诊断**: -```bash -# 查看 warp-proxy 日志 -docker compose logs warp-proxy | tail -50 - -# 检查 WireGuard 连接 -docker compose logs warp-proxy | grep "wireguard" - -# 测试外部连接 -docker exec dsas-cca-warp-proxy curl -s https://www.cloudflare.com/cdn-cgi/trace -``` - -## 📊 性能对比 - -| 场景 | 平均响应时间 | 稳定性 | -|------|------------|--------| -| 无代理 | ~200ms | 高 | -| Warp 代理 | ~500ms | 高 | -| 首次连接 | ~3s | 中 (建立连接) | - -**注意**: Warp 首次连接可能需要 10-30 秒建立,之后会缓存连接。 - -## ✅ 最佳实践 - -1. **生产环境**: 使用 IP 地址代替容器名,避免 DNS 问题 -2. **开发环境**: 可以使用容器名 `warp-proxy:9091` -3. **监控**: 定期检查代理是否正常工作 -4. **回退**: 准备无代理的备用方案 - -## 📝 配置示例 - -### 完整 .env 配置 - -```bash -# 基础配置 -API_USERNAME=your-username -API_PASSWORD=your-password -PORT=3000 - -# 代理配置 -USE_PROXY=true -ALL_PROXY=socks5://172.18.0.2:9091 - -# 或者使用自定义代理 -# HTTP_PROXY=http://proxy.example.com:8080 -# HTTPS_PROXY=http://proxy.example.com:8080 -``` - -### docker-compose 启动命令 - -```bash -# 启用代理 -docker compose --profile proxy up -d - -# 禁用代理 -docker compose up -d - -# 仅启动 warp-proxy -docker compose --profile proxy up -d warp-proxy - -# 查看状态 -docker compose --profile proxy ps -``` - -## 🎯 总结 - -✅ **功能正常**: Warp proxy 可以正常工作 -✅ **Playwright 集成**: 代理配置正确 -⚠️ **DNS 问题**: 建议使用 IP 地址 -✅ **易于使用**: 简单的环境变量控制 - -**推荐配置**: -```bash -USE_PROXY=true -ALL_PROXY=socks5://:9091 -``` diff --git a/docker-compose.yaml b/docker-compose.yaml index 43a313d..defa3ab 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -4,13 +4,8 @@ services: image: ghcr.io/mon-ius/docker-warp-socks:v5 container_name: dsas-cca-warp-proxy restart: unless-stopped - networks: - - cca_network - # Only expose port internally, not to host - expose: - - "9091" - profiles: - - proxy + ports: + - "9091:9091" app: build: @@ -48,7 +43,7 @@ services: container_name: dsas-cca-redis command: redis-server --requirepass "dsas-cca" volumes: - - redis_data:/data + - ./redis_data:/data restart: unless-stopped networks: - cca_network diff --git a/services/playwright-auth.ts b/services/playwright-auth.ts index 1351cfe..5f57bb5 100644 --- a/services/playwright-auth.ts +++ b/services/playwright-auth.ts @@ -10,7 +10,7 @@ let _inMemoryCookies: Cookie[] | null = null; // Proxy configuration const USE_PROXY = process.env.USE_PROXY === 'true'; -const PROXY_SERVER = process.env.ALL_PROXY || process.env.HTTP_PROXY || `socks5://warp-proxy:9091`; +const PROXY_SERVER = process.env.ALL_PROXY || process.env.HTTP_PROXY || `http://host.docker.internal:9091`; /** * Login using Playwright and extract cookies