tanbushi commited on
Commit
1ec40ec
·
1 Parent(s): 46cb13a
API_EXAMPLES.md DELETED
@@ -1,283 +0,0 @@
1
- # 📋 OpenCode API 基本使用示例
2
-
3
- ## 🔐 认证信息
4
- ```
5
- 用户名: admin
6
- 密码: admin123
7
- ```
8
-
9
- ## 🚀 基本 API 调用示例
10
-
11
- ### 1. 健康检查
12
- ```bash
13
- # OpenCode 服务器健康检查
14
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/opencode/global/health"
15
-
16
- # Nginx 健康检查
17
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/health"
18
- ```
19
-
20
- ### 2. API 文档
21
- ```bash
22
- # 获取完整的 API 文档 (OpenAPI 规范)
23
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/opencode/doc"
24
-
25
- # 在浏览器中查看
26
- # https://airsltd-ocngx.hf.space/opencode/doc
27
- ```
28
-
29
- ### 3. 项目管理
30
- ```bash
31
- # 列出所有项目
32
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/opencode/project"
33
-
34
- # 获取当前项目信息
35
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/opencode/project/current"
36
-
37
- # 列出当前目录下的项目
38
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/opencode/project?directory=/path/to/project"
39
- ```
40
-
41
- ### 4. 会话管理
42
- ```bash
43
- # 创建新的 AI 编程会话
44
- curl -u admin:admin123 -s -X POST \
45
- -H "Content-Type: application/json" \
46
- -d '{"title": "AI 编程会话"}' \
47
- "https://airsltd-ocngx.hf.space/opencode/session"
48
-
49
- # 列出所有会话
50
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/opencode/session"
51
-
52
- # 获取会话状态
53
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/opencode/session/status"
54
-
55
- # 删除特定会话
56
- curl -u admin:admin123 -s -X DELETE \
57
- "https://airsltd-ocngx.hf.space/opencode/session/ses_123456"
58
- ```
59
-
60
- ### 5. AI 编程请求
61
- ```bash
62
- # 创建会话并立即发送消息
63
- SESSION=$(curl -u admin:admin123 -s -X POST \
64
- -H "Content-Type: application/json" \
65
- -d '{"title": "Python 开发"}' \
66
- "https://airsltd-ocngx.hf.space/opencode/session" | jq -r '.id')
67
-
68
- # 发送文本消息
69
- curl -u admin:admin123 -s -X POST \
70
- -H "Content-Type: application/json" \
71
- -d '{
72
- "parts": [
73
- {"type": "text", "text": "请创建一个简单的 Python Flask 应用"}
74
- ]
75
- }' \
76
- "https://airsltd-ocngx.hf.space/opencode/session/$SESSION/message"
77
-
78
- # 发送文件分析请求
79
- curl -u admin:admin123 -s -X POST \
80
- -H "Content-Type: application/json" \
81
- -d '{
82
- "parts": [
83
- {"type": "text", "text": "请分析这个 Python 文件并优化性能"},
84
- {"type": "file", "path": "/path/to/app.py"}
85
- ]
86
- }' \
87
- "https://airsltd-ocngx.hf.space/opencode/session/$SESSION/message"
88
- ```
89
-
90
- ### 6. 文件操作
91
- ```bash
92
- # 搜索文件
93
- curl -u admin:admin123 -s \
94
- "https://airsltd-ocngx.hf.space/opencode/find/file?query=main.py"
95
-
96
- # 读取文件内容
97
- curl -u admin:admin123 -s \
98
- "https://airsltd-ocngx.hf.space/opencode/file/content?path=/path/to/file.py"
99
-
100
- # 列出目录
101
- curl -u admin:admin123 -s \
102
- "https://airsltd-ocngx.hf.space/opencode/file?path=/path/to/directory"
103
- ```
104
-
105
- ### 7. 提供商管理
106
- ```bash
107
- # 列出所有可用的 AI 提供商
108
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/opencode/provider"
109
-
110
- # 获取认证方法
111
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/opencode/provider/auth"
112
- ```
113
-
114
- ### 8. 配置管理
115
- ```bash
116
- # 获取当前配置
117
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/opencode/config"
118
-
119
- # 列出提供商标认方法
120
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/opencode/config/providers"
121
- ```
122
-
123
- ## 🧪 高级用法示例
124
-
125
- ### 创建 Web 应用
126
- ```bash
127
- SESSION=$(curl -u admin:admin123 -s -X POST \
128
- -H "Content-Type: application/json" \
129
- -d '{"title": "Flask Web 开发"}' \
130
- "https://airsltd-ocngx.hf.space/opencode/session" | jq -r '.id')
131
-
132
- curl -u admin:admin123 -s -X POST \
133
- -H "Content-Type: application/json" \
134
- -d '{
135
- "parts": [
136
- {
137
- "type": "text",
138
- "text": "创建一个完整的 Flask Web 应用,包含:\n1. 主页路由 (/)\n2. 用户管理 API (/api/users)\n3. 数据库配置\n4. 基础的前端页面\n5. 错误处理\n请生成完整可运行的代码,包含所有必要的文件"
139
- }
140
- ]
141
- }' \
142
- "https://airsltd-ocngx.hf.space/opencode/session/$SESSION/message"
143
- ```
144
-
145
- ### 代码重构
146
- ```bash
147
- # 分析现有代码并重构
148
- curl -u admin:admin123 -s -X POST \
149
- -H "Content-Type: application/json" \
150
- -d '{
151
- "parts": [
152
- {
153
- "type": "text",
154
- "text": "请重构这个函数,提高性能和可读性:\n\n```\ndef calculate_sum(numbers):\n total = 0\n for num in numbers:\n total += num\n return total\n```\n\n请使用 Python 最佳实践重写这个函数。"
155
- }
156
- ]
157
- }' \
158
- "https://airsltd-ocngx.hf.space/opencode/session/$SESSION/message"
159
- ```
160
-
161
- ### 数据库操作
162
- ```bash
163
- # 生成数据库操作代码
164
- curl -u admin:admin123 -s -X POST \
165
- -H "Content-Type: application/json" \
166
- -d '{
167
- "parts": [
168
- {
169
- "type": "text",
170
- "text": "创建一个用户管理系统的数据库模型和 API,使用 SQLAlchemy 和 Flask,包含:\n1. User 模型\n2. CRUD 操作\n3. API 路由\n4. 数据验证\n5. 错误处理"
171
- }
172
- ]
173
- }' \
174
- "https://airsltd-ocngx.hf.space/opencode/session/$SESSION/message"
175
- ```
176
-
177
- ## 🔍 响应处理
178
-
179
- ### 解析 JSON 响应
180
- ```bash
181
- # 使用 jq 美化输出
182
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/opencode/session/ses_123" | jq '.'
183
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/opencode/session/ses_123" | jq '.title'
184
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/opencode/session/ses_123" | jq '.time'
185
- ```
186
-
187
- ### 流式响应处理
188
- ```bash
189
- # 对于长时间运行的请求,可以监控进度
190
- curl -u admin:admin123 -N \
191
- -H "Content-Type: application/json" \
192
- -d '{
193
- "parts": [
194
- {"type": "text", "text": "生成一个大型的 Web 应用项目,包括前端和后端"}
195
- ]
196
- }' \
197
- "https://airsltd-ocngx.hf.space/opencode/session/$SESSION/message"
198
- ```
199
-
200
- ## 🎯 最佳实践
201
-
202
- ### 1. 错误处理
203
- ```bash
204
- # 检查响应状态
205
- RESPONSE=$(curl -u admin:admin123 -w "%{http_code}" -s -o /tmp/response.json \
206
- "https://airsltd-ocngx.hf.space/opencode/session")
207
-
208
- if [ "$RESPONSE" = "200" ]; then
209
- echo "✅ 请求成功"
210
- cat /tmp/response.json | jq '.'
211
- else
212
- echo "❌ 请求失败,状态码: $RESPONSE"
213
- fi
214
- ```
215
-
216
- ### 2. 会话管理
217
- ```bash
218
- # 保存会话 ID 到环境变量
219
- export OPENCODE_SESSION=$(curl -u admin:admin123 -s -X POST \
220
- -H "Content-Type: application/json" \
221
- -d '{"title": "编程助手"}' \
222
- "https://airsltd-ocngx.hf.space/opencode/session" | jq -r '.id')
223
-
224
- echo "会话 ID 已保存: $OPENCODE_SESSION"
225
-
226
- # 在后续请求中使用
227
- curl -u admin:admin123 -s "https://airsltd-ocngx.hf.space/opencode/session/$OPENCODE_SESSION/message" \
228
- -H "Content-Type: application/json" \
229
- -d '{"parts": [{"type": "text", "text": "继续之前的开发"}]}'
230
- ```
231
-
232
- ### 3. 批量操作
233
- ```bash
234
- # 创建多个项目会话
235
- for project in "用户管理" "订单系统" "数据分析"; do
236
- curl -u admin:admin123 -s -X POST \
237
- -H "Content-Type: application/json" \
238
- -d "{\"title\": \"$project 开发\"}" \
239
- "https://airsltd-ocngx.hf.space/opencode/session"
240
- echo "创建了 $project 项目会话"
241
- done
242
- ```
243
-
244
- ## 📱 实际应用场景
245
-
246
- ### 自动化代码生成
247
- ```bash
248
- # 脚本:自动生成 REST API
249
- generate_api() {
250
- local model=$1
251
- local description=$2
252
-
253
- SESSION=$(curl -u admin:admin123 -s -X POST \
254
- -H "Content-Type: application/json" \
255
- -d "{\"title\": \"API 开发\"}" \
256
- "https://airsltd-ocngx.hf.space/opencode/session" | jq -r '.id')
257
-
258
- curl -u admin:admin123 -s -X POST \
259
- -H "Content-Type: application/json" \
260
- -d "{\"parts\": [{\"type\": \"text\", \"text\": \"创建 $description 的 REST API,使用 $model,包含完整的 CRUD 操作和错误处理\"}]}" \
261
- "https://airsltd-ocngx.hf.space/opencode/session/$SESSION/message" | jq -r '.info.parts[1].text'
262
- }
263
-
264
- # 使用示例
265
- generate_api "GPT-4" "用户管理系统"
266
- ```
267
-
268
- ### 代码审查助手
269
- ```bash
270
- # 代码审查会话
271
- REVIEW_SESSION=$(curl -u admin:admin123 -s -X POST \
272
- -H "Content-Type: application/json" \
273
- -d "{\"title\": \"代码审查\"}" \
274
- "https://airsltd-ocngx.hf.space/opencode/session" | jq -r '.id')
275
-
276
- # 提交代码审查
277
- curl -u admin:admin123 -s -X POST \
278
- -H "Content-Type: application/json" \
279
- -d "{\"parts\": [{\"type\": \"text\", \"text\": \"请审查以下代码的安全性、性能和可维护性:[代码内容]\"}]}" \
280
- "https://airsltd-ocngx.hf.space/opencode/session/$REVIEW_SESSION/message"
281
- ```
282
-
283
- 这个 API 集成现在完全可用!您可以通过这些命令实现各种 AI 辅助的编程任务。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
COMPLETE_SUCCESS_REPORT.md DELETED
@@ -1,143 +0,0 @@
1
- # 🎉 完整修复成功报告
2
-
3
- ## ✅ 所有问题已解决
4
-
5
- **API路由问题已完全修复!**
6
-
7
- ### 🔧 修复内容
8
- 1. **静态资源路由** - 添加CSS、JS、图标等资源的专门代理配置
9
- 2. **API端点路由** - 为所有OpenCode API端点添加直接代理配置
10
- 3. **完整功能覆盖** - `/global/`、`/session`、`/project`、`/provider`等所有端点
11
-
12
- ## 📊 当前状态
13
-
14
- ### ✅ 所有端点正常访问
15
- ```
16
- ✅ 静态资源 (CSS/JS/图标): 200 OK
17
- ✅ Web界面: 200 OK
18
- ✅ /global/health: {"healthy":true,"version":"1.1.6"}
19
- ✅ /session: 200 OK
20
- ✅ /project: 200 OK
21
- ✅ /provider: 200 OK
22
- ✅ /file: 200 OK
23
- ✅ /find: 200 OK
24
- ✅ /config: 200 OK
25
- ✅ /doc: 200 OK
26
- ```
27
-
28
- ### ✅ 功能验证通过
29
- - ✅ **HTML页面正常加载** - 包含完整的OpenCode内容
30
- - ✅ **CSS样式正确应用** - 所有样式文件200 OK
31
- - ✅ **JavaScript正常执行** - API调用成功
32
- - ✅ **API端点全部可用** - 所有端点返回200
33
- - ✅ **响应式设计** - 移动端完美适配
34
-
35
- ## 🌱 访问端点总览
36
-
37
- ### 🎯 主要使用地址
38
- ```
39
- https://airsltd-ocngx.hf.space/opencode/
40
- ```
41
-
42
- ### 📡 完整功能列表
43
- ```
44
- 🌐 Web界面: https://airsltd-ocngx.hf.space/opencode/
45
- 📚 API文档: https://airsltd-ocngx.hf.space/opencode/doc
46
- 💚 健康检查: https://airsltd-ocngx.hf.space/global/health
47
- 🔄 全局事件: https://airsltd-ocngx.hf.space/global/event
48
- 💬 会话管理: https://airsltd-ocngx.hf.space/session
49
- 📁 项目管理: https://airsltd-ocngx.hf.space/project
50
- 🤖 AI提供商: https://airsltd-ocngx.hf.space/provider
51
- 📄 文件操作: https://airsltd-ocngx.hf.space/file
52
- 🔍 搜索功能: https://airsltd-ocngx.hf.space/find
53
- ⚙️ 配置管理: https://airsltd-ocngx.hf.space/config
54
- ```
55
-
56
- ### 📱 移动端体验
57
- - 📱 **完美响应式设计** - 适配各种屏幕尺寸
58
- - ⚡ **流畅交互体验** - 所有资源快速加载
59
- - 💬 **实时AI对话** - 完整的编程助手功能
60
- - 📝 **代码编辑** - 移动端友好的编辑器
61
- - 🔄 **实时同步** - 所有API调用正常工作
62
-
63
- ## 🎯 最终架构设计
64
-
65
- ### 🌟 智能路由系统
66
- ```
67
- 用户请求 → Nginx (7860) → 智能路由分发
68
- ↓ ↓
69
- /opencode/ → OpenCode (57860) → Web界面
70
- /assets/* → OpenCode (57860) → 静态资源
71
- /global/* → OpenCode (57860) → 全局API
72
- /session* → OpenCode (57860) → 会话API
73
- /project* → OpenCode (57860) → 项目API
74
- /provider* → OpenCode (57860) → 提供商API
75
- /file* → OpenCode (57860) → 文件API
76
- /find* → OpenCode (57860) → 搜索API
77
- /config* → OpenCode (57860) → 配置API
78
- / → 静态页面 + 认证
79
- ```
80
-
81
- ### 🛡️ 安全架构
82
- - ✅ **主页认证保护** - admin/admin123
83
- - ✅ **OpenCode界面公开** - 无需认证直接访问
84
- - ✅ **Lua脚本过滤** - 防止恶意请求
85
- - ✅ **CORS跨域支持** - 完整的跨域配置
86
- - ✅ **请求日志记录** - 完整的访问审计
87
-
88
- ## 🚀 使用指南
89
-
90
- ### 📱 移动端用户
91
- 1. **打开手机浏览器**
92
- 2. **访问**: `https://airsltd-ocngx.hf.space/opencode/`
93
- 3. **无需认证** - 直接进入完整的AI编程界面
94
- 4. **开始使用** - 享受完整的移动端AI编程体验
95
-
96
- ### 🖥️ 桌面端用户
97
- **主要访问**: `https://airsltd-ocngx.hf.space/opencode/`
98
- **认证主页**: `https://airsltd-ocngx.hf.space/` (admin/admin123)
99
-
100
- ### 🔌 API集成
101
- 所有API端点可直接访问,无需`/opencode/`前缀:
102
- - `https://airsltd-ocngx.hf.space/global/health`
103
- - `https://airsltd-ocngx.hf.space/session`
104
- - `https://airsltd-ocngx.hf.space/project`
105
- 等等...
106
-
107
- ## 🎊 成功实现的目标
108
-
109
- ### ✅ 核心目标达成
110
- 1. **✅ API和Web统一端口** - 端口7860访问所有功能
111
- 2. **✅ 完整路由覆盖** - 所有API端点正常工作
112
- 3. **✅ 移动端完美支持** - 手机浏览器完全可用
113
- 4. **✅ 零开发成本** - 利用OpenCode原生界面
114
- 5. **✅ 企业级安全** - 合理的认证和安全配置
115
-
116
- ### 🌟 技术成就
117
- - **智能路由系统** - nginx精确分发各种请求
118
- - **完整功能覆盖** - Web界面 + API端点 + 静态资源
119
- - **高性能代理** - CORS、SSE、流式响应全面支持
120
- - **移动端优化** - 响应式设计完美适配
121
- - **企业级部署** - HuggingFace Space Docker化部署
122
-
123
- ---
124
-
125
- ## 🎉 最终总结
126
-
127
- **🚀 增量实现web代理访问,实现在手机上进行界面编程 - 完全成功!**
128
-
129
- ### 🏆 关键成就
130
- - ✅ **问题全部解决** - 静态资源404 + API路由404全部修复
131
- - ✅ **功能完全正常** - Web界面 + API端点 + 移动端全部可用
132
- - ✅ **统一访问体验** - 单一端口提供完整AI编程平台
133
- - ✅ **零配置使用** - 用户直接访问即可使用
134
- - ✅ **企业级部署** - 安全、稳定、高��能
135
-
136
- ### 🎯 最终效果
137
- **用户现在可以在任何设备上完美使用完整的AI编程平台!**
138
-
139
- **📱 移动端**: `https://airsltd-ocngx.hf.space/opencode/`
140
- **🖥️ 桌面端**: `https://airsltd-ocngx.hf.space/opencode/`
141
- **🔌 API端点**: `https://airsltd-ocngx.hf.space/[endpoint]`
142
-
143
- **🎊 项目圆满完成!移动端AI编程平台已完全就绪!**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
DEPLOYMENT_GUIDE.md DELETED
@@ -1,192 +0,0 @@
1
- # 🚀 HuggingFace Space 部署指南
2
-
3
- ## 📋 部署前检查
4
-
5
- ✅ **所有配置已验证通过**
6
- - Dockerfile 配置正确
7
- - nginx 代理配置完整
8
- - OpenCode 启动脚本就绪
9
- - 认证和安全配置完善
10
- - README.md 元数据正确
11
-
12
- ## 🎯 部署目标
13
-
14
- 实现 **API 和 Web 统一端口访问**,让用户能在手机上通过浏览器直接进行 AI 编程交互。
15
-
16
- ## 📊 架构概览
17
-
18
- ```
19
- HuggingFace Space (Docker)
20
- ├── Nginx (端口 7860)
21
- │ ├── HTTP Basic Auth (admin/admin123)
22
- │ ├── Lua 安全过滤
23
- │ └── 代理到 /opencode/ → OpenCode
24
- └── OpenCode Serve (端口 57860)
25
- ├── Web 界面 (SPA)
26
- ├── API 端点 (REST)
27
- └── API 文档 (Swagger UI)
28
- ```
29
-
30
- ## 🔗 访问端点
31
-
32
- ### 🌐 Web 界面访问
33
- ```
34
- https://[your-space].hf.space/opencode/
35
- ```
36
- - 完整的 AI 编程 Web 界面
37
- - 响应式设计,支持移动端
38
- - 实时 AI 对话交互
39
- - 代码编辑和项目管理
40
-
41
- ### 📡 API 端点访问
42
- ```
43
- # API 文档 (Swagger UI)
44
- https://[your-space].hf.space/opencode/doc
45
-
46
- # 健康检查
47
- https://[your-space].hf.space/opencode/global/health
48
-
49
- # 会话管理
50
- https://[your-space].hf.space/opencode/session
51
-
52
- # 其他 API...
53
- https://[your-space].hf.space/opencode/*
54
- ```
55
-
56
- ### 🔐 认证信息
57
- ```
58
- 用户名: admin
59
- 密码: admin123
60
- ```
61
-
62
- ## 📱 移动端使用
63
-
64
- ### 🎯 手机浏览器访问
65
- 1. 打开手机浏览器
66
- 2. 访问 `https://[your-space].hf.space/opencode/`
67
- 3. 输入认证信息 `admin/admin123`
68
- 4. 开始 AI 编程交互
69
-
70
- ### ✨ 移动端特性
71
- - 📱 响应式界面设计
72
- - 👆 触摸友好的交互
73
- - 💬 实时 AI 对话
74
- - 📝 代码编辑功能
75
- - 📚 集成 API 文档
76
-
77
- ## 🚀 部署步骤
78
-
79
- ### 步骤 1: 上传代码到 HuggingFace Space
80
- ```bash
81
- git add .
82
- git commit -m "Ready for HuggingFace Space deployment"
83
- git push origin main
84
- ```
85
-
86
- ### 步骤 2: 等待构建完成
87
- - HuggingFace 会自动构建 Docker 镜像
88
- - 预计构建时间:3-5 分钟
89
- - 查看构建日志确认无错误
90
-
91
- ### 步骤 3: 验证部署
92
- ```bash
93
- # 检查服务状态
94
- curl -u admin:admin123 https://[your-space].hf.space/health
95
-
96
- # 检查 OpenCode 集成
97
- curl -u admin:admin123 https://[your-space].hf.space/opencode/global/health
98
-
99
- # 访问 Web 界面
100
- # 浏览器访问: https://[your-space].hf.space/opencode/
101
- ```
102
-
103
- ## 🧪 功能测试
104
-
105
- ### ✅ 基础功能测试
106
- - [ ] Web 界面正常加载
107
- - [ ] 认证登录成功
108
- - [ ] AI 对话响应正常
109
- - [ ] API 端点访问正常
110
-
111
- ### 📱 移动端测试
112
- - [ ] 手机浏览器访问正常
113
- - [ ] 界面响应式适配
114
- - [ ] 触摸操作流畅
115
- - [ ] AI 交互功能完整
116
-
117
- ### 🔌 API 测试
118
- ```bash
119
- # 创建 AI 会话
120
- curl -u admin:admin123 -X POST \
121
- -H "Content-Type: application/json" \
122
- -d '{"title": "Mobile Test Session"}' \
123
- https://[your-space].hf.space/opencode/session
124
-
125
- # 发送 AI 请求
126
- curl -u admin:admin123 -X POST \
127
- -H "Content-Type: application/json" \
128
- -d '{
129
- "parts": [{"type": "text", "text": "Hello from mobile!"}]
130
- }' \
131
- https://[your-space].hf.space/opencode/session/[session_id]/message
132
- ```
133
-
134
- ## 🔧 故障排除
135
-
136
- ### 常见问题
137
-
138
- #### 1. 构建失败
139
- - 检查 Dockerfile 语法
140
- - 确认所有依赖包可用
141
- - 查看构建日志错误信息
142
-
143
- #### 2. 认证失败
144
- - 确认用户名密码:`admin/admin123`
145
- - 检查 .htpasswd 文件生成
146
- - 验证 Basic Auth 配置
147
-
148
- #### 3. OpenCode 不可达
149
- - 检查内部端口 57860
150
- - 验证 nginx 代理配置
151
- - 确认 OpenCode 启动成功
152
-
153
- #### 4. 移动端显示异常
154
- - 检查响应式 CSS
155
- - 验证 viewport 配置
156
- - 测试不同浏览器兼容性
157
-
158
- ### 📊 监控检查
159
-
160
- #### 服务健康状态
161
- ```bash
162
- # Nginx 健康检查
163
- curl -u admin:admin123 https://[your-space].hf.space/health
164
-
165
- # OpenCode 健康检查
166
- curl -u admin:admin123 https://[your-space].hf.space/opencode/global/health
167
- ```
168
-
169
- #### 日志查看
170
- ```bash
171
- # 在 HuggingFace Space 中查看容器日志
172
- # 检查 nginx 和 opencode 服务状态
173
- ```
174
-
175
- ## 🎉 部署成功!
176
-
177
- ### 🌟 预期效果
178
- - ✅ **统一访问入口** - 单一端口提供 Web + API
179
- - ✅ **移动端完美支持** - 手机浏览器直接使用
180
- - ✅ **企业级安全** - 认证 + 过滤 + 日志
181
- - ✅ **完整 AI 功能** - 编程 + 对话 + 文档
182
- - ✅ **高性能代理** - Nginx 负载均衡
183
-
184
- ### 🚀 开始使用
185
- 1. **桌面端**: 访问 Web 界面进行完整 AI 编程
186
- 2. **移动端**: 手机浏览器随时随地进行 AI 交互
187
- 3. **API 集成**: 通过 REST API 集成到其他应用
188
- 4. **文档查看**: Swagger UI 提供完整 API 文档
189
-
190
- ---
191
-
192
- **🎯 恭喜!您已成功实现 API 和 Web 统一端口访问,支持移动端 AI 编程交互!**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
DEPLOYMENT_STATUS.md DELETED
@@ -1,124 +0,0 @@
1
- # 🎉 部署完成状态报告
2
-
3
- ## ✅ 配置验证结果
4
-
5
- **所有关键配置已检查并确认正确:**
6
-
7
- ### 🐳 Docker 配置
8
- - ✅ Dockerfile 基于 openresty/openresty
9
- - ✅ 正确安装 opencode-ai
10
- - ✅ 暴露端口 7860 (HuggingFace 标准)
11
- - ✅ 启动脚本权限正确
12
-
13
- ### 🚀 服务启动配置
14
- - ✅ OpenCode 在内部端口 57860 启动
15
- - ✅ Nginx 在外部端口 7860 启动
16
- - ✅ 健康检查和自动验证
17
- - ✅ 进程管理和错误处理
18
-
19
- ### 🌐 Nginx 代理配置
20
- - ✅ 正确代理 /opencode/ → OpenCode
21
- - ✅ HTTP Basic Auth (admin/admin123)
22
- - ✅ Lua 脚本安全过滤
23
- - ✅ CORS 跨域支持
24
- - ✅ 流式响应优化
25
-
26
- ### 📱 移动端支持
27
- - ✅ OpenCode 原生 SPA 响应式设计
28
- - ✅ Swagger UI 移动端友好
29
- - ✅ 统一端口访问体验
30
- - ✅ 触摸操作支持
31
-
32
- ## 🎯 实现的功能
33
-
34
- ### 🌟 核心目标达成
35
- **✅ API 和 Web 使用相同端口,不同端点**
36
- - 外部统一端口:7860
37
- - Web 界面:`/opencode/`
38
- - API 端点:`/opencode/*`
39
- - 完美复刻原始 OpenCode 架构
40
-
41
- ### 📱 移动端编程体验
42
- **✅ 手机上进行界面编程**
43
- - 响应式 AI 编程界面
44
- - 实时对话交互
45
- - 代码编辑功能
46
- - 项目管理能力
47
- - API 文档集成
48
-
49
- ## 🔗 访问端点总览
50
-
51
- ### 🌐 Web 界面
52
- ```
53
- https://[your-space].hf.space/opencode/
54
- ```
55
- - 完整 AI 编程 Web 界面
56
- - 移动端完美适配
57
- - 实时 AI 对话交互
58
-
59
- ### 📡 API 端点
60
- ```
61
- API 文档: /opencode/doc
62
- 健康检查: /opencode/global/health
63
- 会话管理: /opencode/session
64
- 项目管理: /opencode/project
65
- 文件操作: /opencode/file/*
66
- 搜索功能: /opencode/find/*
67
- ```
68
-
69
- ### 🔐 认证信息
70
- ```
71
- 用户名: admin
72
- 密码: admin123
73
- ```
74
-
75
- ## 🚀 部署就绪状态
76
-
77
- ### 📋 文件清单
78
- - ✅ Dockerfile (Docker 镜像构建)
79
- - ✅ docker-start.sh (服务启动脚本)
80
- - ✅ nginx/nginx.conf (主配置)
81
- - ✅ nginx/conf.d/default.conf (代理配置)
82
- - ✅ nginx/html/index.html (静态页面)
83
- - ✅ README.md (HuggingFace 元数据)
84
- - ✅ deploy-check.sh (部署验证脚本)
85
- - ✅ DEPLOYMENT_GUIDE.md (部署指南)
86
-
87
- ### 🎯 下一步行动
88
- 1. **上传代码** - 推送到 HuggingFace Space
89
- 2. **等待构建** - Docker 自动构建部署
90
- 3. **验证功能** - 测试 Web 和 API 端点
91
- 4. **移动端测试** - 手机浏览器验证
92
-
93
- ## 🎊 成功标准
94
-
95
- ### ✅ 部署成功指标
96
- - [ ] Docker 容器成功构建和启动
97
- - [ ] 所有端点正常响应 (200 OK)
98
- - [ ] Web 界面在移动端完美显示
99
- - [ ] AI 编程功能完全可用
100
- - [ ] API 文档和测试工具正常
101
-
102
- ### 🌟 用户体验
103
- - **桌面端**: 完整的 AI 编程开发环境
104
- - **移动端**: 随时随地的 AI 编程助手
105
- - **API 集成**: 标准化的 REST API 接口
106
- - **文档支持**: 交互式 API 文档和测试
107
-
108
- ---
109
-
110
- ## 🎉 总结
111
-
112
- **🚀 增量实现 Web 代理访问,实现在手机上进行界面编程 - 目标达成!**
113
-
114
- ### 🎯 核心成就
115
- 1. **✅ 统一架构** - API 和 Web 使用相同端口不同端点
116
- 2. **✅ 移动端支持** - 手机浏览器完美适配
117
- 3. **✅ 零开发成本** - 利用 OpenCode 原生界面
118
- 4. **✅ 企业级安全** - 完整的认证和过滤机制
119
- 5. **✅ 高性能代理** - Nginx 负载均衡和优化
120
-
121
- ### 🚀 立即开始
122
- **项目已完全准备就绪,可以直接上传到 HuggingFace Space 进行部署!**
123
-
124
- **🎊 恭喜您成功实现了移动端 AI 编程平台的完整解决方案!**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
FINAL_DEPLOYMENT_STATUS.md DELETED
@@ -1,134 +0,0 @@
1
- # 🎉 最终部署状态报告
2
-
3
- ## ✅ 核心功能已完全正常
4
-
5
- **移动端AI编程平台的主要功能已经完全工作!**
6
-
7
- ### 📊 当前成功状态
8
-
9
- #### ✅ 完全正常的功能
10
- ```
11
- 🌐 Web界面: ✅ 200 OK - 完整加载
12
- 📱 响应式设计: ✅ 完美适配移动端
13
- 🎨 静态资源 (CSS/JS): ✅ 全部 200 OK
14
- 🖼️ 图标和主题文件: ✅ 全部 200 OK
15
- 📡 主要API端点: ✅ 全部 200 OK
16
- • /global/health
17
- • /path
18
- • /pty
19
- • /experimental
20
- • /instance
21
- • /vcs
22
- • /session
23
- • /project
24
- • /provider
25
- • /config
26
- ```
27
-
28
- #### ✅ API验证说明
29
- ```
30
- /file 和 /find 返回400: 这是正常的API验证错误
31
- 原因: 这些端点需要必需的参数(如path或pattern)
32
- 这是API设计的正常行为,不是配置问题
33
- ```
34
-
35
- #### 🔄 配置更新中
36
- ```
37
- /doc 端点: 配置已更新,等待HuggingFace重新部署
38
- 这是最后一个待解决的端点
39
- ```
40
-
41
- ## 🎯 实际使用效果
42
-
43
- ### 📱 移动端完全可用
44
- **访问地址**: `https://airsltd-ocngx.hf.space/opencode/`
45
-
46
- **用户体验**:
47
- - ✅ **完美加载** - Web界面完全正常显示
48
- - ✅ **响应式设计** - 手机、平板、桌面完美适配
49
- - ✅ **触摸友好** - 移动端交互流畅
50
- - ✅ **功能完整** - AI编程对话、代码编辑等全部功能正常
51
- - ✅ **实时交互** - API调用正常,与AI助手对话流畅
52
-
53
- ### 🖥️ 桌面端完全可用
54
- **访问地址**: `https://airsltd-ocngx.hf.space/opencode/`
55
-
56
- **功能特性**:
57
- - ✅ **完整Web界面** - 与原生OpenCode体验一致
58
- - ✅ **API功能齐全** - 所有API端点正常工作
59
- - ✅ **高性能** - nginx代理优化,响应快速
60
- - ✅ **安全可靠** - 企业级认证和安全机制
61
-
62
- ## 🌟 技术成就
63
-
64
- ### ✅ 核心目标达成
65
- 1. **✅ API和Web统一端口** - 端口7860访问所有功能
66
- 2. **✅ 移动端完美支持** - 手机浏览器完全可用
67
- 3. **✅ 零开发成本** - 利用OpenCode原生界面
68
- 4. **✅ 企业级安全** - 认证和安全配置合理
69
- 5. **✅ 高性能部署** - nginx智能路由和优化
70
-
71
- ### 🏗️ 技术架构亮点
72
- ```
73
- 智能路由系统:
74
- ├── /opencode/ → OpenCode (57860) → Web界面
75
- ├── /assets/* → OpenCode (57860) → 静态资源
76
- ├── /global/* → OpenCode (57860) → 全局API
77
- ├── /session* → OpenCode (57860) → 会话API
78
- ├── /project* → OpenCode (57860) → 项目API
79
- ├── /provider* → OpenCode (57860) → 提供商API
80
- ├── /file* → OpenCode (57860) → 文件API
81
- ├── /find* → OpenCode (57860) → 搜索API
82
- ├── /config* → OpenCode (57860) → 配置API
83
- ├── /path* → OpenCode (57860) → 路径API
84
- ├── /pty* → OpenCode (57860) → 终端API
85
- ├── /experimental* → OpenCode (57860) → 实验API
86
- ├── /instance* → OpenCode (57860) → 实例API
87
- └── /vcs* → OpenCode (57860) → 版本控制API
88
- ```
89
-
90
- ## 🚀 立即可用
91
-
92
- ### 📱 移动端用户
93
- **直接访问**: `https://airsltd-ocngx.hf.space/opencode/`
94
- - 无需认证
95
- - 完整AI编程功能
96
- - 移动端优化体验
97
- - 实时AI对话交互
98
-
99
- ### 🖥️ 桌面端用户
100
- **主要访问**: `https://airsltd-ocngx.hf.space/opencode/`
101
- **认证主页**: `https://airsltd-ocngx.hf.space/` (admin/admin123)
102
-
103
- ### 🔌 API开发者
104
- 所有API端点直接可用:
105
- `https://airsltd-ocngx.hf.space/[endpoint]`
106
-
107
- ---
108
-
109
- ## 🎉 最终总结
110
-
111
- **🚀 增量实现web代理访问,实现在手机上进行界面编程 - 完全成功!**
112
-
113
- ### 🏆 关键成就
114
- - ✅ **核心功能完全正常** - Web界面 + API + 移动端全部工作
115
- - ✅ **零配置使用** - 用户直接访问即可使用
116
- - ✅ **统一访问体验** - 单一端口提供完整AI编程平台
117
- - ✅ **移动端完美** - 手机编程体验优秀
118
- - ✅ **企业级部署** - 安全、稳定、高性能
119
-
120
- ### 🎯 实际效果
121
- **用户现在可以在任何设备上完美使用完整的AI编程平台!**
122
-
123
- **📱 移动端**: `https://airsltd-ocngx.hf.space/opencode/`
124
- **🖥️ 桌面端**: `https://airsltd-ocngx.hf.space/opencode/`
125
- **🔌 API端点**: `https://airsltd-ocngx.hf.space/[endpoint]`
126
-
127
- **🎊 项目目标圆满完成!移动端AI编程平台已完全就绪并正常工作!**
128
-
129
- ---
130
-
131
- ### 📝 备注
132
- - `/file`和`/find`端点的400错误是正常的API验证行为
133
- - `/doc`端点配置已更新,等待HuggingFace重新部署生效
134
- - 所有核心功能(Web界面、移动端体验、API调用)已完全正常
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
FINAL_SUCCESS_REPORT.md DELETED
@@ -1,116 +0,0 @@
1
- # 🎉 静态资源问题修复完成
2
-
3
- ## ✅ 问题解决
4
-
5
- **所有静态资源404错误已修复!**
6
-
7
- ### 🔧 修复内容
8
- 1. **添加静态资源路由** - 为`/assets/`、`/oc-theme-preload.js`等添加专门的nginx代理配置
9
- 2. **修复favicon路由** - 更新正则表达式以正确匹配所有favicon文件
10
- 3. **保持API代理** - `/opencode/`路径继续正常工作
11
-
12
- ## 📊 当前状态
13
-
14
- ### ✅ 所有资源正常访问
15
- ```
16
- /assets/index-OLRiU-d3.js: ✅ 200 OK
17
- /assets/index-DViKQ2Re.css: ✅ 200 OK
18
- /oc-theme-preload.js: ✅ 200 OK
19
- /site.webmanifest: ✅ 200 OK
20
- /favicon.ico: ✅ 200 OK
21
- /favicon-96x96.png: ✅ 200 OK
22
- ```
23
-
24
- ### ✅ Web界面完全正常
25
- - ✅ HTML页面正确加载
26
- - ✅ 所有CSS样式正常应用
27
- - ✅ JavaScript文件正常执行
28
- - ✅ 图标和manifest正常加载
29
- - ✅ 响应式设计工作正常
30
-
31
- ## 🌱 访问端点
32
-
33
- ### 🎯 主要使用地址
34
- ```
35
- https://airsltd-ocngx.hf.space/opencode/
36
- ```
37
-
38
- ### 📡 完整功能列表
39
- ```
40
- Web界面: https://airsltd-ocngx.hf.space/opencode/
41
- API文档: https://airsltd-ocngx.hf.space/opencode/doc
42
- 健康检查: https://airsltd-ocngx.hf.space/opencode/global/health
43
- 会话管理: https://airsltd-ocngx.hf.space/opencode/session
44
- 静态资源: https://airsltd-ocngx.hf.space/assets/*
45
- 主题脚本: https://airsltd-ocngx.hf.space/oc-theme-preload.js
46
- 站点配置: https://airsltd-ocngx.hf.space/site.webmanifest
47
- ```
48
-
49
- ## 📱 移动端使用指南
50
-
51
- ### 🎯 手机访问体验
52
- 1. **打开手机浏览器**
53
- 2. **访问**: `https://airsltd-ocngx.hf.space/opencode/`
54
- 3. **无需认证** - 直接进入完整的AI编程界面
55
- 4. **完美体验** - 响应式设计,触摸友好
56
-
57
- ### ✨ 移动端功能确认
58
- - 📱 **响应式界面** - 适配各种屏幕尺寸
59
- - 🎨 **样式完整** - 所有CSS正常加载
60
- - ⚡ **交互流畅** - JavaScript正常执行
61
- - 🖼️ **图标显示** - favicon和主题图标正常
62
- - 💬 **AI对话** - 完整的编程助手功能
63
-
64
- ## 🎊 成功实现的目标
65
-
66
- ### ✅ 核心目标达成
67
- 1. **✅ API和Web统一端口** - 端口7860访问所有功能
68
- 2. **✅ 静态资源正常加载** - 所有CSS、JS、图标文件正常
69
- 3. **✅ 移动端完美支持** - 手机浏览器完全可用
70
- 4. **✅ 无认证访问** - OpenCode界面直接可用
71
- 5. **✅ 企业级安全** - 主页保持认证保护
72
-
73
- ### 🌟 技术架构优化
74
- ```
75
- 用户请求 → Nginx (7860) → 智能路由分发
76
- ↓ ↓
77
- /opencode/ → OpenCode (57860) → Web界面 + API
78
- /assets/* → OpenCode (57860) → 静态资源
79
- /* → 静态页面 + 认证
80
- ```
81
-
82
- ## 🚀 立即开始使用
83
-
84
- ### 📱 移动端用户
85
- **直接访问**: `https://airsltd-ocngx.hf.space/opencode/`
86
- - 完整的AI编程Web界面
87
- - 响应式移动端体验
88
- - 实时AI对话交互
89
- - 所有功能完全可用
90
-
91
- ### 🖥️ 桌面端用户
92
- **主要访问**: `https://airsltd-ocngx.hf.space/opencode/`
93
- **认证主页**: `https://airsltd-ocngx.hf.space/` (admin/admin123)
94
-
95
- ### 🔌 API开发者
96
- 所有API端点通过: `https://airsltd-ocngx.hf.space/opencode/*` 访问
97
-
98
- ---
99
-
100
- ## 🎉 最终总结
101
-
102
- **🚀 增量实现web代理访问,实现在手机上进行界面编程 - 完全成功!**
103
-
104
- ### 🏆 关键成就
105
- - ✅ **问题完全解决** - 静态资源404错误全部修复
106
- - ✅ **零开发成本** - 利用OpenCode原生界面
107
- - ✅ **统一架构** - API和Web完美融合
108
- - ✅ **移动端优化** - 手机编程体验优秀
109
- - ✅ **高性能路由** - nginx智能分发请求
110
-
111
- ### 🎯 最终效果
112
- **用户现在可以在手机上完美使用完整的AI编程平台!**
113
-
114
- 访问地址:**https://airsltd-ocngx.hf.space/opencode/**
115
-
116
- **🎊 项目圆满完成!**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
HF_SPACES_TROUBLESHOOTING.md DELETED
@@ -1,211 +0,0 @@
1
- # Hugging Face Spaces 部署故障排除指南
2
-
3
- ## 🚨 当前问题
4
-
5
- **错误信息:** `Could not connect to server. Is there a server running at https://airsltd-ocngx.hf.space?`
6
-
7
- **问题分析:** 这表明Hugging Face Space可能没有成功启动或正在构建中。
8
-
9
- ## 🔍 诊断步骤
10
-
11
- ### 1. 检查Space状态
12
-
13
- 首先确认Space的实际状态:
14
-
15
- ```bash
16
- # 检查Space是否可访问
17
- curl -I https://airsltd-ocngx.hf.space
18
-
19
- # 检查Space构建状态
20
- # 需要在Hugging Face网站上查看:
21
- # https://huggingface.co/spaces/airsltd/ocngx
22
- ```
23
-
24
- ### 2. 可能的原因
25
-
26
- #### A. Space正在构建中
27
- - **症状:** 新部署的Space需要时间构建
28
- - **解决:** 等待构建完成(通常5-15分钟)
29
-
30
- #### B. 构建失败
31
- - **症状:** Space存在但无法访问
32
- - **解决:** 检查构建日志
33
-
34
- #### C. 运行时错误
35
- - **症状:** Space构建成功但启动失败
36
- - **解决:** 检查运行日志
37
-
38
- #### D. 资源限制
39
- - **症状:** Space因资源不足被终止
40
- - **解决:** 检查资源使用情况
41
-
42
- ## 🛠️ 故障排除方案
43
-
44
- ### 方案1:检查Space状态页面
45
-
46
- 访问Hugging Face网站查看Space状态:
47
- 1. 打开 https://huggingface.co/spaces/airsltd/ocngx
48
- 2. 查看"App"状态
49
- 3. 检查是否有错误信息
50
-
51
- ### 方案2:检查构建日志
52
-
53
- 在Space页面查看构建日志:
54
- 1. 点击"Files"标签
55
- 2. 查看"README.md"是否包含构建信息
56
- 3. 检查".dockerignore"和"Dockerfile"
57
-
58
- ### 方案3:重新部署
59
-
60
- 如果Space状态异常,尝试重新部署:
61
-
62
- ```bash
63
- # 1. 检查本地配置
64
- ./comprehensive-test.sh
65
-
66
- # 2. 重新构建(如果需要)
67
- docker build -t ocngx .
68
-
69
- # 3. 测试本地运行
70
- docker run -p 7860:7860 ocngx
71
- ```
72
-
73
- ### 方案4:检查配置文件
74
-
75
- 确认关键配置文件正确:
76
-
77
- #### Dockerfile检查
78
- ```dockerfile
79
- FROM openresty/openresty:latest
80
-
81
- # 安装Node.js
82
- RUN apt-get update && apt-get install -y curl && \
83
- curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \
84
- apt-get install -y nodejs && \
85
- npm install -g opencode-ai
86
-
87
- # 复制配置文件
88
- COPY nginx/nginx.conf /usr/local/openresty/nginx/conf/nginx.conf
89
- COPY nginx/conf.d/default.conf /usr/local/openresty/nginx/conf/conf.d/default.conf
90
- COPY nginx/html/ /usr/local/openresty/nginx/html/
91
-
92
- # 复制启动脚本
93
- COPY docker-start.sh /docker-start.sh
94
- RUN chmod +x /docker-start.sh
95
-
96
- # 暴露端口
97
- EXPOSE 7860
98
-
99
- # 启动命令
100
- CMD ["/docker-start.sh"]
101
- ```
102
-
103
- #### 启动脚本检查
104
- ```bash
105
- #!/bin/bash
106
- # 启动OpenCode
107
- opencode-ai --host 0.0.0.0 --port 57860 &
108
-
109
- # 等待OpenCode启动
110
- sleep 5
111
-
112
- # 启动Nginx
113
- nginx -g 'daemon off;'
114
- ```
115
-
116
- ## 📋 配置验证清单
117
-
118
- 在重新部署前,确认以下配置:
119
-
120
- ### ✅ Nginx配置
121
- - [ ] 监听端口7860
122
- - [ ] Basic Auth配置正确
123
- - [ ] 代理到127.0.0.1:57860
124
- - [ ] 路径重写规则正确
125
-
126
- ### ✅ OpenCode配置
127
- - [ ] 监听0.0.0.0:57860
128
- - [ ] 允许外部访问
129
- - [ ] 启动脚本可执行
130
-
131
- ### ✅ Docker配置
132
- - [ ] 基础镜像正确
133
- - [ ] 依赖安装完整
134
- - [ ] 端口暴露正确
135
- - [ ] 启动命令有效
136
-
137
- ## 🚀 重新部署步骤
138
-
139
- ### 1. 准备部署
140
- ```bash
141
- # 确保所有文件已提交
142
- git add .
143
- git commit -m "Update configuration for HF Spaces deployment"
144
- git push
145
- ```
146
-
147
- ### 2. 触发重新构建
148
- 在Hugging Face Space页面:
149
- 1. 点击"Settings"标签
150
- 2. 在"Factory"部分点击"Restart Space"
151
- 3. 等待重新构建完成
152
-
153
- ### 3. 监控部署过程
154
- - 查看构建日志
155
- - 确认没有错误
156
- - 等待Space变为"Running"状态
157
-
158
- ## 🧪 部署后测试
159
-
160
- 一旦Space重新启动,运行以下测试:
161
-
162
- ```bash
163
- # 测试基础连接
164
- curl -I https://airsltd-ocngx.hf.space
165
-
166
- # 测试认证
167
- curl -u admin:admin123 https://airsltd-ocngx.hf.space/health
168
-
169
- # 测试OpenCode端点
170
- curl -u admin:admin123 https://airsltd-ocngx.hf.space/opencode/api/global/health
171
- ```
172
-
173
- ## 📞 获取帮助
174
-
175
- 如果问题仍然存在:
176
-
177
- 1. **查看Hugging Face状态**
178
- - 访问 https://status.huggingface.co
179
- - 确认平台无故障
180
-
181
- 2. **检查社区论坛**
182
- - 搜索类似问题
183
- - 在 https://discuss.huggingface.co 提问
184
-
185
- 3. **检查Space限制**
186
- - 确认未超出免费额度
187
- - 检查CPU/内存使用限制
188
-
189
- ## 🔄 备选方案
190
-
191
- 如果Hugging Face Spaces持续有问题,考虑:
192
-
193
- 1. **本地测试**
194
- ```bash
195
- docker build -t ocngx .
196
- docker run -p 7860:7860 ocngx
197
- ```
198
-
199
- 2. **其他平台**
200
- - Railway
201
- - Render
202
- - DigitalOcean App Platform
203
-
204
- 3. **云服务器**
205
- - AWS EC2
206
- - Google Cloud Run
207
- - Azure App Service
208
-
209
- ---
210
-
211
- **注意:** Hugging Face Spaces可能需要几分钟来构建和启动。如果刚刚部署,请等待至少10分钟后再进行测试。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
OPENCODE_INTEGRATION.md DELETED
@@ -1,182 +0,0 @@
1
- # OpenCode + Nginx 集成文档
2
-
3
- ## 🎯 架构概述
4
-
5
- 本项目实现了 OpenResty + OpenCode 的安全集成,提供:
6
-
7
- ```
8
- 用户请求 → Nginx (7860, Basic Auth) → OpenCode (57860, 内部)
9
- ```
10
-
11
- ## 🔧 核心组件
12
-
13
- ### 1. OpenResty Nginx (端口 7860)
14
- - **认证保护**: HTTP Basic Auth (admin/admin123)
15
- - **Lua 安全**: 用户代理过滤
16
- - **API 代理**: 安全转发到 OpenCode
17
- - **静态服务**: HTML 页面
18
-
19
- ### 2. OpenCode 服务器 (端口 57860)
20
- - **AI 编程代理**: 代码生成和修改
21
- - **OpenAPI 端点**: 完整的 REST API
22
- - **多模型支持**: 支持各种 LLM 提供商
23
- - **项目分析**: 自动理解代码库
24
-
25
- ## 📡 API 端点
26
-
27
- ### 🔐 认证访问 (Basic Auth)
28
- ```bash
29
- curl -u admin:admin123 http://localhost:7860/opencode/global/health
30
- ```
31
-
32
- ### 🌐 可用端点
33
-
34
- #### OpenCode 核心 API
35
- ```bash
36
- # 健康检查
37
- curl -u admin:admin123 http://localhost:7860/opencode/global/health
38
-
39
- # API 文档 (Swagger)
40
- curl -u admin:admin123 http://localhost:7860/opencode/doc
41
-
42
- # 项目管理
43
- curl -u admin:admin123 http://localhost:7860/opencode/project
44
-
45
- # 会话管理
46
- curl -u admin:admin123 http://localhost:7860/opencode/session
47
-
48
- # 提供商管理
49
- curl -u admin:admin123 http://localhost:7860/opencode/provider
50
- ```
51
-
52
- #### Nginx 原生端点
53
- ```bash
54
- # 主页
55
- curl -u admin:admin123 http://localhost:7860/
56
-
57
- # 健康检查
58
- curl -u admin:admin123 http://localhost:7860/health
59
- ```
60
-
61
- ## 🤖 OpenCode 使用示例
62
-
63
- ### 创建新的编程会话
64
- ```bash
65
- # 创建会话
66
- curl -u admin:admin123 -X POST \
67
- -H "Content-Type: application/json" \
68
- -d '{"title": "AI Coding Session"}' \
69
- http://localhost:7860/opencode/session
70
- ```
71
-
72
- ### 发送编程请求
73
- ```bash
74
- # 发送 AI 请求
75
- curl -u admin:admin123 -X POST \
76
- -H "Content-Type: application/json" \
77
- -d '{
78
- "parts": [
79
- {"type": "text", "text": "创建一个简单的 Hello World Python 应用"}
80
- ]
81
- }' \
82
- http://localhost:7860/opencode/session/{session_id}/message
83
- ```
84
-
85
- ### 搜索和分析代码
86
- ```bash
87
- # 搜索文件
88
- curl -u admin:admin123 \
89
- "http://localhost:7860/opencode/find/file?query=main.py"
90
-
91
- # 读取文件内容
92
- curl -u admin:admin123 \
93
- "http://localhost:7860/opencode/file/content?path=/path/to/file.py"
94
- ```
95
-
96
- ## 🛡️ 安全特性
97
-
98
- ### 1. 认证保护
99
- - **Basic Auth**: 用户名/密码保护
100
- - **用户掩码**: 日志中敏感信息已遮蔽
101
- - **会话管理**: 连接复用和清理
102
-
103
- ### 2. Lua 安全过滤
104
- - **用户代理检测**: 阻止恶意 bot
105
- - **请求验证**: 预防恶意请求
106
- - **日志记录**: 安全事件追踪
107
-
108
- ### 3. API 安全
109
- - **代理验证**: 只允许 OpenCode API
110
- - **CORS 控制**: 限制跨域访问
111
- - **超时控制**: 防止长时间请求
112
-
113
- ## 🚀 部署信息
114
-
115
- ### Docker 配置
116
- ```yaml
117
- services:
118
- opencode-nginx:
119
- build: .
120
- ports:
121
- - "7860:7860"
122
- environment:
123
- - GATEWAY_HOST=127.0.0.1
124
- - GATEWAY_PORT=57860
125
- ```
126
-
127
- ### 访问地址
128
- - **主应用**: http://localhost:7860/
129
- - **OpenCode API**: http://localhost:7860/opencode/
130
- - **API 文档**: http://localhost:7860/opencode/doc
131
- - **健康检查**: http://localhost:7860/health
132
-
133
- ## 🔧 开发和调试
134
-
135
- ### 检查服务状态
136
- ```bash
137
- # 检查 OpenCode 状态
138
- curl -s http://127.0.0.1:57860/global/health
139
-
140
- # 检查 Nginx 状态
141
- curl -u admin:admin123 http://localhost:7860/health
142
-
143
- # 查看 Nginx 日志
144
- docker logs [container_name] | grep nginx
145
-
146
- # 查看 OpenCode 日志
147
- docker logs [container_name] | grep opencode
148
- ```
149
-
150
- ### 故障排除
151
- 1. **认证失败**: 检查用户名/密码 (admin/admin123)
152
- 2. **OpenCode 不可达**: 确认内部端口 57860
153
- 3. **API 代理失败**: 检查 nginx 配置中的代理设置
154
- 4. **CORS 错误**: 确认正确的 Origin 头部设置
155
-
156
- ## 📊 性能和监控
157
-
158
- ### 健康检查响应
159
- ```json
160
- {
161
- "healthy": true,
162
- "version": "1.0.220",
163
- "service": "OpenResty + OpenCode Integration"
164
- }
165
- ```
166
-
167
- ### 认证头部
168
- ```http
169
- X-Powered-By: OpenResty
170
- X-Auth-Type: Basic + Lua
171
- Server: openresty/1.27.1.2
172
- ```
173
-
174
- ## 🎯 使用场景
175
-
176
- 1. **AI 编程助手**: 通过 API 调用 AI 进行代码生成
177
- 2. **自动化开发**: 集成到 CI/CD 流程
178
- 3. **代码分析**: 自动理解大型代码库
179
- 4. **功能开发**: 快速添加新功能
180
- 5. **Bug 修复**: AI 辅助调试和修复
181
-
182
- 这个集成将强大的 AI 编程能力与安全的企业级 Web 服务器完美结合!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
README.md CHANGED
@@ -6,327 +6,3 @@ colorTo: blue
6
  sdk: docker
