File size: 8,839 Bytes
fee4830
 
 
 
 
 
99187f2
fee4830
 
 
ff9409f
fee4830
ff9409f
fee4830
 
 
ff9409f
 
 
 
 
 
 
 
 
 
 
99187f2
ff9409f
 
 
 
 
 
 
 
 
fee4830
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99187f2
fee4830
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ff9409f
fee4830
ff9409f
fee4830
ff9409f
fee4830
ff9409f
 
 
fee4830
ff9409f
 
 
fee4830
ff9409f
fee4830
ff9409f
 
 
 
fee4830
ff9409f
 
 
fee4830
ff9409f
 
fee4830
 
ff9409f
 
 
 
fee4830
 
ff9409f
 
 
fee4830
 
ff9409f
 
fee4830
 
ff9409f
 
 
 
 
 
fee4830
 
ff9409f
fee4830
ff9409f
 
fee4830
 
ff9409f
 
 
 
 
fee4830
 
ff9409f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fee4830
ff9409f
 
 
 
fee4830
ff9409f
99187f2
ff9409f
fee4830
ff9409f
fee4830
ff9409f
 
 
 
 
 
fee4830
 
 
ff9409f
fee4830
ff9409f
 
fee4830
 
 
390dc9b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
---
title: Simple Clash Relay
emoji: 🚀
colorFrom: blue
colorTo: indigo
sdk: docker
app_port: 7860
pinned: false
---

# Clash Proxy Service

一个轻量级的自建Clash代理服务,适用于Hugging Face部署,可通过Web UI和API控制。提供HTTP和SOCKS5代理,支持订阅链接和手动配置文件上传。

## 功能特点

- 🚀 **轻量级架构**:基于Python Flask和Clash Meta,资源占用小
- 🔄 **多种配置方式**  - 支持机场订阅链接自动下载转换
  - 支持手动上传Clash配置文件
- 🌐 **完整的代理功能**  - HTTP/HTTPS代理 (端口7890)
  - SOCKS5代理 (端口7890)
- 🖥️ **内置控制面板**  - 集成Yacd控制界面,可视化管理代理
  - 基础的操作面板,简化常用操作
- 🔌 **暴露的端口**  - **7860**: Web界面和API服务(Hugging Face默认端口)
  - **7890**: Clash代理服务(HTTP/SOCKS5)
  - **9090**: Clash内部API服务(通常不需直接访问)
- 🔒 **安全性设计**  - API密钥保护所有控制接口
  - 可选的配置加密存储
- 🌍 **兼容性**  - 适用于Hugging Face Spaces
  - 支持Docker本地部署
  - 兼容各类Clash客户端

## 系统要求

- Docker (本地开发/部署)
- 或 Python 3.8+ (本地开发)
- 机场订阅链接
- Hugging Face账户 (云部署)

## 项目结构

```
simple-clash-relay/
├── app/                      # Flask应用代码
│   ├── __init__.py
│   ├── main.py               # API路由和应用入口
│   ├── clash_manager.py      # Clash Core管理
│   ├── sub_manager.py        # 订阅管理
│   └── auth.py               # API认证
├── clash_core/               # Clash Core可执行文件
├── subconverter/             # subconverter可执行文件
├── data/                     # 运行时数据
├── Dockerfile                # Docker构建文件
├── entrypoint.sh             # 容器启动脚本
├── requirements.txt          # Python依赖
└── .env.example              # 环境变量模板
```

## 快速开始

### 准备工作

