fix(warp-proxy): host.docker.internal

This commit is contained in:
JamesFlare1212
2026-04-06 18:19:48 -04:00
parent 352e32d38b
commit 480ba14688
4 changed files with 6 additions and 302 deletions

1
.gitignore vendored
View File

@@ -2,3 +2,4 @@ node_modules
nkcs-engage.cookie.txt
.env
redis_data
warp

View File

@@ -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://<warp-proxy-ip>:9091
```

View File

@@ -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

View File

@@ -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