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

220 lines
5.6 KiB
Bash
Executable File

#!/bin/bash
# Gitea Webhook Ambassador (Python) - Devbox Script
# This script mimics the Go version's devbox functionality
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
APP_NAME="gitea-webhook-ambassador"
PID_FILE="$SCRIPT_DIR/service.pid"
LOG_FILE="$SCRIPT_DIR/logs/service.log"
# Create logs directory
mkdir -p "$SCRIPT_DIR/logs"
# Function to show usage
show_usage() {
echo "Usage: $0 {start|stop|restart|status|logs|follow|init|install|help}"
echo ""
echo "Commands:"
echo " start - Start the service in background"
echo " stop - Stop the service"
echo " restart - Restart the service"
echo " status - Show service status"
echo " logs - Show latest logs"
echo " follow - Follow logs in real-time"
echo " init - Initialize database"
echo " install - Install dependencies"
echo " help - Show this help message"
echo ""
echo "Examples:"
echo " $0 start # Start service"
echo " $0 status # Check status"
echo " $0 logs # View logs"
}
# Function to check if virtual environment exists
check_venv() {
if [ ! -d "$SCRIPT_DIR/venv" ]; then
echo "❌ Virtual environment not found. Run '$0 install' first."
exit 1
fi
}
# Function to activate virtual environment
activate_venv() {
source "$SCRIPT_DIR/venv/bin/activate"
}
# Function to start service
start_service() {
echo "🚀 Starting $APP_NAME (Python Version)..."
echo "🐍 Version: Python Enhanced with Web UI"
check_venv
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p $PID > /dev/null 2>&1; then
echo "❌ Service is already running (PID: $PID)"
return 1
else
echo "⚠️ Found stale PID file, cleaning up..."
rm -f "$PID_FILE"
fi
fi
# Activate virtual environment and start service
cd "$SCRIPT_DIR"
activate_venv
# Start the service in background
nohup python -m uvicorn app.main_enhanced:app --host 0.0.0.0 --port 8000 > "$LOG_FILE" 2>&1 &
PID=$!
echo $PID > "$PID_FILE"
# Wait a moment for service to start
sleep 3
if ps -p $PID > /dev/null 2>&1; then
echo "✅ Python Service started successfully (PID: $PID)"
echo "📝 Log file: $LOG_FILE"
echo "🌐 Access: http://localhost:8000"
echo "📊 Dashboard: http://localhost:8000/dashboard"
echo "🔑 Admin key: admin-secret-key-change-in-production"
echo "🐍 Python Version Features: Web UI, Database, JWT Auth"
else
echo "❌ Service failed to start"
rm -f "$PID_FILE"
return 1
fi
}
# Function to stop service
stop_service() {
echo "🛑 Stopping $APP_NAME..."
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p $PID > /dev/null 2>&1; then
kill $PID
echo "✅ Service stopped (PID: $PID)"
else
echo "⚠️ Service not running"
fi
rm -f "$PID_FILE"
else
echo "⚠️ No PID file found"
fi
}
# Function to restart service
restart_service() {
echo "🔄 Restarting $APP_NAME..."
stop_service
sleep 2
start_service
}
# Function to show status
show_status() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p $PID > /dev/null 2>&1; then
echo "$APP_NAME (Python Version) is running (PID: $PID)"
echo "🐍 Version: Python Enhanced with Web UI"
echo "📝 Log file: $LOG_FILE"
echo "🌐 Access: http://localhost:8000"
echo "📊 Dashboard: http://localhost:8000/dashboard"
else
echo "$APP_NAME is not running (PID file exists but process not found)"
rm -f "$PID_FILE"
fi
else
echo "$APP_NAME is not running"
fi
}
# Function to show logs
show_logs() {
if [ -f "$LOG_FILE" ]; then
echo "📝 Latest logs (last 50 lines):"
echo "----------------------------------------"
tail -n 50 "$LOG_FILE"
echo "----------------------------------------"
echo "Full log file: $LOG_FILE"
else
echo "❌ No log file found"
fi
}
# Function to follow logs
follow_logs() {
if [ -f "$LOG_FILE" ]; then
echo "📝 Following logs (Ctrl+C to exit):"
tail -f "$LOG_FILE"
else
echo "❌ No log file found"
fi
}
# Function to initialize database
init_database() {
echo "🗄️ Initializing database..."
check_venv
cd "$SCRIPT_DIR"
activate_venv
python -c "from app.models.database import create_tables; create_tables(); print('Database initialized successfully')"
}
# Function to install dependencies
install_dependencies() {
echo "📦 Installing dependencies..."
cd "$SCRIPT_DIR"
if [ -d "venv" ]; then
echo "⚠️ Virtual environment already exists. Removing..."
rm -rf venv
fi
python3 -m venv venv
activate_venv
pip install -r requirements.txt
echo "✅ Dependencies installed successfully"
}
# Main logic
case "$1" in
start)
start_service
;;
stop)
stop_service
;;
restart)
restart_service
;;
status)
show_status
;;
logs)
show_logs
;;
follow)
follow_logs
;;
init)
init_database
;;
install)
install_dependencies
;;
help|--help|-h)
show_usage
;;
*)
echo "❌ Unknown command: $1"
echo ""
show_usage
exit 1
;;
esac