1. 获取可执行文件:
   - 下载Clash Core: [github.com/Dreamacro/clash/releases](https://github.com/Dreamacro/clash/releases)
   - 下载subconverter: [github.com/tindy2013/subconverter/releases](https://github.com/tindy2013/subconverter/releases)

2. 将上述文件放入对应目录:
   - `clash-linux-amd64``clash_core/`目录
   - `subconverter``subconverter/`目录

### 本地开发

1. 安装依赖:
   ```
   pip install -r requirements.txt
   ```

2. 设置环境变量:
   ```
   cp .env.example .env
   # 编辑.env文件,设置SUB_URL和API_KEY
   ```

3. 启动应用:
   ```
   python -m app.main
   ```

### Docker部署

1. 构建Docker镜像:
   ```
   docker build -t simple-clash-relay .
   ```

2. 运行容器:
   ```
   docker run -d \
     -p 7860:7860 \
     -p 7890:7890 \
     -e SUB_URL=你的订阅链接 \
     -e API_KEY=你的API密钥 \
     --name clash-relay \
     simple-clash-relay
   ```

### Hugging Face Spaces部署

1. 在Hugging Face上创建Space:
   - 访问 [huggingface.co/spaces](https://huggingface.co/spaces)
   - 点击"Create new Space"
   - 选择"Docker"作为Space SDK
   - 填写名称和其他设置

2. 克隆Space仓库:
   ```
   git clone https://huggingface.co/spaces/你的用户名/你的Space名称
   cd 你的Space名称
   ```

3. 复制项目文件:
   ```
   # 将所有项目文件复制到此目录
   ```

4. 提交和推送:
   ```
   git add .
   git commit -m "Initial commit"
   git push
   ```

5. 设置Secrets:
   - 在Hugging Face Space设置页面添加以下secrets:
     - `SUB_URL`: 你的订阅链接
     - `API_KEY`: 你的API密钥

## 使用教程:为其他项目提供代理

### 基本代理地址

服务部署成功后,您可以使用以下地址作为代理:

对于部署在Hugging Face上的服务:
- **HTTP/HTTPS代理**`https://clash-linux-clash.hf.space/proxy`
- **SOCKS5代理**`socks5://clash-linux-clash.hf.space:7890`(注意:SOCKS5在Hugging Face上可能受限)

对于本地部署的服务:
- **HTTP/HTTPS代理**`http://localhost:7890`
- **SOCKS5代理**`socks5://localhost:7890`

### 在不同场景中使用代理

#### 1. Python程序

```python
import requests

proxies = {
    "http": "http://clash-linux-clash.hf.space/proxy",
    "https": "http://clash-linux-clash.hf.space/proxy"
}

response = requests.get("https://api.openai.com/v1/...", proxies=proxies)
```

#### 2. curl命令

```bash
curl -x http://clash-linux-clash.hf.space/proxy https://api.openai.com/v1/...
```

#### 3. 在其他Hugging Face项目中使用

在其他Hugging Face项目的配置中,添加环境变量:

```
HTTP_PROXY=http://clash-linux-clash.hf.space/proxy
HTTPS_PROXY=http://clash-linux-clash.hf.space/proxy
```

#### 4. 在NPM项目中使用

```bash
# 设置npm代理
npm config set proxy http://clash-linux-clash.hf.space/proxy
npm config set https-proxy http://clash-linux-clash.hf.space/proxy
```

#### 5. Docker容器中使用

```bash
docker run -e HTTP_PROXY=http://clash-linux-clash.hf.space/proxy -e HTTPS_PROXY=http://clash-linux-clash.hf.space/proxy your-image
```

#### 6. Git中使用

```bash
git config --global http.proxy http://clash-linux-clash.hf.space/proxy
git config --global https.proxy http://clash-linux-clash.hf.space/proxy
```

### 切换代理节点

为获得最佳性能,您可能需要切换使用的代理节点:

1. 访问 `https://clash-linux-clash.hf.space/ui/`
2. 首次使用时设置外部控制器地址为 `/clashapi`,密钥为您的API密钥(默认为`changeme`)
3. 在Proxies选项卡中,选择GLOBAL策略组,然后选择一个可用的节点

## 详细使用指南

### 1. 配置管理

#### 使用订阅链接

服务默认使用环境变量`SUB_URL`中配置的订阅链接。如需刷新订阅:

1. 访问Web UI `https://clash-linux-clash.hf.space/`
2. 点击"刷新订阅并重启Clash"按钮
3. 输入API密钥(默认为`changeme`)

#### 上传自定义配置

如果您有现成的Clash配置文件:

1. 访问Web UI `https://clash-linux-clash.hf.space/`
2. 在"上传手动配置"区域选择您的配置文件(.yaml或.yml)
3. 点击"上传并应用配置"按钮
4. 输入API密钥

#### 恢复使用订阅

如果您想从手动配置恢复到使用订阅:

1. 在"调试与恢复"区域点击"清理配置并重启"
2. 确认操作并输入API密钥

### 2. 查看当前配置

您可以检查当前使用的配置文件内容:

1. 在Web UI中点击"查看当前配置文件"
2. 输入API密钥
3. 配置内容将显示在页面上

### 3. 代理控制面板(Yacd)

高级用户可以使用内置的Yacd面板管理代理:

1. 访问 `https://clash-linux-clash.hf.space/ui/`
2. 首次使用时需配置:
   - 外部控制器地址:`/clashapi`
   - 密钥:您的API密钥(默认为`changeme`)
3. 在此面板中,您可以:
   - 切换节点
   - 查看连接日志
   - 管理规则
   - 监控网络流量

### 4. API接口

系统提供了以下API接口,所有请求都需要在Header中包含`X-API-Key`- `GET /api/nodes` - 获取所有可用节点
- `GET /api/current` - 获取当前使用的节点
- `PUT /api/switch` - 切换到指定节点
- `POST /api/refresh` - 刷新订阅并重启Clash
- `POST /api/upload_config` - 上传自定义配置文件
- `POST /debug/clean` - 清理配置并重新初始化
- `GET /debug/config` - 获取当前配置文件内容

### 5. 排错指南

如果遇到问题,请尝试以下步骤:

1. **代理连接失败**   - 确认代理地址正确
   - 检查是否选择了可用的节点
   - 尝试切换到其他节点

2. **节点无法连接**   - 刷新订阅获取最新节点
   - 检查配置文件是否正确
   - 尝试上传新的配置文件

3. **界面加载问题**   - 清除浏览器缓存
   - 使用无痕模式访问
   - 检查浏览器控制台是否有错误信息

4. **配置问题**   - 使用"清理配置并重启"功能重置系统
   - 检查订阅链接是否有效
   - 检查上传的配置文件格式是否正确

## 自定义部署

### Docker环境变量

自行部署时可使用以下环境变量:

- `SUB_URL`:订阅链接URL
- `API_KEY`:API访问密钥(默认为"changeme")
- `FLASK_PORT`:Web界面端口(默认7860)
- `CLASH_PROXY_PORT`:Clash代理端口(默认7890)
- `CLASH_API_PORT`:Clash API端口(默认9090)
- `CLEAN_CONFIG`:启动时是否清理配置(true/false)

## 注意事项

- 本项目仅供学习研究使用,请遵守相关法律法规
- Hugging Face Spaces有资源和流量限制,请合理使用
- 为保障安全,请修改默认API密钥
- 上传的配置文件会覆盖订阅内容,如需恢复请使用清理功能

## 许可

MIT