Spaces:
Running
Running
set -e | |
echo "🚀 Запуск Security Tools MCP Collection..." | |
# Функция для ожидания запуска сервиса | |
wait_for_service() { | |
local port=$1 | |
local service_name=$2 | |
local max_attempts=30 | |
local attempt=1 | |
echo "⏳ Ожидание запуска $service_name на порту $port..." | |
while [ $attempt -le $max_attempts ]; do | |
if curl -f http://localhost:$port/health 2>/dev/null || curl -f http://localhost:$port 2>/dev/null; then | |
echo "✅ $service_name запущен на порту $port" | |
return 0 | |
fi | |
echo " Попытка $attempt/$max_attempts для $service_name..." | |
sleep 2 | |
attempt=$((attempt + 1)) | |
done | |
echo "❌ Не удалось дождаться запуска $service_name" | |
return 1 | |
} | |
# Экспортируем переменные окружения для MCP серверов | |
export GRADIO_SERVER_NAME=${GRADIO_SERVER_NAME:-0.0.0.0} | |
# Запускаем Bandit MCP сервер в фоне | |
echo "🔒 Запуск Bandit Security Scanner..." | |
export GRADIO_SERVER_PORT=7861 | |
python bandit_mcp.py & | |
BANDIT_PID=$! | |
# Запускаем Detect Secrets MCP сервер в фоне | |
echo "🔍 Запуск Detect Secrets Scanner..." | |
export GRADIO_SERVER_PORT=7862 | |
python detect_secrets_mcp.py & | |
DETECT_SECRETS_PID=$! | |
# Запускаем Pip Audit MCP сервер в фоне | |
echo "🛡️ Запуск Pip Audit Scanner..." | |
export GRADIO_SERVER_PORT=7863 | |
python pip_audit_mcp.py & | |
PIP_AUDIT_PID=$! | |
# Запускаем Circle Test MCP сервер в фоне | |
echo "📋 Запуск Circle Test Scanner..." | |
export GRADIO_SERVER_PORT=7864 | |
python circle_test_mcp.py & | |
CIRCLE_TEST_PID=$! | |
# Запускаем Semgrep MCP сервер в фоне | |
echo "🔍 Запуск Semgrep Scanner..." | |
export GRADIO_SERVER_PORT=7865 | |
python semgrep_mcp.py & | |
SEMGREP_PID=$! | |
# Даем серверам время на запуск | |
echo "⏳ Ожидание запуска всех MCP серверов..." | |
sleep 10 | |
# Проверяем что все серверы запустились | |
wait_for_service 7861 "Bandit" | |
wait_for_service 7862 "Detect Secrets" | |
wait_for_service 7863 "Pip Audit" | |
wait_for_service 7864 "Circle Test" | |
wait_for_service 7865 "Semgrep" | |
# Функция для корректного завершения всех процессов | |
cleanup() { | |
echo "🛑 Завершение всех сервисов..." | |
kill $BANDIT_PID $DETECT_SECRETS_PID $PIP_AUDIT_PID $CIRCLE_TEST_PID $SEMGREP_PID 2>/dev/null || true | |
wait $BANDIT_PID $DETECT_SECRETS_PID $PIP_AUDIT_PID $CIRCLE_TEST_PID $SEMGREP_PID 2>/dev/null || true | |
echo "✅ Все сервисы завершены" | |
} | |
# Регистрируем обработчик сигналов | |
trap cleanup SIGTERM SIGINT | |
# Запускаем главный агент на порту 7860 | |
echo "🎯 Запуск главного Security Tools Agent..." | |
export GRADIO_SERVER_PORT=7860 | |
python main.py | |
# Если main.py завершился, останавливаем все остальные сервисы | |
cleanup |