clash-linux commited on
Commit
8ad7a53
·
verified ·
1 Parent(s): 16526c0

Upload 5 files

Browse files
Files changed (2) hide show
  1. Dockerfile +5 -5
  2. start.sh +43 -37
Dockerfile CHANGED
@@ -23,12 +23,12 @@ RUN curl -L "https://github.com/ginuerzh/gost/releases/download/v${GOST_VERSION}
23
  COPY start.sh /app/
24
  RUN chmod +x /app/start.sh
25
 
26
- # 暴露 7860 端口 (Hugging Face 默认端口)
27
- EXPOSE 7860
28
 
29
- # 设置健康检查
30
- HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
31
- CMD nc -z localhost 7860 || exit 1
32
 
33
  # 运行启动脚本
34
  ENTRYPOINT ["/app/start.sh"]
 
23
  COPY start.sh /app/
24
  RUN chmod +x /app/start.sh
25
 
26
+ # 暴露 7860 (主代理), 7861 (状态页面), 7862 (健康检查)
27
+ EXPOSE 7860 7861 7862
28
 
29
+ # 设置健康检查,指向专用的健康检查端口 7862
30
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=15s --retries=3 \
31
+ CMD nc -z localhost 7862 || exit 1
32
 
33
  # 运行启动脚本
34
  ENTRYPOINT ["/app/start.sh"]
start.sh CHANGED
@@ -128,55 +128,61 @@ if [ $? -ne 0 ]; then
128
  exit 1
129
  fi
130
 
131
- # 启动 gost 服务
132
- # 默认监听 HTTP 代理 (更兼容 Hugging Face)
133
- echo "Starting gost HTTP proxy..."
134
- gost -L "http://:7860" -F "$TARGET_WSPROXY_URL" &
 
 
135
  GOST_PID=$!
136
- sleep 1 # 等待 gost 启动
137
-
138
- # 可选:启用 SOCKS5 代理转发 (需要客户端支持特定隧道)
139
- # 如果要使用 SOCKS5 代理而不是 HTTP,取消下面三行的注释,并注释掉上面的 gost HTTP 命令
140
- # echo "Starting gost SOCKS5 proxy..."
141
- # gost -L "socks5://:7860" -F "$TARGET_WSPROXY_URL" &
142
- # GOST_PID=$!
143
- # sleep 1
144
-
145
- # 启动一个简单的 HTTP 服务器提供状态页面 (从 /tmp/html)
146
- echo "Starting status page server at port 7861..."
147
- cd "$HTML_DIR"
148
- python3 -m http.server 7861 &
149
- HTTP_PID=$!
150
- sleep 1 # 等待 http server 启动
151
-
152
- # 检查 gost 进程是否存在 (使用 kill -0)
 
 
 
153
  echo "Checking if gost process (PID: $GOST_PID) started..."
154
- if kill -0 $GOST_PID > /dev/null 2>&1; then
155
- echo "Gost process is running."
156
- else
157
- echo "Error: Failed to start or find gost process (PID: $GOST_PID). Check logs above."
158
- # 尝试显示最近的日志
159
- echo "--- Recent gost logs (if any) ---"
160
- # gost 通常不会自己写日志文件,错误会显示在标准错误流,应该已经被捕获
161
  exit 1
162
  fi
163
-
164
- # 检查状态页面服务器进程是否存在
165
- echo "Checking if status page server (PID: $HTTP_PID) started..."
166
- if ! kill -0 $HTTP_PID > /dev/null 2>&1; then
167
- echo "Warning: Failed to start or find status page server (PID: $HTTP_PID). Status page might be unavailable."
 
 
168
  fi
169
 
 
170
  echo "Proxy converter is running..."
171
- echo "- HTTP proxy listening internally at port 7860"
172
- echo "- Status page available at port 7861 (web UI)"
 
173
  echo "- Connected to target WebSocket: $TARGET_WSPROXY_URL"