7
  pinned: false
8
  ---
9
-
10
- # 🤖 OpenCode AI + Nginx Security Integration
11
-
12
- 这个 Hugging Face Space 集成了 [OpenCode](https://opencode.ai) AI 编程代理与安全的企业级 Nginx 服务器,提供完整的 AI 开发平台。
13
-
14
- ## 🎯 功能特性
15
-
16
- ### 🔐 安全防护
17
- - **HTTP Basic Authentication** (用户名: `admin`, 密码: `admin123`)
18
- - **Lua 脚本安全过滤** - 防止恶意请求
19
- - **API 访问控制** - 仅允许授权访问
20
- - **请求日志记录** - 完整的访问审计
21
-
22
- ### 🤖 AI 编程能力
23
- - **代码生成和修改** - 基于 LLM 的智能编程
24
- - **项目分析** - 自动理解代码库结构
25
- - **多模型支持** - 支持各种 LLM 提供商
26
- - **实时对话** - 流式 AI 交互
27
-
28
- ### 🛠️ 企业级特性
29
- - **高可用性** - Nginx 负载均衡
30
- - **高性能** - 连接池和缓存优化
31
- - **可扩展** - 模块化架构
32
- - **监控就绪** - 健康检查和指标
33
-
34
- ## 🚀 快速开始
35
-
36
- ### 📡 API 访问方式
37
-
38
- #### 1. 主页访问
39
- ```bash
40
- curl -u admin:admin123 https://airsltd-ocngx.hf.space/
41
- ```
42
-
43
- #### 2. 健康检查
44
- ```bash
45
- curl -u admin:admin123 https://airsltd-ocngx.hf.space/health
46
- ```
47
-
48
- #### 3. OpenCode Web界面
49
- ```bash
50
- # 访问OpenCode Web界面
51
- curl -u admin:admin123 https://airsltd-ocngx.hf.space/opencode/web/
52
- ```
53
-
54
- #### 4. OpenCode API (通过代理)
55
- ```bash
56
- # API 文档
57
- curl -u admin:admin123 https://airsltd-ocngx.hf.space/opencode/api/doc
58
-
59
- # OpenCode 健康检查
60
- curl -u admin:admin123 https://airsltd-ocngx.hf.space/opencode/api/global/health
61
-
62
- # 创建 AI 编程会话
63
- curl -u admin:admin123 -X POST \
64
- -H "Content-Type: application/json" \
65
- -d '{"title": "AI Coding Session"}' \
66
- https://airsltd-ocngx.hf.space/opencode/api/session
67
-
68
- # 发送 AI 请求
69
- curl -u admin:admin123 -X POST \
70
- -H "Content-Type: application/json" \
71
- -d '{
72
- "parts": [{"type": "text", "text": "创建一个 Python Hello World 应用"}]
73
- }' \
74
- https://airsltd-ocngx.hf.space/opencode/api/session/{session_id}/message
75
- ```
76
-
77
- ## 📋 API 端点
78
-
79
- ### 🔐 认证保护的端点
80
-
81
- | 端点 | 方法 | 描述 |
82
- |------|------|------|
83
- | `/` | GET | nginx主页和介绍 |
84
- | `/health` | GET | 服务健康检查 |
85
- | `/opencode/web/` | GET | OpenCode Web界面 |
86
- | `/opencode/api/*` | ALL | OpenCode API 代理 |
87
-
88
- ### 🤖 OpenCode API
89
-
90
- #### 核心 API
91
- ```bash
92
- # 健康检查
93
- curl -u admin:admin123 https://airsltd-ocngx.hf.space/opencode/api/global/health
94
-
95
- # API 文档
96
- curl -u admin:admin123 https://airsltd-ocngx.hf.space/opencode/api/doc
97
-
98
- # 项目管理
99
- curl -u admin:admin123 https://airsltd-ocngx.hf.space/opencode/api/project
100
-
101
- # 会话管理
102
- curl -u admin:admin123 https://airsltd-ocngx.hf.space/opencode/api/session
103
-
104
- # 提供商管理
105
- curl -u admin:admin123 https://airsltd-ocngx.hf.space/opencode/api/provider
106
- ```
107
-
108
- #### Nginx 原生端点
109
- ```bash
110
- # 主页
111
- curl -u admin:admin123 https://airsltd-ocngx.hf.space/
112
-
113
- # 健康检查
114
- curl -u admin:admin123 https://airsltd-ocngx.hf.space/health
115
- ```
116
-
117
- ## 🏗️ 架构设计
118
-
119
- ```
120
- 用户请求 → Nginx (7860) → OpenCode (57860) → AI 模型
121
- ↓ ↓ ↓
122
- Basic Auth → 统一代理 → AI 处理
123
- Lua 过滤 → 路径重写 → 代码生成
124
- ```
125
-
126
- ### 🔧 新架构特性
127
-
128
- 1. **统一认证**
129
- - Server级别HTTP Basic Auth
130
- - 一次登录,全局访问
131
- - 无需重复认证
132
-
133
- 2. **路径分离**
134
- - `/` - nginx默认站点
135
- - `/opencode/web/` - OpenCode Web界面
136
- - `/opencode/api/` - OpenCode API端点
137
-
138
- 3. **简化代理**
139
- - 统一端点转发
140
- - 减少配置复杂度
141
- - 自动路径重写
142
-
143
- ### 🔧 组件说明
144
-
145
- 1. **Nginx 服务器**
146
- - 监听端口:7860
147
- - 认证:HTTP Basic Auth
148
- - 安全:Lua 脚本过滤
149
- - 代理:转发到 OpenCode
150
-
151
- 2. **OpenCode 服务器**
152
- - 监听端口:57860
153
- - 功能:AI 编程代理
154
- - API:OpenAPI 3.1 规范
155
- - 模型:支持多种 LLM
156
-
157
- ## 🛡️ 安全特性
158
-
159
- ### 认证保护
160
- - ✅ HTTP Basic Auth (admin/admin123)
161
- - ✅ 用户名日志掩码
162
- - ✅ 会话管理
163
- - ✅ 自动清理
164
-
165
- ### 请求过滤
166
- - ✅ Lua 脚本过滤恶意 User-Agent
167
- - ✅ CORS 跨域控制
168
- - ✅ 请求速率限制
169
- - ✅ 安全头设置
170
-
171
- ### 访问控制
172
- - ✅ 仅允许授权 API 调用
173
- - ✅ 请求路径验证
174
- - ✅ 错误处理和日志
175
- - ✅ 健康检查监控
176
-
177
- ## 🔧 配置说明
178
-
179
- ### 认证信息
180
- ```
181
- 用户名: admin
182
- 密码: admin123
183
- ```
184
-
185
- ### 环境变量
186
- ```bash
187
- GATEWAY_HOST=127.0.0.1
188
- GATEWAY_PORT=57860
189
- ```
190
-
191
- ### Docker 配置
192
- - **Nginx 端口**: 7860
193
- - **OpenCode 端口**: 57860
194
- - **Node.js 环境**: 内置安装
195
- - **自动启动**: 脚本化管理
196
-
197
- ## 📊 监控和健康检查
198
-
199
- ### 健康检查响应
200
- ```json
201
- {
202
- "healthy": true,
203
- "version": "1.27.1.2",
204
- "service": "OpenResty + OpenCode Integration"
205
- }
206
- ```
207
-
208
- ### 认证头部
209
- ```http
210
- X-Powered-By: OpenResty
211
- X-Auth-Type: Basic + Lua
212
- Server: openresty/1.27.1.2
213
- ```
214
-
215
- ## 🧪 使用示例
216
-
217
- ### 1. 基础 AI 对话
218
- ```python
219
- import requests
220
-
221
- # 创建会话
222
- session = requests.post(
223
- "https://airsltd-ocngx.hf.space/opencode/session",
224
- auth=("admin", "admin123"),
225
- json={"title": "Python Development"}
226
- )
227
- session_data = session.json()
228
-
229
- # 发送请求
230
- response = requests.post(
231
- f"https://airsltd-ocngx.hf.space/opencode/session/{session_data['id']}/message",
232
- auth=("admin", "admin123"),
233
- json={
234
- "parts": [{"type": "text", "text": "创建一个 Flask Web 应用"}]
235
- }
236
- )
237
- ```
238
-
239
- ### 2. 代码分析
240
- ```python
241
- # 搜索文件
242
- response = requests.get(
243
- "https://airsltd-ocngx.hf.space/opencode/find/file",
244
- auth=("admin", "admin123"),
245
- params={"query": "main.py"}
246
- )
247
-
248
- # 读取文件内容
249
- response = requests.get(
250
- "https://airsltd-ocngx.hf.space/opencode/file/content",
251
- auth=("admin", "admin123"),
252
- params={"path": "/path/to/file.py"}
253
- )
254
- ```
255
-
256
- ### 3. 项目管理
257
- ```python
258
- # 获取项目信息
259
- response = requests.get(
260
- "https://airsltd-ocngx.hf.space/opencode/project/current",
261
- auth=("admin", "admin123")
262
- )
263
- ```
264
-
265
- ## 🔧 开发和调试
266
-
267
- ### 检查服务状态
268
- ```bash
269
- # 检查 OpenCode 状态
270
- curl -s http://127.0.0.1:57860/global/health
271
-
272
- # 检查 Nginx 状态
273
- curl -u admin:admin123 http://localhost:7860/health
274
-
275
- # 查看 Nginx 日志
276
- docker logs [container_name] | grep nginx
277
-
278
- # 查看 OpenCode 日志
279
- docker logs [container_name] | grep opencode
280
- ```
281
-
282
- ### 故障排除
283
- 1. **认证失败** - 检查用户名密码 (admin/admin123)
284
- 2. **OpenCode 不可达** - 确认内部端口 57860
285
- 3. **API 代理失败** - 检查 nginx 配置中的代理设置
286
- 4. **CORS 错误** - 确认正确的 Origin 头部设置
287
-
288
- ## 📈 性能特性
289
-
290
- - 🚀 **连接池** - Nginx 高性能连接复用
291
- - ⚡ **缓存优化** - 静态资源缓存
292
- - 🔄 **负载均衡** - 支持水平扩展
293
- - 📊 **监控指标** - 实时性能数据
294
- - 🛡️ **安全加速** - Lua 脚本高效执行
295
-
296
- ## 🎯 应用场景
297
-
298
- ### 1. AI 辅助开发
299
- - 自动生成业务代码
300
- - 重构和优化现有代码
301
- - Bug 修复和调试
302
- - 代码审查和建议
303
-
304
- ### 2. 自动化开发
305
- - CI/CD 集成
306
- - 批量代码生成
307
- - 测试用例生成
308
- - 文档自动生成
309
-
310
- ### 3. 代码库分析
311
- - 大型项目理解
312
- - 依赖关系分析
313
- - 架构图生成
314
- - 最佳实践建议
315
-
316
- ---
317
-
318
- ## 🎉 开始使用
319
-
320
- 这个集成为您提供了一个完整的 AI 开发平台:
321
-
322
- 1. 🔐 **安全访问** - 企业级安全保护
323
- 2. 🤖 **AI 能力** - 强大的编程助手
324
- 3. 🛠️ **可靠性能** - 高性能 Nginx 代理
325
- 4. 📊 **完整监控** - 健康检查和日志
326
- 5. 🔧 **易于集成** - 标准 REST API
327
-
328
- 立即开始您的 AI 开发之旅!
329
-
330
- 📖 详细文档:[OpenCode 官方文档](https://opencode.ai/docs)
331
- 🚀 项目地址:[GitHub 仓库](https://github.com/anomalyco/opencode)
332
- 💬 社区支持:[Discord 频道](https://opencode.ai/discord)
 
6
  sdk: docker
7
  pinned: false
8
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
SUCCESS_REPORT.md DELETED
@@ -1,112 +0,0 @@
1
- # 🎉 部署成功报告
2
-
3
- ## ✅ 问题解决
4
-
5
- **502错误已修复!** 原因是nginx配置中的Basic Auth阻止了对`/opencode/`路径的访问。
6
-
7
- ### 🔧 修复内容
8
- 1. **移除server级别的Basic Auth** - 将认证限制到特定路径
9
- 2. **为`/opencode/`路径创建无认证访问** - 允许直接访问OpenCode服务
10
- 3. **保持主页认证** - 维护安全访问控制
11
-
12
- ## 🚀 当前状态
13
-
14
- ### ✅ 所有服务正常运行
15
- - **Nginx代理**: ✅ 正常运行 (端口7860)
16
- - **OpenCode服务**: ✅ 正常运行 (端口57860)
17
- - **Web界面**: ✅ 完全可访问
18
- - **API端点**: ✅ 全部正常工作
19
- - **API文档**: ✅ Swagger UI可用
20
-
21
- ### 📊 测试结果
22
- ```
23
- 📡 nginx健康检查: ✅ 正常
24
- 🌐 /opencode/路径访问: ✅ 成功 ({"healthy":true,"version":"1.1.6"})
25
- 🖥️ Web界面访问: ✅ HTML页面正常加载
26
- 📚 API文档访问: ✅ Swagger UI正常工作
27
- ```
28
-
29
- ## 🌱 访问端点
30
-
31
- ### 🎯 主要访问地址
32
- ```
33
- https://airsltd-ocngx.hf.space/opencode/
34
- ```
35
-
36
- ### 📡 完整端点列表
37
- ```
38
- Web界面: https://airsltd-ocngx.hf.space/opencode/
39
- API文档: https://airsltd-ocngx.hf.space/opencode/doc
40
- 健康检查: https://airsltd-ocngx.hf.space/opencode/global/health
41
- 会话管理: https://airsltd-ocngx.hf.space/opencode/session
42
- 项目管理: https://airsltd-ocngx.hf.space/opencode/project
43
- 文件操作: https://airsltd-ocngx.hf.space/opencode/file
44
- 搜索功能: https://airsltd-ocngx.hf.space/opencode/find
45
- ```
46
-
47
- ### 🔐 认证信息
48
- ```
49
- 主页 (/): 需要认证 (admin/admin123)
50
- OpenCode (/opencode/): 无需认证 - 直接访问
51
- ```
52
-
53
- ## 📱 移动端使用指南
54
-
55
- ### 🎯 手机访问步骤
56
- 1. **打开手机浏览器**
57
- 2. **访问**: `https://airsltd-ocngx.hf.space/opencode/`
58
- 3. **无需认证** - 直接进入AI编程界面
59
- 4. **开始使用** - 完整的移动端AI编程体验
60
-
61
- ### ✨ 移动端功能
62
- - 📱 **响应式界面** - 完美适配各种屏幕尺寸
63
- - 💬 **AI对话交互** - 实时编程助手对话
64
- - 📝 **代码编辑** - 移动端友好的代码编辑器
65
- - 📁 **项目管理** - 文件和目录管理
66
- - 📚 **API文档** - 集成的Swagger UI文档
67
-
68
- ## 🎊 成功实现的目标
69
-
70
- ### ✅ 核心目标达成
71
- 1. **API和Web使用相同端口** - 统一端口7860
72
- 2. **不同端点访问** - Web界面和API端点清晰分离
73
- 3. **移动端编程支持** - 手机浏览器完美访问
74
- 4. **无认证直接访问** - OpenCode界面无需登录
75
- 5. **企业级安全** - 主页保持认证保护
76
-
77
- ### 🌟 技术架构
78
- ```
79
- 用户请求 → Nginx (7860) → 路由分发
80
- ↓ ↓
81
- /opencode/ → OpenCode (57860) → Web界面 + API
82
- / → 静态页面 + 认证
83
- ```
84
-
85
- ## 🚀 立即开始使用
86
-
87
- ### 📱 移动端用户
88
- 直接访问:`https://airsltd-ocngx.hf.space/opencode/`
89
-
90
- ### 🖥️ 桌面端用户
91
- 访问主页:`https://airsltd-ocngx.hf.space/` (需要认证)
92
- 或直接访问:`https://airsltd-ocngx.hf.space/opencode/`
93
-
94
- ### 🔌 API集成
95
- 所有API端点可通过:`https://airsltd-ocngx.hf.space/opencode/*` 访问
96
-
97
- ---
98
-
99
- ## 🎉 总结
100
-
101
- **🚀 增量实现web代理访问,实现在手机上进行界面编程 - 完全成功!**
102
-
103
- ### 🏆 关键成就
104
- - ✅ **零开发成本** - 利用OpenCode原生界面
105
- - ✅ **统一架构** - API和Web完美融合
106
- - ✅ **移动端优化** - 手机编程体验优秀
107
- - ✅ **安全可控** - 认证机制合理配置
108
- - ✅ **高性能** - Nginx代理优化
109
-
110
- **🎯 您现在可以在手机上通过浏览器直接进行AI编程交互了!**
111
-
112
- 访问地址:**https://airsltd-ocngx.hf.space/opencode/**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
TEST_REPORT.md DELETED
@@ -1,235 +0,0 @@
1
- # Nginx + OpenCode 集成测试报告
2
-
3
- ## 📋 测试概述
4
-
5
- 本项目已完成全面的nginx配置重构和功能测试,实现了以下核心需求:
6
-
7
- 1. **默认站点设置为nginx** - 根路径 `/` 现在是nginx默认站点
8
- 2. **路径分离** - `/opencode/web/` 和 `/opencode/api/` 分别处理web和api请求
9
- 3. **统一认证** - Server级别Basic Auth,一次登录全局访问
10
- 4. **简化代理** - 从20+个独立端点简化为2个统一端点
11
-
12
- ## 🧪 测试套件
13
-
14
- ### 1. 配置验证测试 (`comprehensive-test.sh`)
15
-
16
- **测试范围:**
17
- - ✅ Nginx配置语法和结构 (16项测试)
18
- - ✅ 认证功能和统一登录 (4项测试)
19
- - ✅ 路径重写和代理转发 (10项测试)
20
- - ✅ OpenCode Web端点功能 (7项测试)
21
- - ✅ OpenCode API端点功能 (6项测试)
22
- - ✅ 静态资源代理 (6项测试)
23
- - ✅ 配置简化验证 (10项测试)
24
- - ✅ 安全配置测试 (8项测试)
25
- - ✅ 性能配置测试 (10项测试)
26
- - ✅ 文档和示例测试 (6项测试)
27
-
28
- **测试结果:**
29
- - 📊 总测试数:86
30
- - ✅ 通过测试:86
31
- - ❌ 失败测试:0
32
- - 📈 成功率:100%
33
-
34
- ### 2. 运行时功能测试 (`runtime-test.sh`)
35
-
36
- **测试范围:**
37
- - 🔍 服务运行状态检查
38
- - 🔐 认证功能测试
39
- - 🛣️ 路由和重定向测试
40
- - 🌐 OpenCode Web端点测试
41
- - 🔌 OpenCode API端点测试
42
- - 🌍 CORS功能测试
43
- - ⚡ 性能和超时测试
44
- - 🛡️ 安全功能测试
45
- - 🔗 集成功能测试
46
-
47
- ## 🎯 核心功能验证
48
-
49
- ### ✅ 默认站点配置
50
- ```nginx
51
- location / {
52
- root /usr/local/openresty/nginx/html;
53
- index index.html index.htm;
54
- # 添加自定义响应头
55
- add_header X-Powered-By "OpenResty";
56
- add_header X-Auth-Type "Basic + Lua";
57
- }
58
- ```
59
-
60
- ### ✅ 统一认证配置
61
- ```nginx
62
- server {
63
- # 定义认证区域
64
- auth_basic "Restricted Area";
65
- auth_basic_user_file /usr/local/openresty/nginx/conf/.htpasswd;
66
-
67
- # 使用 Lua 进行更复杂的认证
68
- access_by_lua_block {
69
- local headers = ngx.req.get_headers()
70
- local user_agent = headers["User-Agent"] or ""
71
-
72
- -- 简单的用户代理检查
73
- if string.find(user_agent, "bot") then
74
- ngx.exit(403)
75
- end
76
- }
77
-
78
- # 所有location继承此认证
79
- # 无需重复配置
80
- }
81
- ```
82
-
83
- ### ✅ OpenCode Web端点
84
- ```nginx
85
- location /opencode/web/ {
86
- # 移除 /opencode/web 前缀
87
- rewrite ^/opencode/web/(.*) /$1 break;
88
-
89
- # 代理到 OpenCode 服务器
90
- proxy_pass http://127.0.0.1:57860;
91
- # ... 完整代理配置
92
- }
93
- ```
94
-
95
- ### ✅ OpenCode API端点
96
- ```nginx
97
- location /opencode/api/ {
98
- # 移除 /opencode/api 前缀
99
- rewrite ^/opencode/api/(.*) /$1 break;
100
-
101
- # 代理到 OpenCode 服务器
102
- proxy_pass http://127.0.0.1:57860;
103
- # ... 完整代理配置
104
- }
105
- ```
106
-
107
- ## 📊 配置简化成果
108
-
109
- ### 代理端点数量对比
110
- - **修改前:** 20+ 个独立API端点
111
- - `/global/`, `/session`, `/project`, `/provider`, `/file`, `/find`, `/config`, `/path`, `/pty`, `/experimental`, `/instance`, `/vcs`, `/doc`, `/lsp`, `/mcp`, `/permission`, `/agent`, `/auth`, `/command`, `/event`, `/formatter`, `/log`, `/tui`
112
-
113
- - **修改后:** 6 个代理端点
114
- - `/opencode/web/` (统一Web端点)
115
- - `/opencode/api/` (统一API端点)
116
- - `/assets/` (静态资源)
117
- - `/oc-theme-preload.js` (主题文件)
118
- - `/site.webmanifest` (Web清单)
119
- - `~ ^/(favicon.*\.(png|svg|ico)|apple-touch-icon\.png)$` (图标文件)
120
-
121
- ### 配置复杂度降低
122
- - ✅ 统一路径重写规则
123
- - ✅ 统一代理头部配置
124
- - ✅ 统一CORS设置
125
- - ✅ 统一超时配置
126
- - ✅ 统一性能优化
127
-
128
- ## 🔐 安全特性验证
129
-
130
- ### HTTP Basic Authentication
131
- - ✅ Server级别认证配置
132
- - ✅ 一次登录,全局访问
133
- - ✅ 认证文件存在且格式正确
134
-
135
- ### Lua安全脚本
136
- - ✅ User-Agent检查
137
- - ✅ Bot检测和阻止
138
- - ✅ 403错误返回
139
-
140
- ### 安全头部
141
- - ✅ `X-Powered-By: OpenResty`
142
- - ✅ `X-Auth-Type: Basic + Lua`
143
-
144
- ## ⚡ 性能特性验证
145
-
146
- ### 流式响应支持
147
- - ✅ `proxy_buffering off`
148
- - ✅ `proxy_cache off`
149
- - ✅ `proxy_http_version 1.1`
150
- - ✅ `chunked_transfer_encoding on`
151
-
152
- ### 连接优化
153
- - ✅ `proxy_set_header Connection ''`
154
- - ✅ `sendfile on`
155
- - ✅ `keepalive_timeout 65`
156
- - ✅ `worker_connections 1024`
157
-
158
- ### 超时配置
159
- - ✅ `proxy_connect_timeout 60s`
160
- - ✅ `proxy_send_timeout 300s`
161
-
162
- ## 🌐 访问方式
163
-
164
- ### 认证信息
165
- ```
166
- 用户名: admin
167
- 密码: admin123
168
- ```
169
-
170
- ### 访问地址
171
- - **主页:** `http://localhost:7860/`
172
- - **健康检查:** `http://localhost:7860/health`
173
- - **OpenCode Web:** `http://localhost:7860/opencode/web/`
174
- - **OpenCode API:** `http://localhost:7860/opencode/api/`
175
- - **API文档:** `http://localhost:7860/opencode/api/doc`
176
-
177
- ### API端点示例
178
- - **健康检查:** `http://localhost:7860/opencode/api/global/health`
179
- - **项目管理:** `http://localhost:7860/opencode/api/project`
180
- - **会话管理:** `http://localhost:7860/opencode/api/session`
181
- - **��供商:** `http://localhost:7860/opencode/api/provider`
182
-
183
- ## 🚀 部署和使用
184
-
185
- ### 构建和启动
186
- ```bash
187
- # 构建Docker镜像
188
- docker build -t ocngx .
189
-
190
- # 启动容器
191
- docker run -p 7860:7860 ocngx
192
- ```
193
-
194
- ### 运行测试
195
- ```bash
196
- # 配置验证测试
197
- ./comprehensive-test.sh
198
-
199
- # 运行时功能测试 (需要服务先启动)
200
- ./runtime-test.sh
201
- ```
202
-
203
- ## 📈 测试覆盖率
204
-
205
- ### 功能覆盖率:100%
206
- - ✅ 所有核心功能已验证
207
- - ✅ 所有安全特性已验证
208
- - ✅ 所有性能优化已验证
209
- - ✅ 所有配置简化已验证
210
-
211
- ### 测试类型覆盖率
212
- - ✅ 静态配置分析
213
- - ✅ 语法结构验证
214
- - ✅ 运行时功能测试
215
- - ✅ 安全性测试
216
- - ✅ 性能测试
217
- - ✅ 集成测试
218
-
219
- ## 🎉 结论
220
-
221
- **✅ 项目重构成功!**
222
-
223
- 所有86项配置验证测试全部通过,新的nginx配置完全满足需求:
224
-
225
- 1. **默认站点** - 成功设置为nginx
226
- 2. **路径分离** - Web和API端点正确分离
227
- 3. **统一认证** - Server级别认证,一次登录全局访问
228
- 4. **简化代理** - 从20+端点简化为6个端点,配置复杂度大幅降低
229
-
230
- **🚀 系统已就绪,可以正常使用!**
231
-
232
- ---
233
-
234
- *测试报告生成时间:$(date)*
235
- *测试工具:comprehensive-test.sh, runtime-test.sh*
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
checkupdate.sh DELETED
@@ -1,16 +0,0 @@
1
- #!/bin/bash
2
- # version_compare.sh
3
-
4
- CURRENT_VERSION="v"$(curl -s "https://airsltd-ocngx.hf.space/opencode/global/health" -u "admin:admin123" | jq -r '.version')
5
- LATEST_VERSION=$(curl -s "https://api.github.com/repos/anomalyco/opencode/releases/latest" | jq -r '.tag_name')
6
-
7
- echo "当前版本: $CURRENT_VERSION"
8
- echo "最新版本: $LATEST_VERSION"
9
-
10
- if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
11
- echo "✅ 已是最新版本"
12
- else
13
- echo "🔄 有新版本可用: $LATEST_VERSION"
14
- echo "建议执行: opencode update"
15
- fi
16
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
comprehensive-test.sh DELETED
@@ -1,386 +0,0 @@
1
- #!/bin/bash
2
-
3
- # =============================================================================
4
- # Nginx + OpenCode 集成测试套件
5
- # =============================================================================
6
-
7
- set -e # 遇到错误立即退出
8
-
9
- # 颜色定义
10
- RED='\033[0;31m'
11
- GREEN='\033[0;32m'
12
- YELLOW='\033[1;33m'
13
- BLUE='\033[0;34m'
14
- NC='\033[0m' # No Color
15
-
16
- # 测试配置
17
- NGINX_PORT="7860"
18
- OPENCODE_PORT="57860"
19
- BASE_URL="http://localhost:${NGINX_PORT}"
20
- TEST_USER="admin"
21
- TEST_PASS="admin123"
22
-
23
- # 测试结果统计
24
- TOTAL_TESTS=0
25
- PASSED_TESTS=0
26
- FAILED_TESTS=0
27
- TEST_RESULTS=()
28
-
29
- # 日志函数
30
- log_info() {
31
- echo -e "${BLUE}[INFO]${NC} $1"
32
- }
33
-
34
- log_success() {
35
- echo -e "${GREEN}[PASS]${NC} $1"
36
- PASSED_TESTS=$((PASSED_TESTS + 1))
37
- TEST_RESULTS+=("PASS: $1")
38
- }
39
-
40
- log_error() {
41
- echo -e "${RED}[FAIL]${NC} $1"
42
- FAILED_TESTS=$((FAILED_TESTS + 1))
43
- TEST_RESULTS+=("FAIL: $1")
44
- }
45
-
46
- log_warning() {
47
- echo -e "${YELLOW}[WARN]${NC} $1"
48
- }
49
-
50
- # 测试函数
51
- run_test() {
52
- local test_name="$1"
53
- local test_command="$2"
54
-
55
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
56
- log_info "运行测试: $test_name"
57
-
58
- if eval "$test_command" >/dev/null 2>&1; then
59
- log_success "$test_name"
60
- return 0
61
- else
62
- log_error "$test_name"
63
- return 1
64
- fi
65
- }
66
-
67
- # 1. Nginx配置语法和结构测试
68
- test_nginx_config() {
69
- log_info "=== 1. Nginx配置语法和结构测试 ==="
70
-
71
- # 检查配置文件存在性
72
- run_test "nginx主配置文件存在" "test -f nginx/nginx.conf"
73
- run_test "nginx默认配置文件存在" "test -f nginx/conf.d/default.conf"
74
- run_test "nginx静态文件目录存在" "test -d nginx/html"
75
-
76
- # 检查配置文件语法
77
- run_test "nginx主配置语法正确" "grep -q 'events {' nginx/nginx.conf"
78
- run_test "nginx http配置正确" "grep -q 'http {' nginx/nginx.conf"
79
- run_test "nginx server配置正确" "grep -q 'server {' nginx/conf.d/default.conf"
80
-
81
- # 检查关键配置项
82
- run_test "监听端口7860配置" "grep -q 'listen 7860' nginx/conf.d/default.conf"
83
- run_test "Basic Auth配置" "grep -q 'auth_basic' nginx/conf.d/default.conf"
84
- run_test "Lua脚本配置" "grep -q 'access_by_lua_block' nginx/conf.d/default.conf"
85
-
86
- # 检查端点配置
87
- run_test "根路径配置" "grep -q 'location / {' nginx/conf.d/default.conf"
88
- run_test "健康检查端点配置" "grep -q 'location /health' nginx/conf.d/default.conf"
89
- run_test "OpenCode Web端点配置" "grep -q 'location /opencode/web/' nginx/conf.d/default.conf"
90
- run_test "OpenCode API端点配置" "grep -q 'location /opencode/api/' nginx/conf.d/default.conf"
91
-
92
- # 检查代理配置
93
- run_test "代理到OpenCode配置" "grep -q 'proxy_pass http://127.0.0.1:57860' nginx/conf.d/default.conf"
94
- run_test "路径重写配置" "grep -q 'rewrite.*break' nginx/conf.d/default.conf"
95
-
96
- # 检查CORS配置
97
- run_test "CORS头部配置" "grep -q 'Access-Control-Allow-Origin' nginx/conf.d/default.conf"
98
-
99
- # 检查重定向配置
100
- run_test "/opencode重定向配置" "grep -q 'location = /opencode' nginx/conf.d/default.conf"
101
- }
102
-
103
- # 2. 认证功能和统一登录测试
104
- test_authentication() {
105
- log_info "=== 2. 认证功能和统一登录测试 ==="
106
-
107
- # 检查认证文件
108
- run_test "认证密码文件存在" "test -f nginx/.htpasswd"
109
-
110
- # 检查认证配置在server级别
111
- run_test "认证配置在server级别" "awk '/server {/,/}/' nginx/conf.d/default.conf | grep -q 'auth_basic'"
112
-
113
- # 检查没有在location级别重复配置认证
114
- run_test "location级别无重复认证" "! grep -A 10 'location /' nginx/conf.d/default.conf | grep -q 'auth_basic'"
115
-
116
- # 检查Lua安全脚本
117
- run_test "Lua安全过滤配置" "grep -q 'User-Agent' nginx/conf.d/default.conf"
118
- run_test "Bot检测配置" "grep -q 'bot' nginx/conf.d/default.conf"
119
- }
120
-
121
- # 3. 路径重写和代理转发测试
122
- test_routing() {
123
- log_info "=== 3. 路径重写和代理转发测试 ==="
124
-
125
- # 检查Web端点路径重写
126
- run_test "Web端点路径重写配置" "grep -q 'rewrite.*opencode/web.*break' nginx/conf.d/default.conf"
127
-
128
- # 检查API端点路径重写
129
- run_test "API端点路径重写配置" "grep -q 'rewrite.*opencode/api.*break' nginx/conf.d/default.conf"
130
-
131
- # 检查代理头部配置
132
- run_test "代理Host头部配置" "grep -q 'proxy_set_header Host' nginx/conf.d/default.conf"
133
- run_test "代理Real-IP头部配置" "grep -q 'proxy_set_header X-Real-IP' nginx/conf.d/default.conf"
134
- run_test "代理Forwarded-For头部配置" "grep -q 'proxy_set_header X-Forwarded-For' nginx/conf.d/default.conf"
135
-
136
- # 检查流式响应支持
137
- run_test "代理缓冲关闭配置" "grep -q 'proxy_buffering off' nginx/conf.d/default.conf"
138
- run_test "代理缓存关闭配置" "grep -q 'proxy_cache off' nginx/conf.d/default.conf"
139
- run_test "HTTP/1.1连接配置" "grep -q 'proxy_http_version 1.1' nginx/conf.d/default.conf"
140
-
141
- # 检查超时配置
142
- run_test "连接超时配置" "grep -q 'proxy_connect_timeout' nginx/conf.d/default.conf"
143
- run_test "发送超时配置" "grep -q 'proxy_send_timeout' nginx/conf.d/default.conf"
144
- }
145
-
146
- # 4. OpenCode Web端点功能测试
147
- test_opencode_web() {
148
- log_info "=== 4. OpenCode Web端点功能测试 ==="
149
-
150
- # 检查Web端点配置完整性
151
- run_test "Web端点CORS配置" "grep -A 20 'location /opencode/web/' nginx/conf.d/default.conf | grep -q 'Access-Control'"
152
- run_test "Web端点代理配置" "grep -A 20 'location /opencode/web/' nginx/conf.d/default.conf | grep -q 'proxy_pass'"
153
- run_test "Web端点超时配置" "grep -A 25 'location /opencode/web/' nginx/conf.d/default.conf | grep -q 'proxy_connect_timeout'"
154
-
155
- # 检查静态资源代理
156
- run_test "assets目录代理配置" "grep -q 'location /assets/' nginx/conf.d/default.conf"
157
- run_test "favicon代理配置" "grep -q 'location.*favicon' nginx/conf.d/default.conf"
158
- run_test "manifest文件代理配置" "grep -q 'site.webmanifest' nginx/conf.d/default.conf"
159
- }
160
-
161
- # 5. OpenCode API端点功能测试
162
- test_opencode_api() {
163
- log_info "=== 5. OpenCode API端点功能测试 ==="
164
-
165
- # 检查API端点配置完整性
166
- run_test "API端点CORS配置" "grep -A 20 'location /opencode/api/' nginx/conf.d/default.conf | grep -q 'Access-Control'"
167
- run_test "API端点代理配置" "grep -A 20 'location /opencode/api/' nginx/conf.d/default.conf | grep -q 'proxy_pass'"
168
- run_test "API端点超时配置" "grep -A 25 'location /opencode/api/' nginx/conf.d/default.conf | grep -q 'proxy_connect_timeout'"
169
-
170
- # 检查API方法支持
171
- run_test "API支持GET方法" "grep -A 20 'location /opencode/api/' nginx/conf.d/default.conf | grep -q 'GET'"
172
- run_test "API支持POST方法" "grep -A 20 'location /opencode/api/' nginx/conf.d/default.conf | grep -q 'POST'"
173
- run_test "API支持PUT方法" "grep -A 20 'location /opencode/api/' nginx/conf.d/default.conf | grep -q 'PUT'"
174
- run_test "API支持DELETE方法" "grep -A 20 'location /opencode/api/' nginx/conf.d/default.conf | grep -q 'DELETE'"
175
- }
176
-
177
- # 6. 静态资源代理测试
178
- test_static_resources() {
179
- log_info "=== 6. 静态资源代理测试 ==="
180
-
181
- # 检查各种静态资源代理配置
182
- run_test "CSS/JS资源代理" "grep -q 'location /assets/' nginx/conf.d/default.conf"
183
- run_test "主题预加载JS代理" "grep -q 'oc-theme-preload.js' nginx/conf.d/default.conf"
184
- run_test "Web Manifest代理" "grep -q 'site.webmanifest' nginx/conf.d/default.conf"
185
- run_test "Favicon代理" "grep -q 'favicon' nginx/conf.d/default.conf"
186
- run_test "Apple图标代理" "grep -q 'apple-touch-icon' nginx/conf.d/default.conf"
187
-
188
- # 检查静态资源代理头部配置
189
- run_test "静态资源代理头部" "grep -A 10 'location /assets/' nginx/conf.d/default.conf | grep -q 'proxy_set_header'"
190
- }
191
-
192
- # 7. 配置简化验证测试
193
- test_configuration_simplification() {
194
- log_info "=== 7. 配置简化验证测试 ==="
195
-
196
- # 统计代理端点数量
197
- local proxy_count=$(grep -c "proxy_pass http://127.0.0.1:57860" nginx/conf.d/default.conf)
198
- run_test "代理端点数量合理(<10)" "test $proxy_count -lt 10"
199
-
200
- # 检查是否使用统一端点
201
- run_test "使用Web统一端点" "grep -q 'location /opencode/web/' nginx/conf.d/default.conf"
202
- run_test "使用API统一端点" "grep -q 'location /opencode/api/' nginx/conf.d/default.conf"
203
-
204
- # 检查重定向配置
205
- run_test "/opencode重定向到web" "grep -q 'return 301 /opencode/web/' nginx/conf.d/default.conf"
206
- run_test "/opencode/重定向到web" "grep -q 'return 301 /opencode/web/' nginx/conf.d/default.conf"
207
-
208
- # 检查没有冗余的单独API端点配置
209
- local old_endpoints=("/global/" "/session" "/project" "/provider" "/file" "/find" "/config")
210
- for endpoint in "${old_endpoints[@]}"; do
211
- run_test "已移除冗余端点$endpoint" "! grep -q 'location $endpoint' nginx/conf.d/default.conf"
212
- done
213
- }
214
-
215
- # 8. 安全配置测试
216
- test_security() {
217
- log_info "=== 8. 安全配置测试 ==="
218
-
219
- # 检查认证配置
220
- run_test "Basic Auth启用" "grep -q 'auth_basic.*Restricted Area' nginx/conf.d/default.conf"
221
- run_test "认证密码文件配置" "grep -q 'auth_basic_user_file' nginx/conf.d/default.conf"
222
-
223
- # 检查Lua安全脚本
224
- run_test "Lua安全检查启用" "grep -q 'access_by_lua_block' nginx/conf.d/default.conf"
225
- run_test "User-Agent检查" "grep -q 'User-Agent' nginx/conf.d/default.conf"
226
- run_test "Bot检测和阻止" "grep -q 'string.find.*bot' nginx/conf.d/default.conf"
227
- run_test "403错误返回" "grep -q 'ngx.exit(403)' nginx/conf.d/default.conf"
228
-
229
- # 检查安全头部
230
- run_test "Powered-By头部" "grep -q 'X-Powered-By.*OpenResty' nginx/conf.d/default.conf"
231
- run_test "Auth-Type头部" "grep -q 'X-Auth-Type.*Basic' nginx/conf.d/default.conf"
232
- }
233
-
234
- # 9. 性能配置测试
235
- test_performance() {
236
- log_info "=== 9. 性能配置测试 ==="
237
-
238
- # 检查性能优化配置
239
- run_test "sendfile启用" "grep -q 'sendfile.*on' nginx/nginx.conf"
240
- run_test "keepalive_timeout配置" "grep -q 'keepalive_timeout' nginx/nginx.conf"
241
- run_test "worker_connections配置" "grep -q 'worker_connections' nginx/nginx.conf"
242
-
243
- # 检查代理性能配置
244
- run_test "代理缓冲关闭(流式响应)" "grep -q 'proxy_buffering off' nginx/conf.d/default.conf"
245
- run_test "代理缓存关闭" "grep -q 'proxy_cache off' nginx/conf.d/default.conf"
246
- run_test "HTTP/1.1连接复用" "grep -q 'proxy_http_version 1.1' nginx/conf.d/default.conf"
247
- run_test 'Connection头清空' "grep -q \"proxy_set_header Connection ''\" nginx/conf.d/default.conf"
248
-
249
- # 检查超时配置
250
- run_test "连接超时设置" "grep -q 'proxy_connect_timeout' nginx/conf.d/default.conf"
251
- run_test "发送超时设置" "grep -q 'proxy_send_timeout' nginx/conf.d/default.conf"
252
- }
253
-
254
- # 10. 文档和示例测试
255
- test_documentation() {
256
- log_info "=== 10. 文档和示例测试 ==="
257
-
258
- # 检查README文档更新
259
- run_test "README文档存在" "test -f README.md"
260
- run_test "README包含新端点说明" "grep -q '/opencode/web/' README.md"
261
- run_test "README包含API端点说明" "grep -q '/opencode/api/' README.md"
262
- run_test "README包含认证说明" "grep -q 'admin.*admin123' README.md"
263
-
264
- # 检查架构图更新
265
- run_test "README包含架构说明" "grep -q '统一代理' README.md"
266
- run_test "README包含路径分离说明" "grep -q '路径分离' README.md"
267
- }
268
-
269
- # 生成测试报告
270
- generate_report() {
271
- log_info "=== 测试报告 ==="
272
-
273
- echo ""
274
- echo "=========================================="
275
- echo " Nginx + OpenCode 测试报告"
276
- echo "=========================================="
277
- echo ""
278
- echo "测试时间: $(date)"
279
- echo "测试配置: Nginx端口${NGINX_PORT}, OpenCode端口${OPENCODE_PORT}"
280
- echo ""
281
- echo "测试统计:"
282
- echo " 总测试数: ${TOTAL_TESTS}"
283
- echo " 通过测试: ${PASSED_TESTS}"
284
- echo " 失败测试: ${FAILED_TESTS}"
285
- echo " 成功率: $(( PASSED_TESTS * 100 / TOTAL_TESTS ))%"
286
- echo ""
287
-
288
- if [ $FAILED_TESTS -eq 0 ]; then
289
- echo -e "${GREEN}🎉 所有测试通过!${NC}"
290
- else
291
- echo -e "${YELLOW}⚠️ 有 ${FAILED_TESTS} 个测试失败${NC}"
292
- fi
293
-
294
- echo ""
295
- echo "详细测试结果:"
296
- for result in "${TEST_RESULTS[@]}"; do
297
- if [[ $result == PASS* ]]; then
298
- echo -e "${GREEN}✅ ${result#PASS: }${NC}"
299
- else
300
- echo -e "${RED}❌ ${result#FAIL: }${NC}"
301
- fi
302
- done
303
-
304
- echo ""
305
- echo "=========================================="
306
- echo " 配置验证总结"
307
- echo "=========================================="
308
- echo ""
309
- echo "✅ 核心功能验证:"
310
- echo " - Nginx默认站点配置"
311
- echo " - OpenCode Web端点 (/opencode/web/)"
312
- echo " - OpenCode API端点 (/opencode/api/)"
313
- echo " - 统一认证 (Server级别Basic Auth)"
314
- echo " - 路径重写和代理转发"
315
- echo ""
316
- echo "✅ 安全特性验证:"
317
- echo " - HTTP Basic Authentication"
318
- echo " - Lua脚本安全过滤"
319
- echo " - Bot检测和阻止"
320
- echo " - 安全头部设置"
321
- echo ""
322
- echo "✅ 性能优化验证:"
323
- echo " - 流式响应支持"
324
- echo " - 连接复用配置"
325
- echo " - 超时设置"
326
- echo " - 缓冲和缓存优化"
327
- echo ""
328
- echo "✅ 配置简化验证:"
329
- echo " - 统一端点转发"
330
- echo " - 减少代理端点数量"
331
- echo " - 路径重写配置"
332
- echo " - 重定向配置"
333
- echo ""
334
-
335
- if [ $FAILED_TESTS -eq 0 ]; then
336
- echo ""
337
- echo -e "${GREEN}🚀 配置已就绪,可以启动服务!${NC}"
338
- echo ""
339
- echo "启动命令:"
340
- echo " docker build -t ocngx ."
341
- echo " docker run -p 7860:7860 ocngx"
342
- echo ""
343
- echo "访问地址:"
344
- echo " 主页: http://localhost:7860/ (用户名: admin, 密码: admin123)"
345
- echo " OpenCode Web: http://localhost:7860/opencode/web/"
346
- echo " OpenCode API: http://localhost:7860/opencode/api/"
347
- else
348
- echo ""
349
- echo -e "${YELLOW}⚠️ 请修复失败的测试后再启动服务${NC}"
350
- fi
351
- }
352
-
353
- # 主函数
354
- main() {
355
- echo "=========================================="
356
- echo " Nginx + OpenCode 集成测试套件"
357
- echo "=========================================="
358
- echo ""
359
-
360
- # 运行所有测试
361
- test_nginx_config
362
- test_authentication
363
- test_routing
364
- test_opencode_web
365
- test_opencode_api
366
- test_static_resources
367
- test_configuration_simplification
368
- test_security
369
- test_performance
370
- test_documentation
371
-
372
- # 生成报告
373
- generate_report
374
-
375
- # 返回适当的退出码
376
- if [ $FAILED_TESTS -eq 0 ]; then
377
- exit 0
378
- else
379
- exit 1
380
- fi
381
- }
382
-
383
- # 如果��接运行此脚本
384
- if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
385
- main "$@"
386
- fi
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
deploy-check.sh DELETED
@@ -1,95 +0,0 @@
1
- #!/bin/bash
2
-
3
- # HuggingFace Space 部署验证脚本
4
-
5
- echo "🔍 验证 HuggingFace Space 部署配置..."
6
-
7
- # 检查关键文件
8
- echo "📁 检查关键文件..."
9
- files_to_check=(
10
- "Dockerfile"
11
- "docker-start.sh"
12
- "nginx/nginx.conf"
13
- "nginx/conf.d/default.conf"
14
- "nginx/html/index.html"
15
- "README.md"
16
- )
17
-
18
- for file in "${files_to_check[@]}"; do
19
- if [ -f "$file" ]; then
20
- echo "✅ $file 存在"
21
- else
22
- echo "❌ $file 缺失"
23
- exit 1
24
- fi
25
- done
26
-
27
- # 检查 Dockerfile 配置
28
- echo "🐳 检查 Dockerfile 配置..."
29
- if grep -q "EXPOSE 7860" Dockerfile; then
30
- echo "✅ 端口 7860 已暴露"
31
- else
32
- echo "❌ 端口配置错误"
33
- exit 1
34
- fi
35
-
36
- if grep -q "opencode-ai" Dockerfile; then
37
- echo "✅ OpenCode 安装配置正确"
38
- else
39
- echo "❌ OpenCode 安装配置缺失"
40
- exit 1
41
- fi
42
-
43
- # 检查启动脚本
44
- echo "🚀 检查启动脚本..."
45
- if grep -q "GATEWAY_PORT.*57860" docker-start.sh; then
46
- echo "✅ OpenCode 端口配置正确"
47
- else
48
- echo "❌ OpenCode 端口配置错误"
49
- exit 1
50
- fi
51
-
52
- if grep -q "opencode serve" docker-start.sh; then
53
- echo "✅ OpenCode 启动命令正确"
54
- else
55
- echo "❌ OpenCode 启动命令缺失"
56
- exit 1
57
- fi
58
-
59
- # 检查 nginx 配置
60
- echo "🌐 检查 nginx 配置..."
61
- if grep -q "proxy_pass http://127.0.0.1:57860" nginx/conf.d/default.conf; then
62
- echo "✅ nginx 代理配置正确"
63
- else
64
- echo "❌ nginx 代理配置错误"
65
- exit 1
66
- fi
67
-
68
- if grep -q "auth_basic" nginx/conf.d/default.conf; then
69
- echo "✅ nginx 认证配置正确"
70
- else
71
- echo "❌ nginx 认证配置缺失"
72
- exit 1
73
- fi
74
-
75
- # 检查 README.md
76
- echo "📖 检查 README.md..."
77
- if grep -q "sdk: docker" README.md; then
78
- echo "✅ HuggingFace Space 配置正确"
79
- else
80
- echo "❌ HuggingFace Space 配置错误"
81
- exit 1
82
- fi
83
-
84
- echo ""
85
- echo "🎉 所有配置检查通过!"
86
- echo ""
87
- echo "📋 部署信息:"
88
- echo " • Docker 镜像:基于 openresty/openresty"
89
- echo " • 暴露端口:7860"
90
- echo " • OpenCode 端口:57860 (内部)"
91
- echo " • 认证信息:admin/admin123"
92
- echo " • Web 界面:/opencode/"
93
- echo " • API 文档:/opencode/doc"
94
- echo ""
95
- echo "🚀 准备上传到 HuggingFace Space!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
docker-start.sh CHANGED
@@ -7,8 +7,8 @@ echo "🚀 Starting OpenResty + OpenCode Integration..."
7
  # 检查环境变量
8
  export GATEWAY_HOST=${GATEWAY_HOST:-127.0.0.1}
9
  export GATEWAY_PORT=${GATEWAY_PORT:-3000}
10
- export USERNAME=${USERNAME:-admin}
11
- export PASSWORD=${PASSWORD:-admin123}
12
 
13
  echo "📍 OpenCode will listen on: ${GATEWAY_HOST}:${GATEWAY_PORT}"
14
  echo "🌐 Nginx will listen on: 0.0.0.0:7860"
@@ -62,7 +62,7 @@ sleep 3
62
  # 检查 OpenResty 是否正常运行
63
  if curl -s http://localhost:7860/health > /dev/null; then
64
  echo "✅ OpenResty started successfully"
65
- echo "🔐 Basic Auth enabled: admin/admin123"
66
  echo "🌐 Nginx serving: http://localhost:7860"
67
  echo "🔗 API Gateway: http://localhost:7860/opencode/"
68
  else
 
7
  # 检查环境变量
8
  export GATEWAY_HOST=${GATEWAY_HOST:-127.0.0.1}
9
  export GATEWAY_PORT=${GATEWAY_PORT:-3000}
10
+ export USERNAME=${USERNAME:-tbs}
11
+ export PASSWORD=${PASSWORD:-tbs123}
12
 
13
  echo "📍 OpenCode will listen on: ${GATEWAY_HOST}:${GATEWAY_PORT}"
14
  echo "🌐 Nginx will listen on: 0.0.0.0:7860"
 
62
  # 检查 OpenResty 是否正常运行
63
  if curl -s http://localhost:7860/health > /dev/null; then
64
  echo "✅ OpenResty started successfully"
65
+ echo "🔐 Basic Auth enabled: tbs/tbs123"
66
  echo "🌐 Nginx serving: http://localhost:7860"
67
  echo "🔗 API Gateway: http://localhost:7860/opencode/"
68
  else
final-test.sh DELETED
@@ -1,108 +0,0 @@
1
- #!/bin/bash
2
-
3
- # 完整的最终测试脚本
4
-
5
- echo "🎯 执行最终完整性测试..."
6
- echo ""
7
-
8
- base_url="https://airsltd-ocngx.hf.space"
9
-
10
- # 测试所有关键端点
11
- test_endpoints=(
12
- "/global/health"
13
- "/path"
14
- "/pty"
15
- "/experimental"
16
- "/instance"
17
- "/vcs"
18
- "/session"
19
- "/project"
20
- "/provider"
21
- "/file"
22
- "/find"
23
- "/config"
24
- "/doc"
25
- )
26
-
27
- echo "📡 测试所有API端点..."
28
- failed_count=0
29
- for endpoint in "${test_endpoints[@]}"; do
30
- echo -n " $endpoint: "
31
- response=$(curl -s -w "%{http_code}" "${base_url}${endpoint}")
32
- http_code="${response: -3}"
33
-
34
- if [ "$http_code" = "200" ]; then
35
- echo "✅ 200 OK"
36
- elif [ "$http_code" = "404" ]; then
37
- echo "❌ 404 Not Found"
38
- ((failed_count++))
39
- elif [ "$http_code" = "401" ]; then
40
- echo "❌ 401 Unauthorized"
41
- ((failed_count++))
42
- else
43
- echo "❓ $http_code"
44
- ((failed_count++))
45
- fi
46
- done
47
-
48
- echo ""
49
- echo "🌐 测试静态资源..."
50
- static_resources=(
51
- "/assets/index-OLRiU-d3.js"
52
- "/assets/index-DViKQ2Re.css"
53
- "/oc-theme-preload.js"
54
- "/site.webmanifest"
55
- "/favicon.ico"
56
- )
57
-
58
- for resource in "${static_resources[@]}"; do
59
- echo -n " $resource: "
60
- response=$(curl -s -w "%{http_code}" "${base_url}${resource}")
61
- http_code="${response: -3}"
62
-
63
- if [ "$http_code" = "200" ]; then
64
- echo "✅ 200 OK"
65
- else
66
- echo "❌ $http_code"
67
- ((failed_count++))
68
- fi
69
- done
70
-
71
- echo ""
72
- echo "🖥️ 测试主页面..."
73
- main_response=$(curl -s -w "%{http_code}" "${base_url}/opencode/")
74
- main_http_code="${main_response: -3}"
75
-
76
- if [ "$main_http_code" = "200" ]; then
77
- echo "✅ 主页面 200 OK"
78
- if echo "${main_response%???}" | grep -q "opencode\|OpenCode"; then
79
- echo "✅ 页面内容包含OpenCode"
80
- else
81
- echo "❌ 页面内容不包含OpenCode"
82
- ((failed_count++))
83
- fi
84
- else
85
- echo "❌ 主页面 $main_http_code"
86
- ((failed_count++))
87
- fi
88
-
89
- echo ""
90
- echo "🎉 测试结果总结..."
91
- if [ $failed_count -eq 0 ]; then
92
- echo "🎊 所有测试通过!移动端AI编程平台完全正常工作!"
93
- echo ""
94
- echo "📱 用户可以在手机上访问:"
95
- echo " https://airsltd-ocngx.hf.space/opencode/"
96
- echo ""
97
- echo "✨ 功能特性:"
98
- echo " • 完整的AI编程Web界面"
99
- echo " • 响应式移动端设计"
100
- echo " • 实时AI对话交互"
101
- echo " • 所有API端点正常工作"
102
- echo " • 静态资源正确加载"
103
- else
104
- echo "❌ 发现 $failed_count 个问题,需要进一步修复"
105
- fi
106
-
107
- echo ""
108
- echo "🎯 测试完成!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
health_check.sh DELETED
@@ -1,60 +0,0 @@
1
- #!/bin/bash
2
- # version_check.sh
3
-
4
- API_BASE="https://airsltd-ocngx.hf.space/opencode"
5
- AUTH="-u admin:admin123"
6
-
7
- echo "=== OpenCode 版本诊断 ==="
8
- echo "时间: $(date)"
9
- echo
10
-
11
- # 1. 健康检查版本
12
- echo "1. 健康检查版本:"
13
- HEALTH_VERSION=$(curl -s -X GET "$API_BASE/global/health" $AUTH | jq -r '.version')
14
- echo " 健康检查返回: $HEALTH_VERSION"
15
-
16
- # 2. 会话中的版本信息
17
- echo "2. 检查会话状态:"
18
- SESSION_STATUS=$(curl -s -X GET "$API_BASE/session/status" $AUTH)
19
- echo " 会话状态: $SESSION_STATUS"
20
-
21
- # 3. 创建新会话测试
22
- echo "3. 创建新会话测试:"
23
- NEW_SESSION=$(curl -s -X POST "$API_BASE/session" $AUTH -d '{}')
24
- NEW_SESSION_ID=$(echo "$NEW_SESSION" | jq -r '.id')
25
- echo " 新会话 ID: $NEW_SESSION_ID"
26
- echo " 新会话版本: $(echo "$NEW_SESSION" | jq -r '.version')"
27
-
28
- # 4. 在新会话中询问版本
29
- echo "4. 在新会话中询问版本:"
30
- VERSION_QUERY=$(curl -s -X POST "$API_BASE/session/$NEW_SESSION_ID/message" \
31
- -H "Content-Type: application/json" \
32
- $AUTH \
33
- -d '{
34
- "parts": [
35
- {
36
- "type": "text",
37
- "text": "请告诉我当前 OpenCode 的版本号"
38
- }
39
- ]
40
- }')
41
-
42
- echo " 版本查询响应: $VERSION_QUERY"
43
-
44
- # 5. 等待并获取回复
45
- sleep 3
46
- VERSION_REPLY=$(curl -s -X GET "$API_BASE/session/$NEW_SESSION_ID/message" $AUTH)
47
- echo " AI 回复的版本: $(echo "$VERSION_REPLY" | jq -r '.[-1].parts[] | select(.type=="text") | .text')"
48
-
49
- # 6. 检查配置信息
50
- echo "5. 检查配置信息:"
51
- CONFIG=$(curl -s -X GET "$API_BASE/config" $AUTH)
52
- echo " 配置信息: $CONFIG"
53
-
54
- # 7. 检查事件流中的版本信息
55
- echo "6. 检查事件流:"
56
- echo " 监听事件流 10 秒..."
57
- timeout 10s curl -N "$API_BASE/global/event" $AUTH 2>/dev/null | grep -i version || echo " 未检测到版本事件"
58
-
59
- echo
60
- echo "=== 诊断完成 ==="
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
hf-spaces-test.sh DELETED
@@ -1,377 +0,0 @@
1
- #!/bin/bash
2
-
3
- # =============================================================================
4
- # Hugging Face Spaces 部署诊断和测试脚本
5
- # =============================================================================
6
-
7
- set -e
8
-
9
- # 颜色定义
10
- RED='\033[0;31m'
11
- GREEN='\033[0;32m'
12
- YELLOW='\033[1;33m'
13
- BLUE='\033[0;34m'
14
- NC='\033[0m'
15
-
16
- # 测试配置
17
- BASE_URL="https://airsltd-ocngx.hf.space"
18
- TEST_USER="admin"
19
- TEST_PASS="admin123"
20
-
21
- # 测试结果统计
22
- TOTAL_TESTS=0
23
- PASSED_TESTS=0
24
- FAILED_TESTS=0
25
-
26
- # 日志函数
27
- log_info() {
28
- echo -e "${BLUE}[INFO]${NC} $1"
29
- }
30
-
31
- log_success() {
32
- echo -e "${GREEN}[PASS]${NC} $1"
33
- PASSED_TESTS=$((PASSED_TESTS + 1))
34
- }
35
-
36
- log_error() {
37
- echo -e "${RED}[FAIL]${NC} $1"
38
- FAILED_TESTS=$((FAILED_TESTS + 1))
39
- }
40
-
41
- log_warning() {
42
- echo -e "${YELLOW}[WARN]${NC} $1"
43
- }
44
-
45
- # HTTP请求测试
46
- test_http_request() {
47
- local test_name="$1"
48
- local url="$2"
49
- local expected_status="$3"
50
- local auth="$4"
51
- local timeout="${5:-30}"
52
-
53
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
54
- log_info "测试: $test_name"
55
-
56
- local cmd="curl -s -o /dev/null -w '%{http_code}' --max-time $timeout --connect-timeout 10"
57
-
58
- if [ "$auth" = "true" ]; then
59
- cmd="$cmd -u $TEST_USER:$TEST_PASS"
60
- fi
61
-
62
- # 添加更多调试信息
63
- cmd="$cmd -v"
64
-
65
- local status
66
- status=$(eval "$cmd '$url'" 2>&1 | tail -n 1)
67
-
68
- if [ "$status" = "$expected_status" ]; then
69
- log_success "$test_name (HTTP $status)"
70
- return 0
71
- else
72
- log_error "$test_name (期望: $expected_status, 实际: $status)"
73
- # 显示详细错误信息
74
- log_info "详细错误信息:"
75
- eval "$cmd '$url'" 2>&1 | head -n 10
76
- return 1
77
- fi
78
- }
79
-
80
- # 连接性测试
81
- test_connectivity() {
82
- log_info "=== 1. 连接性测试 ==="
83
-
84
- # 测试基础连接
85
- log_info "测试基础连接到 $BASE_URL"
86
-
87
- local cmd="curl -s --max-time 30 --connect-timeout 10 -I"
88
- local response
89
- response=$(eval "$cmd '$BASE_URL'" 2>&1)
90
-
91
- if echo "$response" | grep -q "HTTP"; then
92
- log_success "基础连接成功"
93
- PASSED_TESTS=$((PASSED_TESTS + 1))
94
-
95
- # 显示响应头
96
- log_info "响应头信息:"
97
- echo "$response" | head -n 5
98
- else
99
- log_error "基础连接失败"
100
- log_error "错误信息: $response"
101
- FAILED_TESTS=$((FAILED_TESTS + 1))
102
- fi
103
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
104
-
105
- # 测试DNS解析
106
- log_info "测试DNS解析..."
107
- local domain=$(echo "$BASE_URL" | sed 's|https://||' | sed 's|/.*||')
108
- if nslookup "$domain" >/dev/null 2>&1; then
109
- log_success "DNS解析成功 ($domain)"
110
- PASSED_TESTS=$((PASSED_TESTS + 1))
111
- else
112
- log_error "DNS解析失败 ($domain)"
113
- FAILED_TESTS=$((FAILED_TESTS + 1))
114
- fi
115
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
116
- }
117
-
118
- # 服务状态测试
119
- test_service_status() {
120
- log_info "=== 2. 服务状态测试 ==="
121
-
122
- # 测试主页
123
- test_http_request "主页访问" "$BASE_URL/" "200" "true"
124
-
125
- # 测试健康检查
126
- test_http_request "健康检查" "$BASE_URL/health" "200" "true"
127
-
128
- # 测试无认证访问
129
- test_http_request "无认证访问主页" "$BASE_URL/" "401" "false"
130
- }
131
-
132
- # OpenCode端点测试
133
- test_opencode_endpoints() {
134
- log_info "=== 3. OpenCode端点测试 ==="
135
-
136
- # 测试Web端点
137
- test_http_request "OpenCode Web界面" "$BASE_URL/opencode/web/" "200" "true"
138
-
139
- # 测试API端点
140
- test_http_request "OpenCode API健康检查" "$BASE_URL/opencode/api/global/health" "200" "true"
141
-
142
- # 测试API文档
143
- test_http_request "API文档" "$BASE_URL/opencode/api/doc" "200" "true"
144
-
145
- # 测试重定向
146
- test_http_request "/opencode 重定向" "$BASE_URL/opencode" "301" "true"
147
- }
148
-
149
- # 认证功能测试
150
- test_authentication() {
151
- log_info "=== 4. 认证功能测试 ==="
152
-
153
- # 测试正确认证
154
- test_http_request "正确认证访问" "$BASE_URL/" "200" "true"
155
-
156
- # 测试错误认证
157
- test_http_request "错误认证访问" "$BASE_URL/" "401" "false"
158
-
159
- # 测试认证头部
160
- log_info "测试认证头部响应..."
161
- local cmd="curl -s -I --max-time 30 -u $TEST_USER:$TEST_PASS"
162
- local headers=$(eval "$cmd '$BASE_URL/'" 2>&1)
163
-
164
- if echo "$headers" | grep -q "X-Powered-By.*OpenResty"; then
165
- log_success "认证头部正确"
166
- PASSED_TESTS=$((PASSED_TESTS + 1))
167
- else
168
- log_error "认证头部缺失"
169
- FAILED_TESTS=$((FAILED_TESTS + 1))
170
- fi
171
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
172
- }
173
-
174
- # 静态资源测试
175
- test_static_resources() {
176
- log_info "=== 5. 静态资源测试 ==="
177
-
178
- # 测试常见静态资源
179
- local resources=(
180
- "assets/index.css"
181
- "assets/index.js"
182
- "favicon.ico"
183
- "site.webmanifest"
184
- )
185
-
186
- for resource in "${resources[@]}"; do
187
- test_http_request "静态资源: $resource" "$BASE_URL/$resource" "200" "true" "10" || log_warning "静态资源 $resource 可能不存在"
188
- done
189
- }
190
-
191
- # API功能测试
192
- test_api_functionality() {
193
- log_info "=== 6. API功能测试 ==="
194
-
195
- # 测试API健康检查内容
196
- log_info "测试API健康检查内容..."
197
- local cmd="curl -s --max-time 30 -u $TEST_USER:$TEST_PASS"
198
- local content=$(eval "$cmd '$BASE_URL/opencode/api/global/health'" 2>&1)
199
-
200
- if echo "$content" | grep -q "healthy\|status\|ok"; then
201
- log_success "API健康检查内容正确"
202
- PASSED_TESTS=$((PASSED_TESTS + 1))
203
- else
204
- log_error "API健康检查内容异常"
205
- log_error "响应内容: $content"
206
- FAILED_TESTS=$((FAILED_TESTS + 1))
207
- fi
208
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
209
-
210
- # 测试会话创建
211
- log_info "测试API会话创建..."
212
- local cmd="curl -s --max-time 30 -u $TEST_USER:$TEST_PASS -X POST -H 'Content-Type: application/json' -d '{\"title\":\"Test Session\"}'"
213
- local response=$(eval "$cmd '$BASE_URL/opencode/api/session'" 2>&1)
214
-
215
- if echo "$response" | grep -q "id\|session"; then
216
- log_success "API会话创建成功"
217
- PASSED_TESTS=$((PASSED_TESTS + 1))
218
- else
219
- log_error "API会话创建失败"
220
- log_error "响应内容: $response"
221
- FAILED_TESTS=$((FAILED_TESTS + 1))
222
- fi
223
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
224
- }
225
-
226
- # 错误处理测试
227
- test_error_handling() {
228
- log_info "=== 7. 错误处理测试 ==="
229
-
230
- # 测试404错误
231
- test_http_request "404错误处理" "$BASE_URL/nonexistent-page" "404" "true"
232
-
233
- # 测试无效API端点
234
- test_http_request "无效API端点" "$BASE_URL/opencode/api/invalid-endpoint" "404" "true"
235
- }
236
-
237
- # 性能测试
238
- test_performance() {
239
- log_info "=== 8. 性能测试 ==="
240
-
241
- # 测试响应时间
242
- log_info "测试主页响应时间..."
243
- local start_time=$(date +%s%N)
244
- local cmd="curl -s --max-time 30 -u $TEST_USER:$TEST_PASS"
245
- eval "$cmd '$BASE_URL/health'" > /dev/null 2>&1
246
- local end_time=$(date +%s%N)
247
- local response_time=$(( (end_time - start_time) / 1000000 )) # 转换为毫秒
248
-
249
- if [ $response_time -lt 10000 ]; then
250
- log_success "响应时间正常 (${response_time}ms)"
251
- PASSED_TESTS=$((PASSED_TESTS + 1))
252
- else
253
- log_warning "响应时间较慢 (${response_time}ms)"
254
- PASSED_TESTS=$((PASSED_TESTS + 1)) # 仍然算通过,只是警告
255
- fi
256
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
257
- }
258
-
259
- # 生成诊断报告
260
- generate_diagnostic_report() {
261
- log_info "=== 诊断报告 ==="
262
-
263
- echo ""
264
- echo "=========================================="
265
- echo " Hugging Face Spaces 部署诊断报告"
266
- echo "=========================================="
267
- echo ""
268
- echo "测试时间: $(date)"
269
- echo "测试目标: $BASE_URL"
270
- echo "认证信息: $TEST_USER/$TEST_PASS"
271
- echo ""
272
- echo "测试统计:"
273
- echo " 总测试数: ${TOTAL_TESTS}"
274
- echo " 通过测试: ${PASSED_TESTS}"
275
- echo " 失败测试: ${FAILED_TESTS}"
276
-
277
- if [ $TOTAL_TESTS -gt 0 ]; then
278
- echo " 成功率: $(( PASSED_TESTS * 100 / TOTAL_TESTS ))%"
279
- fi
280
- echo ""
281
-
282
- if [ $FAILED_TESTS -eq 0 ]; then
283
- echo -e "${GREEN}🎉 所有测试通过!部署成功!${NC}"
284
- echo ""
285
- echo -e "${GREEN}✅ 服务正常运行${NC}"
286
- echo -e "${GREEN}✅ 认证机制工作${NC}"
287
- echo -e "${GREEN}✅ OpenCode端点可用${NC}"
288
- echo -e "${GREEN}✅ 代理配置正确${NC}"
289
- else
290
- echo -e "${YELLOW}⚠️ 有 ${FAILED_TESTS} 个测试失败${NC}"
291
- echo ""
292
- echo -e "${YELLOW}可能的问题:${NC}"
293
- echo " - 服务还在启动中"
294
- echo " - 配置文件有误"
295
- echo " - 网络连接问题"
296
- echo " - Hugging Face Spaces资源限制"
297
- fi
298
-
299
- echo ""
300
- echo "=========================================="
301
- echo " 访问地址确认"
302
- echo "=========================================="
303
- echo ""
304
- echo "🌐 主要访问地址:"
305
- echo " 主页: $BASE_URL/"
306
- echo " 健康检查: $BASE_URL/health"
307
- echo " OpenCode Web: $BASE_URL/opencode/web/"
308
- echo " OpenCode API: $BASE_URL/opencode/api/"
309
- echo ""
310
- echo "🔌 API端点示例:"
311
- echo " 健康检查: $BASE_URL/opencode/api/global/health"
312
- echo " API文档: $BASE_URL/opencode/api/doc"
313
- echo " 会话管理: $BASE_URL/opencode/api/session"
314
- echo ""
315
-
316
- if [ $FAILED_TESTS -gt 0 ]; then
317
- echo ""
318
- echo "=========================================="
319
- echo " 故障排除建议"
320
- echo "=========================================="
321
- echo ""
322
- echo "🔧 检查步骤:"
323
- echo "1. 确认Space状态:在Hugging Face查看Space是否正在运行"
324
- echo "2. 检查构建日志:查看Docker构建是否有错误"
325
- echo "3. 检查运行日志:查看应用运行日志"
326
- echo "4. 验证配置��确认nginx配置文件正确"
327
- echo "5. 网络测试:尝试其他网络环境访问"
328
- echo ""
329
- echo "📝 常见问题:"
330
- echo "- Space还在构建中"
331
- echo "- 资源限制导致启动失败"
332
- echo "- 端口配置问题"
333
- echo "- 认证配置错误"
334
- fi
335
- }
336
-
337
- # 主函数
338
- main() {
339
- echo "=========================================="
340
- echo " Hugging Face Spaces 部署诊断工具"
341
- echo "=========================================="
342
- echo ""
343
- echo "测试目标: $BASE_URL"
344
- echo "认证信息: $TEST_USER/$TEST_PASS"
345
- echo ""
346
-
347
- # 检查必要工具
348
- if ! command -v curl >/dev/null 2>&1; then
349
- log_error "curl 命令未找到,请安装 curl"
350
- exit 1
351
- fi
352
-
353
- # 运行所有测试
354
- test_connectivity
355
- test_service_status
356
- test_opencode_endpoints
357
- test_authentication
358
- test_static_resources
359
- test_api_functionality
360
- test_error_handling
361
- test_performance
362
-
363
- # 生成报告
364
- generate_diagnostic_report
365
-
366
- # 返回适当的退出码
367
- if [ $FAILED_TESTS -eq 0 ]; then
368
- exit 0
369
- else
370
- exit 1
371
- fi
372
- }
373
-
374
- # 如果直接运行此脚本
375
- if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
376
- main "$@"
377
- fi
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
runtime-test.sh DELETED
@@ -1,423 +0,0 @@
1
- #!/bin/bash
2
-
3
- # =============================================================================
4
- # Nginx + OpenCode 运行时功能测试套件
5
- # =============================================================================
6
-
7
- set -e
8
-
9
- # 颜色定义
10
- RED='\033[0;31m'
11
- GREEN='\033[0;32m'
12
- YELLOW='\033[1;33m'
13
- BLUE='\033[0;34m'
14
- NC='\033[0m'
15
-
16
- # 测试配置
17
- NGINX_PORT="7860"
18
- OPENCODE_PORT="57860"
19
- BASE_URL="http://localhost:${NGINX_PORT}"
20
- TEST_USER="admin"
21
- TEST_PASS="admin123"
22
-
23
- # 测试结果统计
24
- TOTAL_TESTS=0
25
- PASSED_TESTS=0
26
- FAILED_TESTS=0
27
-
28
- # 日志函数
29
- log_info() {
30
- echo -e "${BLUE}[INFO]${NC} $1"
31
- }
32
-
33
- log_success() {
34
- echo -e "${GREEN}[PASS]${NC} $1"
35
- PASSED_TESTS=$((PASSED_TESTS + 1))
36
- }
37
-
38
- log_error() {
39
- echo -e "${RED}[FAIL]${NC} $1"
40
- FAILED_TESTS=$((FAILED_TESTS + 1))
41
- }
42
-
43
- log_warning() {
44
- echo -e "${YELLOW}[WARN]${NC} $1"
45
- }
46
-
47
- # 检查服务是否运行
48
- check_service() {
49
- local service_name="$1"
50
- local port="$2"
51
- local host="${3:-localhost}"
52
-
53
- if nc -z "$host" "$port" 2>/dev/null; then
54
- log_success "$service_name 服务运行中 (端口 $port)"
55
- return 0
56
- else
57
- log_error "$service_name 服务未运行 (端口 $port)"
58
- return 1
59
- fi
60
- }
61
-
62
- # HTTP请求测试
63
- test_http_request() {
64
- local test_name="$1"
65
- local url="$2"
66
- local expected_status="$3"
67
- local auth="$4"
68
-
69
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
70
- log_info "测试: $test_name"
71
-
72
- local cmd="curl -s -o /dev/null -w '%{http_code}' --max-time 10"
73
-
74
- if [ "$auth" = "true" ]; then
75
- cmd="$cmd -u $TEST_USER:$TEST_PASS"
76
- fi
77
-
78
- local status=$(eval "$cmd '$url'")
79
-
80
- if [ "$status" = "$expected_status" ]; then
81
- log_success "$test_name (HTTP $status)"
82
- return 0
83
- else
84
- log_error "$test_name (期望: $expected_status, 实际: $status)"
85
- return 1
86
- fi
87
- }
88
-
89
- # 内容测试
90
- test_http_content() {
91
- local test_name="$1"
92
- local url="$2"
93
- local expected_content="$3"
94
- local auth="$4"
95
-
96
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
97
- log_info "测试: $test_name"
98
-
99
- local cmd="curl -s --max-time 10"
100
-
101
- if [ "$auth" = "true" ]; then
102
- cmd="$cmd -u $TEST_USER:$TEST_PASS"
103
- fi
104
-
105
- local content=$(eval "$cmd '$url'")
106
-
107
- if echo "$content" | grep -q "$expected_content"; then
108
- log_success "$test_name (内容匹配)"
109
- return 0
110
- else
111
- log_error "$test_name (内容不匹配)"
112
- return 1
113
- fi
114
- }
115
-
116
- # 1. 服务运行状态检查
117
- test_service_status() {
118
- log_info "=== 1. 服务运行状态检查 ==="
119
-
120
- # 检查nginx服务
121
- check_service "Nginx" "$NGINX_PORT"
122
-
123
- # 检查OpenCode服务
124
- check_service "OpenCode" "$OPENCODE_PORT"
125
- }
126
-
127
- # 2. 认证功能测试
128
- test_authentication() {
129
- log_info "=== 2. 认证功能测试 ==="
130
-
131
- # 测试无认证访问
132
- test_http_request "无认证访问主页" "$BASE_URL/" "401" "false"
133
- test_http_request "无认证访问健康检查" "$BASE_URL/health" "401" "false"
134
- test_http_request "无认证访问OpenCode Web" "$BASE_URL/opencode/web/" "401" "false"
135
- test_http_request "无认证访问OpenCode API" "$BASE_URL/opencode/api/global/health" "401" "false"
136
-
137
- # 测试有认证访问
138
- test_http_request "认证访问主页" "$BASE_URL/" "200" "true"
139
- test_http_request "认证访问健康检查" "$BASE_URL/health" "200" "true"
140
- test_http_request "认证访问OpenCode Web" "$BASE_URL/opencode/web/" "200" "true"
141
- test_http_request "认证访问OpenCode API健康检查" "$BASE_URL/opencode/api/global/health" "200" "true"
142
- }
143
-
144
- # 3. 路由和重定向测试
145
- test_routing() {
146
- log_info "=== 3. 路由和重定向测试 ==="
147
-
148
- # 测试重定向
149
- test_http_request "/opencode 重定向" "$BASE_URL/opencode" "301" "true"
150
- test_http_request "/opencode/ 重定向" "$BASE_URL/opencode/" "301" "true"
151
-
152
- # 测试健康检查
153
- test_http_content "健康检查内容" "$BASE_URL/health" "OK" "true"
154
- }
155
-
156
- # 4. OpenCode Web端点测试
157
- test_opencode_web() {
158
- log_info "=== 4. OpenCode Web端点测试 ==="
159
-
160
- # 测试Web界面访问
161
- test_http_request "OpenCode Web界面" "$BASE_URL/opencode/web/" "200" "true"
162
-
163
- # 测试静态资源代理
164
- test_http_request "静态资源代理" "$BASE_URL/assets/index.css" "200" "true" || log_warning "静态资源可能不存在"
165
- test_http_request "Favicon代理" "$BASE_URL/favicon.ico" "200" "true" || log_warning "Favicon可能不存在"
166
- test_http_request "Web Manifest代理" "$BASE_URL/site.webmanifest" "200" "true" || log_warning "Web Manifest可能不存在"
167
- }
168
-
169
- # 5. OpenCode API端点测试
170
- test_opencode_api() {
171
- log_info "=== 5. OpenCode API端点测试 ==="
172
-
173
- # 测试API健康检查
174
- test_http_content "API健康检查" "$BASE_URL/opencode/api/global/health" "healthy" "true"
175
-
176
- # 测试API文档
177
- test_http_request "API文档访问" "$BASE_URL/opencode/api/doc" "200" "true"
178
-
179
- # 测试项目API
180
- test_http_request "项目API" "$BASE_URL/opencode/api/project" "200" "true"
181
-
182
- # 测试会话API
183
- test_http_request "会话API" "$BASE_URL/opencode/api/session" "200" "true"
184
-
185
- # 测试提供商API
186
- test_http_request "提供商API" "$BASE_URL/opencode/api/provider" "200" "true"
187
- }
188
-
189
- # 6. CORS功能测试
190
- test_cors() {
191
- log_info "=== 6. CORS功能测试 ==="
192
-
193
- # 测试OPTIONS请求
194
- local cmd="curl -s -o /dev/null -w '%{http_code}' -X OPTIONS --max-time 10 -u $TEST_USER:$TEST_PASS"
195
- local status=$(eval "$cmd '$BASE_URL/opencode/api/session'")
196
-
197
- if [ "$status" = "204" ] || [ "$status" = "200" ]; then
198
- log_success "CORS OPTIONS请求 (HTTP $status)"
199
- PASSED_TESTS=$((PASSED_TESTS + 1))
200
- else
201
- log_error "CORS OPTIONS请求 (期望: 204/200, 实际: $status)"
202
- FAILED_TESTS=$((FAILED_TESTS + 1))
203
- fi
204
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
205
-
206
- # 测试CORS头部
207
- local cmd="curl -s -I --max-time 10 -u $TEST_USER:$TEST_PASS"
208
- local headers=$(eval "$cmd '$BASE_URL/opencode/api/session'")
209
-
210
- if echo "$headers" | grep -q "Access-Control-Allow-Origin"; then
211
- log_success "CORS头部存在"
212
- PASSED_TESTS=$((PASSED_TESTS + 1))
213
- else
214
- log_error "CORS头部缺失"
215
- FAILED_TESTS=$((FAILED_TESTS + 1))
216
- fi
217
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
218
- }
219
-
220
- # 7. 性能和超时测试
221
- test_performance() {
222
- log_info "=== 7. 性能和超时测试 ==="
223
-
224
- # 测试响应时间
225
- local start_time=$(date +%s%N)
226
- curl -s --max-time 10 -u "$TEST_USER:$TEST_PASS" "$BASE_URL/health" > /dev/null
227
- local end_time=$(date +%s%N)
228
- local response_time=$(( (end_time - start_time) / 1000000 )) # 转换为毫秒
229
-
230
- if [ $response_time -lt 5000 ]; then
231
- log_success "响应时间测试 (${response_time}ms)"
232
- PASSED_TESTS=$((PASSED_TESTS + 1))
233
- else
234
- log_warning "响应时间较慢 (${response_time}ms)"
235
- PASSED_TESTS=$((PASSED_TESTS + 1)) # 仍然算通过,只是警告
236
- fi
237
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
238
- }
239
-
240
- # 8. 安全功能测试
241
- test_security() {
242
- log_info "=== 8. 安全功能测试 ==="
243
-
244
- # 测试错误认证
245
- local cmd="curl -s -o /dev/null -w '%{http_code}' --max-time 10"
246
- local status=$(eval "$cmd -u wrong:password '$BASE_URL/'")
247
-
248
- if [ "$status" = "401" ]; then
249
- log_success "错误认证拒绝 (HTTP $status)"
250
- PASSED_TESTS=$((PASSED_TESTS + 1))
251
- else
252
- log_error "错误认证拒绝 (期望: 401, 实际: $status)"
253
- FAILED_TESTS=$((FAILED_TESTS + 1))
254
- fi
255
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
256
-
257
- # 测试安全头部
258
- local cmd="curl -s -I --max-time 10 -u $TEST_USER:$TEST_PASS"
259
- local headers=$(eval "$cmd '$BASE_URL/'")
260
-
261
- if echo "$headers" | grep -q "X-Powered-By.*OpenResty"; then
262
- log_success "安全头部存在"
263
- PASSED_TESTS=$((PASSED_TESTS + 1))
264
- else
265
- log_error "安全头部缺失"
266
- FAILED_TESTS=$((FAILED_TESTS + 1))
267
- fi
268
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
269
- }
270
-
271
- # 9. 集成功能测试
272
- test_integration() {
273
- log_info "=== 9. 集成功能测试 ==="
274
-
275
- # 测试完整的API调用流程
276
- log_info "测试API会话创建..."
277
-
278
- local cmd="curl -s --max-time 10 -u $TEST_USER:$TEST_PASS -X POST -H 'Content-Type: application/json' -d '{\"title\":\"Test Session\"}'"
279
- local response=$(eval "$cmd '$BASE_URL/opencode/api/session'")
280
-
281
- if echo "$response" | grep -q "id"; then
282
- log_success "API会话创建成功"
283
- PASSED_TESTS=$((PASSED_TESTS + 1))
284
-
285
- # 提取session ID进行下一步测试
286
- local session_id=$(echo "$response" | grep -o '"id":"[^"]*"' | cut -d'"' -f4)
287
-
288
- if [ -n "$session_id" ]; then
289
- log_info "测试消息发送到会话 $session_id..."
290
-
291
- local cmd="curl -s --max-time 10 -u $TEST_USER:$TEST_PASS -X POST -H 'Content-Type: application/json' -d '{\"parts\":[{\"type\":\"text\",\"text\":\"Hello\"}]}'"
292
- local msg_response=$(eval "$cmd '$BASE_URL/opencode/api/session/$session_id/message'")
293
-
294
- if echo "$msg_response" | grep -q "id\|message"; then
295
- log_success "API消息发送成功"
296
- PASSED_TESTS=$((PASSED_TESTS + 1))
297
- else
298
- log_error "API消息发送失败"
299
- FAILED_TESTS=$((FAILED_TESTS + 1))
300
- fi
301
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
302
- fi
303
- else
304
- log_error "API会话创建失败"
305
- FAILED_TESTS=$((FAILED_TESTS + 1))
306
- fi
307
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
308
- }
309
-
310
- # 生成测试报告
311
- generate_runtime_report() {
312
- log_info "=== 运行时测试报告 ==="
313
-
314
- echo ""
315
- echo "=========================================="
316
- echo " 运行时功能测试报告"
317
- echo "=========================================="
318
- echo ""
319
- echo "测���时间: $(date)"
320
- echo "测试目标: $BASE_URL"
321
- echo ""
322
- echo "测试统计:"
323
- echo " 总测试数: ${TOTAL_TESTS}"
324
- echo " 通过测试: ${PASSED_TESTS}"
325
- echo " 失败测试: ${FAILED_TESTS}"
326
-
327
- if [ $TOTAL_TESTS -gt 0 ]; then
328
- echo " 成功率: $(( PASSED_TESTS * 100 / TOTAL_TESTS ))%"
329
- fi
330
- echo ""
331
-
332
- if [ $FAILED_TESTS -eq 0 ]; then
333
- echo -e "${GREEN}🎉 所有运行时测试通过!${NC}"
334
- echo ""
335
- echo -e "${GREEN}✅ 服务功能正常${NC}"
336
- echo -e "${GREEN}✅ 认证机制工作${NC}"
337
- echo -e "${GREEN}✅ 路由配置正确${NC}"
338
- echo -e "${GREEN}✅ API端点可用${NC}"
339
- echo -e "${GREEN}✅ 代理转发正常${NC}"
340
- else
341
- echo -e "${YELLOW}⚠️ 有 ${FAILED_TESTS} 个测试失败${NC}"
342
- echo ""
343
- echo -e "${YELLOW}请检查:${NC}"
344
- echo " - 服务是否正常启动"
345
- echo " - 端口是否被占用"
346
- echo " - OpenCode是否运行"
347
- echo " - 网络连接是否正常"
348
- fi
349
-
350
- echo ""
351
- echo "=========================================="
352
- echo " 访问地址确认"
353
- echo "=========================================="
354
- echo ""
355
- echo "🔐 认证信息:"
356
- echo " 用户名: $TEST_USER"
357
- echo " 密码: $TEST_PASS"
358
- echo ""
359
- echo "🌐 访问地址:"
360
- echo " 主页: $BASE_URL/"
361
- echo " 健康检查: $BASE_URL/health"
362
- echo " OpenCode Web: $BASE_URL/opencode/web/"
363
- echo " OpenCode API: $BASE_URL/opencode/api/"
364
- echo " API文档: $BASE_URL/opencode/api/doc"
365
- echo ""
366
- echo "📊 API端点示例:"
367
- echo " 健康检查: $BASE_URL/opencode/api/global/health"
368
- echo " 项目管理: $BASE_URL/opencode/api/project"
369
- echo " 会话管理: $BASE_URL/opencode/api/session"
370
- echo " 提供商: $BASE_URL/opencode/api/provider"
371
- echo ""
372
-
373
- if [ $FAILED_TESTS -eq 0 ]; then
374
- echo -e "${GREEN}🚀 系统已就绪,可以正常使用!${NC}"
375
- fi
376
- }
377
-
378
- # 主函数
379
- main() {
380
- echo "=========================================="
381
- echo " Nginx + OpenCode 运行时功能测试"
382
- echo "=========================================="
383
- echo ""
384
- echo "测试目标: $BASE_URL"
385
- echo "认证信息: $TEST_USER/$TEST_PASS"
386
- echo ""
387
-
388
- # 检查必要工具
389
- if ! command -v curl >/dev/null 2>&1; then
390
- log_error "curl 命令未找到,请安装 curl"
391
- exit 1
392
- fi
393
-
394
- if ! command -v nc >/dev/null 2>&1; then
395
- log_warning "nc 命令未找到,跳过端口检查"
396
- fi
397
-
398
- # 运行所有测试
399
- test_service_status
400
- test_authentication
401
- test_routing
402
- test_opencode_web
403
- test_opencode_api
404
- test_cors
405
- test_performance
406
- test_security
407
- test_integration
408
-
409
- # 生成报告
410
- generate_runtime_report
411
-
412
- # 返回适当的退出码
413
- if [ $FAILED_TESTS -eq 0 ]; then
414
- exit 0
415
- else
416
- exit 1
417
- fi
418
- }
419
-
420
- # 如果直接运行此脚本
421
- if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
422
- main "$@"
423
- fi
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
test-api-endpoints.sh DELETED
@@ -1,54 +0,0 @@
1
- #!/bin/bash
2
-
3
- # 测试API端点访问
4
-
5
- echo "🔍 测试OpenCode API端点访问..."
6
-
7
- base_url="https://airsltd-ocngx.hf.space"
8
-
9
- # 测试各个API端点
10
- test_endpoints=(
11
- "/global/health"
12
- "/global/event"
13
- "/session"
14
- "/project"
15
- "/provider"
16
- "/file"
17
- "/find"
18
- "/config"
19
- "/doc"
20
- )
21
-
22
- echo "📡 测试API端点..."
23
- for endpoint in "${test_endpoints[@]}"; do
24
- echo -n " $endpoint: "
25
- response=$(curl -s -w "%{http_code}" "${base_url}${endpoint}")
26
- http_code="${response: -3}"
27
-
28
- if [ "$http_code" = "200" ]; then
29
- echo "✅ 200 OK"
30
- elif [ "$http_code" = "404" ]; then
31
- echo "❌ 404 Not Found"
32
- elif [ "$http_code" = "401" ]; then
33
- echo "❌ 401 Unauthorized"
34
- elif [ "$http_code" = "405" ]; then
35
- echo "✅ 405 Method Not Allowed (正常,端点存在但不支持GET)"
36
- else
37
- echo "❓ $http_code"
38
- fi
39
- done
40
-
41
- echo ""
42
- echo "🌐 测试主页面和关键功能..."
43
- main_response=$(curl -s -w "%{http_code}" "${base_url}/opencode/")
44
- main_http_code="${main_response: -3}"
45
-
46
- if [ "$main_http_code" = "200" ]; then
47
- echo "✅ 主页面 200 OK"
48
- else
49
- echo "❌ 主页面 $main_http_code"
50
- fi
51
-
52
- echo ""
53
- echo "🎯 测试完成!"
54
- echo "📱 如果所有API端点都是200,则Web界面应该完全正常工作"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
test-connection.sh DELETED
@@ -1,70 +0,0 @@
1
- #!/bin/bash
2
-
3
- # 测试脚本:验证OpenCode服务内部连接
4
-
5
- echo "🔍 测试OpenCode服务内部连接..."
6
-
7
- # 测试1: 检查nginx是否正常运行
8
- echo "📡 测试1: nginx健康检查"
9
- if curl -s https://airsltd-ocngx.hf.space/health > /dev/null; then
10
- echo "✅ nginx服务正常"
11
- else
12
- echo "❌ nginx服务异常"
13
- exit 1
14
- fi
15
-
16
- # 测试2: 检查/opencode/路径是否现在可以访问(无认证)
17
- echo "🌐 测试2: /opencode/路径访问"
18
- response=$(curl -s -w "%{http_code}" https://airsltd-ocngx.hf.space/opencode/global/health)
19
- http_code="${response: -3}"
20
- body="${response%???}"
21
-
22
- if [ "$http_code" = "200" ]; then
23
- echo "✅ OpenCode服务可访问"
24
- echo "📊 响应: $body"
25
- elif [ "$http_code" = "401" ]; then
26
- echo "❌ 仍然需要认证 - 配置未生效"
27
- echo "📊 响应: $body"
28
- elif [ "$http_code" = "502" ]; then
29
- echo "❌ OpenCode服务未启动或代理失败"
30
- echo "📊 响应: $body"
31
- else
32
- echo "❓ 未知状态码: $http_code"
33
- echo "📊 响应: $body"
34
- fi
35
-
36
- # 测试3: 检查Web界面
37
- echo "🖥️ 测试3: Web界面访问"
38
- web_response=$(curl -s -w "%{http_code}" https://airsltd-ocngx.hf.space/opencode/)
39
- web_http_code="${web_response: -3}"
40
- web_body="${web_response%???}"
41
-
42
- if [ "$web_http_code" = "200" ] && echo "$web_body" | grep -q "html"; then
43
- echo "✅ Web界面正常加载"
44
- echo "📊 页面类型: HTML"
45
- elif [ "$web_http_code" = "200" ] && echo "$web_body" | grep -q "healthy"; then
46
- echo "✅ OpenCode API响应正常"
47
- echo "📊 响应类型: JSON API"
48
- else
49
- echo "❌ Web界面加载失败"
50
- echo "📊 状态码: $web_http_code"
51
- echo "📊 响应预览: ${web_body:0:100}..."
52
- fi
53
-
54
- # 测试4: 检查API文档
55
- echo "📚 测试4: API文档访问"
56
- doc_response=$(curl -s -w "%{http_code}" https://airsltd-ocngx.hf.space/opencode/doc)
57
- doc_http_code="${doc_response: -3}"
58
-
59
- if [ "$doc_http_code" = "200" ]; then
60
- echo "✅ API文档可访问"
61
- elif [ "$doc_http_code" = "404" ]; then
62
- echo "❌ API文档端点不存在"
63
- else
64
- echo "❓ API文档状态: $doc_http_code"
65
- fi
66
-
67
- echo ""
68
- echo "🎯 测试完成!"
69
- echo "📱 如果所有测试通过,可以在手机浏览器中访问:"
70
- echo " https://airsltd-ocngx.hf.space/opencode/"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
test-nginx-config.sh DELETED
@@ -1,62 +0,0 @@
1
- #!/bin/bash
2
-
3
- echo "=== 测试新的nginx配置 ==="
4
-
5
- echo "1. 检查配置文件语法..."
6
- # 简单检查配置文件语法
7
- if [ -f "nginx/nginx.conf" ] && [ -f "nginx/conf.d/default.conf" ]; then
8
- echo "✅ 配置文件存在"
9
- else
10
- echo "❌ 配置文件缺失"
11
- exit 1
12
- fi
13
-
14
- echo "2. 验证端点配置..."
15
- # 检查关键端点配置
16
- echo "检查 /opencode/web/ 端点配置..."
17
- if grep -q "location /opencode/web/" nginx/conf.d/default.conf; then
18
- echo "✅ /opencode/web/ 端点已配置"
19
- else
20
- echo "❌ /opencode/web/ 端点未找到"
21
- fi
22
-
23
- echo "检查 /opencode/api/ 端点配置..."
24
- if grep -q "location /opencode/api/" nginx/conf.d/default.conf; then
25
- echo "✅ /opencode/api/ 端点已配置"
26
- else
27
- echo "❌ /opencode/api/ 端点未找到"
28
- fi
29
-
30
- echo "3. 验证认证配置..."
31
- # 检查认证配置
32
- if grep -q "auth_basic" nginx/conf.d/default.conf; then
33
- echo "✅ HTTP Basic Auth已配置"
34
- else
35
- echo "❌ HTTP Basic Auth未找到"
36
- fi
37
-
38
- echo "4. 检查代理简化..."
39
- # 统计代理端点数量
40
- proxy_count=$(grep -c "proxy_pass http://127.0.0.1:57860" nginx/conf.d/default.conf)
41
- echo "当前代理端点数量: $proxy_count"
42
-
43
- echo "5. 验证重定向配置..."
44
- if grep -q "location = /opencode" nginx/conf.d/default.conf; then
45
- echo "✅ /opencode 重定向已配置"
46
- else
47
- echo "❌ /opencode 重定向未找到"
48
- fi
49
-
50
- echo ""
51
- echo "=== 配置总结 ==="
52
- echo "✅ 默认站点: nginx (根路径 /)"
53
- echo "✅ OpenCode Web端点: /opencode/web/"
54
- echo "✅ OpenCode API端点: /opencode/api/"
55
- echo "✅ 统一认证: server级别Basic Auth"
56
- echo "✅ 简化代理: 使用统一端点转发"
57
- echo ""
58
- echo "=== 访问方式 ==="
59
- echo "主页: http://localhost:7860/ (需要认证)"
60
- echo "OpenCode Web: http://localhost:7860/opencode/web/ (需要认证)"
61
- echo "OpenCode API: http://localhost:7860/opencode/api/ (需要认证)"
62
- echo "健康检查: http://localhost:7860/health (需要认证)"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
test-static-resources.sh DELETED
@@ -1,54 +0,0 @@
1
- #!/bin/bash
2
-
3
- # 测试静态资源访问
4
-
5
- echo "🔍 测试OpenCode静态资源访问..."
6
-
7
- base_url="https://airsltd-ocngx.hf.space"
8
-
9
- # 测试各个静态资源端点
10
- test_resources=(
11
- "/assets/index-OLRiU-d3.js"
12
- "/assets/index-DViKQ2Re.css"
13
- "/oc-theme-preload.js"
14
- "/site.webmanifest"
15
- "/favicon.ico"
16
- "/favicon-96x96.png"
17
- )
18
-
19
- echo "📦 测试静态资源端点..."
20
- for resource in "${test_resources[@]}"; do
21
- echo -n " $resource: "
22
- response=$(curl -s -w "%{http_code}" "${base_url}${resource}")
23
- http_code="${response: -3}"
24
-
25
- if [ "$http_code" = "200" ]; then
26
- echo "✅ 200 OK"
27
- elif [ "$http_code" = "404" ]; then
28
- echo "❌ 404 Not Found"
29
- elif [ "$http_code" = "401" ]; then
30
- echo "❌ 401 Unauthorized"
31
- else
32
- echo "❓ $http_code"
33
- fi
34
- done
35
-
36
- echo ""
37
- echo "🌐 测试主页面加载..."
38
- main_response=$(curl -s -w "%{http_code}" "${base_url}/opencode/")
39
- main_http_code="${main_response: -3}"
40
-
41
- if [ "$main_http_code" = "200" ]; then
42
- echo "✅ 主页面 200 OK"
43
- if echo "${main_response%???}" | grep -q "opencode"; then
44
- echo "✅ 页面内容正常"
45
- else
46
- echo "❌ 页面内容异常"
47
- fi
48
- else
49
- echo "❌ 主页面 $main_http_code"
50
- fi
51
-
52
- echo ""
53
- echo "🎯 测试完成!"
54
- echo "📱 如果所有静态资源都是200,则Web界面应该完全正常工作"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
test_integration.sh DELETED
@@ -1,85 +0,0 @@
1
- #!/bin/bash
2
-
3
- # 测试脚本:验证 OpenCode + Nginx 集成
4
-
5
- echo "🧪 Testing OpenCode + Nginx Integration"
6
- echo "======================================"
7
-
8
- # 检查环境
9
- echo "📋 Environment Check:"
10
- echo " • OpenCode will be installed in Docker"
11
- echo " • Nginx will listen on port 7860"
12
- echo " • OpenCode will listen on port 57860"
13
- echo " • Basic Auth: admin/admin123"
14
- echo ""
15
-
16
- # 测试计划
17
- echo "🎯 Test Plan:"
18
- echo " 1. Docker build and run"
19
- echo " 2. Nginx authentication test"
20
- echo " 3. OpenCode proxy test"
21
- echo " 4. API documentation access"
22
- echo " 5. End-to-end AI coding test"
23
- echo ""
24
-
25
- # 预期的 API 端点
26
- echo "📡 Expected Endpoints:"
27
- echo " • Main Site: http://localhost:7860/"
28
- echo " • Health Check: http://localhost:7860/health"
29
- echo " • OpenCode API: http://localhost:7860/opencode/"
30
- echo " • OpenCode Docs: http://localhost:7860/opencode/doc"
31
- echo " • Global Health: http://localhost:7860/opencode/global/health"
32
- echo ""
33
-
34
- # 测试命令模板
35
- echo "🧪 Test Commands:"
36
- echo ""
37
-
38
- echo "# 1. Nginx Health Check"
39
- echo "curl -u admin:admin123 http://localhost:7860/health"
40
- echo ""
41
-
42
- echo "# 2. OpenCode Health Check (through proxy)"
43
- echo "curl -u admin:admin123 http://localhost:7860/opencode/global/health"
44
- echo ""
45
-
46
- echo "# 3. API Documentation"
47
- echo "curl -u admin:admin123 http://localhost:7860/opencode/doc"
48
- echo ""
49
-
50
- echo "# 4. Create AI Coding Session"
51
- echo "curl -u admin:admin123 -X POST \\"
52
- echo " -H 'Content-Type: application/json' \\"
53
- echo " -d '{\"title\": \"AI Development Session\"}' \\"
54
- echo " http://localhost:7860/opencode/session"
55
- echo ""
56
-
57
- echo "# 5. Send AI Request"
58
- echo "# (Replace {session_id} with actual session ID from previous command)"
59
- echo "curl -u admin:admin123 -X POST \\"
60
- echo " -H 'Content-Type: application/json' \\"
61
- echo " -d '{"
62
- echo " \"parts\": ["
63
- echo " {\"type\": \"text\", \"text\": \"Create a Python Flask web app with Hello World\"}"
64
- echo " ]"
65
- echo " }' \\"
66
- echo " http://localhost:7860/opencode/session/{session_id}/message"
67
- echo ""
68
-
69
- echo "# 6. List Projects"
70
- echo "curl -u admin:admin123 http://localhost:7860/opencode/project"
71
- echo ""
72
-
73
- echo "# 7. Check Providers"
74
- echo "curl -u admin:admin123 http://localhost:7860/opencode/provider"
75
- echo ""
76
-
77
- echo "📊 Expected Responses:"
78
- echo " • Nginx should return: OK"
79
- echo " • OpenCode should return: {\"healthy\":true,\"version\":\"1.x.x\"}"
80
- echo " • Auth failures should return: 401 Unauthorized"
81
- echo " • API should return JSON responses"
82
- echo ""
83
-
84
- echo "🚀 Ready to deploy!"
85
- echo "Run: docker build -t opencode-nginx . && docker run -p 7860:7860 opencode-nginx"