docs: 新增 README + 更新 Deploy.md + 整理 .gitignore
- 新增 README.md 完整项目概览(架构、功能、快速开始) - 更新 Deploy.md 修正过时的服务状态和端口信息 - 整理 .gitignore 补充缺失规则并移除无效项 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1,242 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ==================== 配置 ====================
|
||||
ROOT_HOST="${CHROMIUM_MANAGER_HOST:-127.0.0.1}"
|
||||
ROOT_PORT="${CHROMIUM_MANAGER_PORT:-19520}"
|
||||
BASE_URL="http://$ROOT_HOST:$ROOT_PORT"
|
||||
|
||||
# ==================== 颜色 ====================
|
||||
GREEN='\033[0;32m'
|
||||
RED='\033[0;31m'
|
||||
YELLOW='\033[1;33m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
|
||||
# ==================== 帮助 ====================
|
||||
show_help() {
|
||||
cat << EOF
|
||||
${CYAN}Chromium 调试管理器${NC}
|
||||
用法: ./chromium_debugging.sh <命令> [选项]
|
||||
|
||||
${GREEN}命令:${NC}
|
||||
start 启动 Chromium(带 GUI,显示在 root 桌面)
|
||||
stop 停止 Chromium
|
||||
restart 重启 Chromium
|
||||
status 查看 Chromium 状态
|
||||
debug-url 获取 WebSocket 调试地址(给 VS Code 插件用)
|
||||
log 查看 Chromium 日志(默认最近 50 行)
|
||||
log -f 实时跟踪日志
|
||||
help 显示此帮助
|
||||
|
||||
${YELLOW}环境变量:${NC}
|
||||
CHROMIUM_MANAGER_HOST 管理服务地址(默认 127.0.0.1)
|
||||
CHROMIUM_MANAGER_PORT 管理服务端口(默认 19520)
|
||||
|
||||
${CYAN}示例:${NC}
|
||||
./chromium_debugging.sh start # 启动 Chromium
|
||||
./chromium_debugging.sh status # 查看状态
|
||||
./chromium_debugging.sh debug-url # 获取调试地址
|
||||
EOF
|
||||
}
|
||||
|
||||
# ==================== API 调用 ====================
|
||||
|
||||
call_api() {
|
||||
local ENDPOINT="$1"
|
||||
local RESULT
|
||||
local HTTP_CODE
|
||||
|
||||
RESULT=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL$ENDPOINT" 2>/dev/null)
|
||||
HTTP_CODE=$(echo "$RESULT" | tail -1)
|
||||
RESULT=$(echo "$RESULT" | sed '$d')
|
||||
|
||||
if [ "$HTTP_CODE" != "200" ]; then
|
||||
echo "{\"status\":\"error\",\"message\":\"连接管理服务失败 ($HTTP_CODE),请确认 root 上已运行 chromium-manager.sh\"}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$RESULT"
|
||||
return 0
|
||||
}
|
||||
|
||||
# ==================== 命令实现 ====================
|
||||
|
||||
cmd_start() {
|
||||
echo -e "${YELLOW}🚀 请求启动 Chromium...${NC}"
|
||||
local RESULT=$(call_api "/start")
|
||||
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
|
||||
|
||||
if [ "$STATUS" = "ok" ]; then
|
||||
local PID=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('pid',''))" 2>/dev/null)
|
||||
echo -e "${GREEN}✅ Chromium 已启动 (PID: $PID)${NC}"
|
||||
echo -e " 调试地址: ${CYAN}http://$ROOT_HOST:9222${NC}"
|
||||
elif [ "$STATUS" = "error" ]; then
|
||||
local MSG=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('message','未知错误'))" 2>/dev/null)
|
||||
echo -e "${RED}❌ $MSG${NC}"
|
||||
else
|
||||
echo -e "${RED}❌ 请求失败${NC}"
|
||||
echo "$RESULT"
|
||||
fi
|
||||
}
|
||||
|
||||
cmd_stop() {
|
||||
echo -e "${YELLOW}🛑 请求停止 Chromium...${NC}"
|
||||
local RESULT=$(call_api "/stop")
|
||||
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
|
||||
|
||||
if [ "$STATUS" = "ok" ]; then
|
||||
echo -e "${GREEN}✅ Chromium 已停止${NC}"
|
||||
else
|
||||
local MSG=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('message','未知错误'))" 2>/dev/null)
|
||||
echo -e "${YELLOW}⚠️ $MSG${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
cmd_restart() {
|
||||
echo -e "${YELLOW}🔄 请求重启 Chromium...${NC}"
|
||||
local RESULT=$(call_api "/restart")
|
||||
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
|
||||
|
||||
if [ "$STATUS" = "ok" ]; then
|
||||
local PID=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('pid',''))" 2>/dev/null)
|
||||
echo -e "${GREEN}✅ Chromium 已重启 (PID: $PID)${NC}"
|
||||
else
|
||||
local MSG=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('message','未知错误'))" 2>/dev/null)
|
||||
echo -e "${RED}❌ $MSG${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
cmd_status() {
|
||||
local RESULT=$(call_api "/status")
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}❌ 无法连接管理服务${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
|
||||
|
||||
if [ "$STATUS" = "running" ]; then
|
||||
local PID=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('pid',''))" 2>/dev/null)
|
||||
echo -e "${GREEN}✅ Chromium 运行中${NC}"
|
||||
echo -e " PID: ${CYAN}$PID${NC}"
|
||||
echo -e " 调试端口: ${CYAN}$ROOT_HOST:9222${NC}"
|
||||
|
||||
local BROWSER=$(echo "$RESULT" | python3 -c "
|
||||
import sys,json
|
||||
data = json.load(sys.stdin)
|
||||
info = data.get('browser_info', {})
|
||||
if isinstance(info, dict):
|
||||
print(f\" 浏览器: {info.get('Browser', '未知')}\")
|
||||
ua = info.get('User-Agent', '')
|
||||
if ua:
|
||||
print(f\" 用户代理: {ua[:80]}...\")
|
||||
" 2>/dev/null)
|
||||
echo -e "$BROWSER"
|
||||
else
|
||||
echo -e "${YELLOW}⏹️ Chromium 未运行${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
cmd_debug_url() {
|
||||
local RESULT=$(call_api "/status")
|
||||
if [ $? -ne 0 ]; then return 1; fi
|
||||
|
||||
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
|
||||
|
||||
if [ "$STATUS" != "running" ]; then
|
||||
echo -e "${RED}❌ Chromium 未运行,请先执行 start${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 获取 WebSocket 调试地址
|
||||
local WS_URL=$(curl -s "http://$ROOT_HOST:9222/json/version" 2>/dev/null | python3 -c "
|
||||
import sys,json
|
||||
try:
|
||||
data = json.load(sys.stdin)
|
||||
print(data.get('webSocketDebuggerUrl', ''))
|
||||
except:
|
||||
print('')
|
||||
" 2>/dev/null)
|
||||
|
||||
local PAGE_WS=$(curl -s "http://$ROOT_HOST:9222/json" 2>/dev/null | python3 -c "
|
||||
import sys,json
|
||||
try:
|
||||
pages = json.load(sys.stdin)
|
||||
if pages:
|
||||
print(pages[0].get('webSocketDebuggerUrl', ''))
|
||||
else:
|
||||
print('')
|
||||
except:
|
||||
print('')
|
||||
" 2>/dev/null)
|
||||
|
||||
if [ -n "$WS_URL" ]; then
|
||||
echo -e "${GREEN}🔗 调试地址:${NC}"
|
||||
echo -e " 浏览器: ${CYAN}$WS_URL${NC}"
|
||||
if [ -n "$PAGE_WS" ]; then
|
||||
echo -e " 当前页面: ${CYAN}$PAGE_WS${NC}"
|
||||
fi
|
||||
echo ""
|
||||
echo -e "${YELLOW}💡 VS Code 插件配置示例:${NC}"
|
||||
echo " {"
|
||||
echo " \"type\": \"chrome\","
|
||||
echo " \"request\": \"attach\","
|
||||
echo " \"name\": \"Attach to Chromium\","
|
||||
echo " \"port\": 9222,"
|
||||
echo " \"host\": \"$ROOT_HOST\""
|
||||
echo " }"
|
||||
else
|
||||
echo -e "${RED}❌ 无法获取调试地址${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
cmd_log() {
|
||||
# 先看看管理服务能不能返回日志路径
|
||||
local LOG_PATH=$(curl -s "http://$ROOT_HOST:9222/json/version" 2>/dev/null | python3 -c "
|
||||
import sys,json
|
||||
print('ok')
|
||||
" 2>/dev/null)
|
||||
|
||||
if [ $? -ne 0 ] || [ -z "$LOG_PATH" ]; then
|
||||
echo -e "${YELLOW}⚠️ 无法直接访问日志文件${NC}"
|
||||
echo " root 上的日志目录: ~/debug/logs/chromium/"
|
||||
echo " 可以在 root 上用 cat/tail 查看"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 通过 Chromium 的 API 简单确认它在运行
|
||||
echo -e "${YELLOW}📄 日志文件在 root 上: ~/debug/logs/chromium/${NC}"
|
||||
echo -e " 请在 root 终端查看,或使用 ssh root@localhost 'tail -f ~/debug/logs/chromium/chromium-*.log'"
|
||||
}
|
||||
|
||||
# ==================== 主入口 ====================
|
||||
|
||||
case "${1:-help}" in
|
||||
start)
|
||||
cmd_start
|
||||
;;
|
||||
stop)
|
||||
cmd_stop
|
||||
;;
|
||||
restart)
|
||||
cmd_restart
|
||||
;;
|
||||
status)
|
||||
cmd_status
|
||||
;;
|
||||
debug-url|debug_url|url)
|
||||
cmd_debug_url
|
||||
;;
|
||||
log)
|
||||
shift
|
||||
cmd_log "$@"
|
||||
;;
|
||||
help|--help|-h)
|
||||
show_help
|
||||
;;
|
||||
*)
|
||||
echo -e "${RED}未知命令: $1${NC}"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user