174
 
175
- # 设置捕获信号
176
- trap "echo 'Shutting down...'; kill $GOST_PID $HTTP_PID; exit" SIGINT SIGTERM
177
 
178
  # 等待 gost 进程结束 (主服务进程)
179
  wait $GOST_PID
180
  EXIT_CODE=$?
181
  echo "Gost process exited with code $EXIT_CODE."
 
 
182
  exit $EXIT_CODE
 
128
  exit 1
129
  fi
130
 
131
+ # 设置 gost 日志级别 (info, warn, error, debug, fatal)
132
+ LOG_LEVEL="warn" # 设置为 warn 可以减少健康检查的 EOF 日志
133
+
134
+ # --- 启动主代理服务 ---
135
+ echo "Starting gost HTTP proxy (port 7860) with log level: $LOG_LEVEL..."
136
+ gost -L "http://:7860" -F "$TARGET_WSPROXY_URL" -loglevel "$LOG_LEVEL" &
137
  GOST_PID=$!
138
+ sleep 1
139
+
140
+ # --- 启动状态页面服务 ---
141
+ echo "Starting status page server (port 7861)..."
142
+ (cd "$HTML_DIR" && python3 -m http.server 7861) &
143
+ STATUS_PID=$!
144
+ sleep 1
145
+
146
+ # --- 启动健康检查服务 ---
147
+ HEALTH_CHECK_PORT=7862
148
+ echo "Starting health check server (port $HEALTH_CHECK_PORT)..."
149
+ # 创建一个简单的健康检查响应目录和文件
150
+ HEALTH_CHECK_DIR="/tmp/health"
151
+ mkdir -p "$HEALTH_CHECK_DIR"
152
+ echo "OK" > "$HEALTH_CHECK_DIR/healthz"
153
+ (cd "$HEALTH_CHECK_DIR" && python3 -m http.server $HEALTH_CHECK_PORT) &
154
+ HEALTH_PID=$!
155
+ sleep 1
156
+
157
+ # --- 进程检查 ---
158
  echo "Checking if gost process (PID: $GOST_PID) started..."
159
+ if ! kill -0 $GOST_PID > /dev/null 2>&1; then
160
+ echo "Error: Failed to start or find gost process (PID: $GOST_PID). Exiting."
 
 
 
 
 
161
  exit 1
162
  fi
163
+ echo "Checking if status page server (PID: $STATUS_PID) started..."
164
+ if ! kill -0 $STATUS_PID > /dev/null 2>&1; then
165
+ echo "Warning: Failed to start or find status page server (PID: $STATUS_PID). Status page might be unavailable."
166
+ fi
167
+ echo "Checking if health check server (PID: $HEALTH_PID) started..."
168
+ if ! kill -0 $HEALTH_PID > /dev/null 2>&1; then
169
+ echo "Warning: Failed to start or find health check server (PID: $HEALTH_PID). Health checks might fail."
170
  fi
171
 
172
+ # --- 运行信息 ---
173
  echo "Proxy converter is running..."
174
+ echo "- Main HTTP proxy listening internally at port 7860"
175
+ echo "- Status page server running internally at port 7861"
176
+ echo "- Health check server running internally at port $HEALTH_CHECK_PORT"
177
  echo "- Connected to target WebSocket: $TARGET_WSPROXY_URL"
178
 
179
+ # --- 信号处理与等待 ---
180
+ trap "echo 'Shutting down...'; kill $GOST_PID $STATUS_PID $HEALTH_PID; exit" SIGINT SIGTERM
181
 
182
  # 等待 gost 进程结束 (主服务进程)
183
  wait $GOST_PID
184
  EXIT_CODE=$?
185
  echo "Gost process exited with code $EXIT_CODE."
186
+ # 清理后台进程
187
+ kill $STATUS_PID $HEALTH_PID > /dev/null 2>&1
188
  exit $EXIT_CODE