freeleaps-ops/apps/gitea-webhook-ambassador-python/start.sh
Nicolas f6c515157c feat: 添加 Python 版本的 Gitea Webhook Ambassador
- 新增完整的 Python 实现,替代 Go 版本
- 添加 Web 登录界面和仪表板
- 实现 JWT 认证和 API 密钥管理
- 添加数据库存储功能
- 保持与 Go 版本一致的目录结构和启动脚本
- 包含完整的文档和测试脚本
2025-07-20 21:17:10 +08:00

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