- 新增完整的 Python 实现,替代 Go 版本 - 添加 Web 登录界面和仪表板 - 实现 JWT 认证和 API 密钥管理 - 添加数据库存储功能 - 保持与 Go 版本一致的目录结构和启动脚本 - 包含完整的文档和测试脚本
154 lines
3.8 KiB
Bash
Executable File
154 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Gitea Webhook Ambassador Python 启动脚本
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
SERVICE_NAME="gitea-webhook-ambassador-python"
|
|
LOG_FILE="$SCRIPT_DIR/logs/service.log"
|
|
PID_FILE="$SCRIPT_DIR/service.pid"
|
|
|
|
# 创建日志目录
|
|
mkdir -p "$SCRIPT_DIR/logs"
|
|
|
|
# 激活虚拟环境
|
|
source "$SCRIPT_DIR/venv/bin/activate"
|
|
|
|
# 函数:启动服务
|
|
start_service() {
|
|
echo "🚀 启动 $SERVICE_NAME..."
|
|
|
|
if [ -f "$PID_FILE" ]; then
|
|
PID=$(cat "$PID_FILE")
|
|
if ps -p $PID > /dev/null 2>&1; then
|
|
echo "❌ 服务已在运行 (PID: $PID)"
|
|
return 1
|
|
else
|
|
echo "⚠️ 发现过期的 PID 文件,正在清理..."
|
|
rm -f "$PID_FILE"
|
|
fi
|
|
fi
|
|
|
|
# 后台启动服务
|
|
nohup python -m uvicorn app.main_demo:app --host 0.0.0.0 --port 8000 > "$LOG_FILE" 2>&1 &
|
|
PID=$!
|
|
echo $PID > "$PID_FILE"
|
|
|
|
# 等待服务启动
|
|
sleep 3
|
|
|
|
if ps -p $PID > /dev/null 2>&1; then
|
|
echo "✅ 服务启动成功 (PID: $PID)"
|
|
echo "📝 日志文件: $LOG_FILE"
|
|
echo "🌐 访问地址: http://localhost:8000"
|
|
echo "🔑 演示密钥: demo_admin_key, demo_user_key"
|
|
else
|
|
echo "❌ 服务启动失败"
|
|
rm -f "$PID_FILE"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# 函数:停止服务
|
|
stop_service() {
|
|
echo "🛑 停止 $SERVICE_NAME..."
|
|
|
|
if [ -f "$PID_FILE" ]; then
|
|
PID=$(cat "$PID_FILE")
|
|
if ps -p $PID > /dev/null 2>&1; then
|
|
kill $PID
|
|
echo "✅ 服务已停止 (PID: $PID)"
|
|
else
|
|
echo "⚠️ 服务未运行"
|
|
fi
|
|
rm -f "$PID_FILE"
|
|
else
|
|
echo "⚠️ PID 文件不存在"
|
|
fi
|
|
}
|
|
|
|
# 函数:重启服务
|
|
restart_service() {
|
|
echo "🔄 重启 $SERVICE_NAME..."
|
|
stop_service
|
|
sleep 2
|
|
start_service
|
|
}
|
|
|
|
# 函数:查看状态
|
|
status_service() {
|
|
if [ -f "$PID_FILE" ]; then
|
|
PID=$(cat "$PID_FILE")
|
|
if ps -p $PID > /dev/null 2>&1; then
|
|
echo "✅ $SERVICE_NAME 正在运行 (PID: $PID)"
|
|
echo "📝 日志文件: $LOG_FILE"
|
|
echo "🌐 访问地址: http://localhost:8000"
|
|
else
|
|
echo "❌ $SERVICE_NAME 未运行 (PID 文件存在但进程不存在)"
|
|
rm -f "$PID_FILE"
|
|
fi
|
|
else
|
|
echo "❌ $SERVICE_NAME 未运行"
|
|
fi
|
|
}
|
|
|
|
# 函数:查看日志
|
|
show_logs() {
|
|
if [ -f "$LOG_FILE" ]; then
|
|
echo "📝 显示最新日志 (最后 50 行):"
|
|
echo "----------------------------------------"
|
|
tail -n 50 "$LOG_FILE"
|
|
echo "----------------------------------------"
|
|
echo "完整日志文件: $LOG_FILE"
|
|
else
|
|
echo "❌ 日志文件不存在"
|
|
fi
|
|
}
|
|
|
|
# 函数:实时日志
|
|
follow_logs() {
|
|
if [ -f "$LOG_FILE" ]; then
|
|
echo "📝 实时日志 (按 Ctrl+C 退出):"
|
|
tail -f "$LOG_FILE"
|
|
else
|
|
echo "❌ 日志文件不存在"
|
|
fi
|
|
}
|
|
|
|
# 主逻辑
|
|
case "$1" in
|
|
start)
|
|
start_service
|
|
;;
|
|
stop)
|
|
stop_service
|
|
;;
|
|
restart)
|
|
restart_service
|
|
;;
|
|
status)
|
|
status_service
|
|
;;
|
|
logs)
|
|
show_logs
|
|
;;
|
|
follow)
|
|
follow_logs
|
|
;;
|
|
*)
|
|
echo "用法: $0 {start|stop|restart|status|logs|follow}"
|
|
echo ""
|
|
echo "命令说明:"
|
|
echo " start - 启动服务"
|
|
echo " stop - 停止服务"
|
|
echo " restart - 重启服务"
|
|
echo " status - 查看服务状态"
|
|
echo " logs - 查看最新日志"
|
|
echo " follow - 实时查看日志"
|
|
echo ""
|
|
echo "示例:"
|
|
echo " $0 start # 启动服务"
|
|
echo " $0 status # 查看状态"
|
|
echo " $0 logs # 查看日志"
|
|
exit 1
|
|
;;
|
|
esac |