Spaces:
Paused
Paused
Upload 5 files
Browse files- Dockerfile +5 -5
- 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
|
| 27 |
-
EXPOSE 7860
|
| 28 |
|
| 29 |
-
#
|
| 30 |
-
HEALTHCHECK --interval=30s --timeout=10s --start-period=
|
| 31 |
-
CMD nc -z localhost
|
| 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 |
-
#
|
| 132 |
-
#
|
| 133 |
-
|
| 134 |
-
|
|
|
|
|
|
|
| 135 |
GOST_PID=$!
|
| 136 |
-
sleep 1
|
| 137 |
-
|
| 138 |
-
#
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
echo "Starting
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
|
|
|
|
|
|
|
|
|
| 153 |
echo "Checking if gost process (PID: $GOST_PID) started..."
|
| 154 |
-
if kill -0 $GOST_PID > /dev/null 2>&1; then
|
| 155 |
-
echo "
|
| 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 "
|
| 166 |
-
|
| 167 |
-
|
|
|
|
|
|
|
| 168 |
fi
|
| 169 |
|
|
|
|
| 170 |
echo "Proxy converter is running..."
|
| 171 |
-
echo "- HTTP proxy listening internally at port 7860"
|
| 172 |
-
echo "- Status page
|
|
|
|
| 173 |
echo "- Connected to target WebSocket: $TARGET_WSPROXY_URL"
|
| 174 |
|
| 175 |
-
#
|
| 176 |
-
trap "echo 'Shutting down...'; kill $GOST_PID $
|
| 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
|