split servises
This commit is contained in:
188
setup.sh
188
setup.sh
@@ -88,6 +88,40 @@ download_code() {
|
|||||||
log_info "Текущая ветка: $(git branch --show-current)"
|
log_info "Текущая ветка: $(git branch --show-current)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Функция обновления requirements.txt
|
||||||
|
update_requirements() {
|
||||||
|
local target_dir="/root/RFB"
|
||||||
|
cd $target_dir
|
||||||
|
|
||||||
|
log_info "Обновление requirements.txt..."
|
||||||
|
|
||||||
|
# Создаем или обновляем requirements.txt
|
||||||
|
if [ ! -f "requirements.txt" ]; then
|
||||||
|
log_warn "requirements.txt не найден, создаем новый..."
|
||||||
|
cat > requirements.txt << EOF
|
||||||
|
streamlit>=1.28.0
|
||||||
|
requests>=2.31.0
|
||||||
|
pandas>=2.0.0
|
||||||
|
numpy>=1.24.0
|
||||||
|
plotly>=5.15.0
|
||||||
|
watchdog>=3.0.0
|
||||||
|
pillow>=10.0.0
|
||||||
|
streamlit_autorefresh>=0.1.7
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
# Проверяем, есть ли streamlit_autorefresh в requirements.txt
|
||||||
|
if ! grep -q "streamlit_autorefresh" requirements.txt; then
|
||||||
|
log_info "Добавляем streamlit_autorefresh в requirements.txt..."
|
||||||
|
echo "streamlit_autorefresh>=0.1.7" >> requirements.txt
|
||||||
|
else
|
||||||
|
log_info "streamlit_autorefresh уже есть в requirements.txt"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "Содержимое requirements.txt:"
|
||||||
|
cat requirements.txt
|
||||||
|
}
|
||||||
|
|
||||||
# Функция настройки виртуального окружения
|
# Функция настройки виртуального окружения
|
||||||
setup_venv() {
|
setup_venv() {
|
||||||
local target_dir="/root/RFB"
|
local target_dir="/root/RFB"
|
||||||
@@ -107,16 +141,22 @@ setup_venv() {
|
|||||||
# Обновление pip
|
# Обновление pip
|
||||||
pip install --upgrade pip
|
pip install --upgrade pip
|
||||||
|
|
||||||
|
# Обновляем requirements.txt перед установкой
|
||||||
|
update_requirements
|
||||||
|
|
||||||
if [ -f "requirements.txt" ]; then
|
if [ -f "requirements.txt" ]; then
|
||||||
log_info "Установка зависимостей из requirements.txt..."
|
log_info "Установка зависимостей из requirements.txt..."
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
else
|
else
|
||||||
log_warn "Файл requirements.txt не найден, устанавливаем базовые зависимости..."
|
log_warn "Файл requirements.txt не найден, устанавливаем базовые зависимости..."
|
||||||
pip install streamlit requests pandas numpy plotly
|
pip install streamlit requests pandas numpy plotly watchdog pillow streamlit_autorefresh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Установка дополнительных зависимостей которые могут понадобиться
|
# Дополнительная проверка и установка streamlit_autorefresh на всякий случай
|
||||||
pip install watchdog pillow streamlit_autorefresh
|
if ! python -c "import streamlit_autorefresh" 2>/dev/null; then
|
||||||
|
log_info "Устанавливаем streamlit_autorefresh..."
|
||||||
|
pip install streamlit_autorefresh
|
||||||
|
fi
|
||||||
|
|
||||||
# Проверка установки streamlit
|
# Проверка установки streamlit
|
||||||
if ! [ -f ".venv/bin/streamlit" ]; then
|
if ! [ -f ".venv/bin/streamlit" ]; then
|
||||||
@@ -124,54 +164,74 @@ setup_venv() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
log_info "Проверка установленных пакетов:"
|
||||||
|
python -c "
|
||||||
|
import streamlit, requests, pandas, numpy, plotly, streamlit_autorefresh
|
||||||
|
print('✓ Все основные пакеты успешно импортируются')
|
||||||
|
"
|
||||||
|
|
||||||
log_info "Установленные пакеты:"
|
log_info "Установленные пакеты:"
|
||||||
pip list --format=columns
|
pip list --format=columns | grep -E "(streamlit|requests|pandas|numpy|plotly|autorefresh)"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Функция создания systemd сервиса
|
# Функция создания systemd сервисов
|
||||||
create_systemd_service() {
|
create_systemd_services() {
|
||||||
local team="$1"
|
local team="$1"
|
||||||
local service_file="/etc/systemd/system/rfb-stat.service"
|
|
||||||
|
|
||||||
log_info "Создание systemd сервиса для команды: $team..."
|
log_info "Создание отдельных systemd сервисов..."
|
||||||
|
|
||||||
# Останавливаем сервис если он уже запущен
|
# Останавливаем и отключаем старые сервисы если они есть
|
||||||
if systemctl is-active --quiet rfb-stat.service; then
|
for service in rfb-data.service rfb-visual.service rfb-stat.service; do
|
||||||
log_info "Остановка работающего сервиса..."
|
if systemctl is-active --quiet $service; then
|
||||||
systemctl stop rfb-stat.service
|
log_info "Остановка $service..."
|
||||||
|
systemctl stop $service
|
||||||
fi
|
fi
|
||||||
|
if systemctl is-enabled --quiet $service; then
|
||||||
# Отключаем сервис если он включен
|
log_info "Отключение $service..."
|
||||||
if systemctl is-enabled --quiet rfb-stat.service; then
|
systemctl disable $service
|
||||||
log_info "Отключение сервиса..."
|
|
||||||
systemctl disable rfb-stat.service
|
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
# Создаем запускаемый скрипт для избежания проблем с кавычками
|
# Сервис для data
|
||||||
local startup_script="/root/RFB/start_rfb.sh"
|
local data_service_file="/etc/systemd/system/rfb-data.service"
|
||||||
|
|
||||||
cat > $startup_script << EOF
|
cat > $data_service_file << EOF
|
||||||
#!/bin/bash
|
|
||||||
cd /root/RFB
|
|
||||||
source /root/RFB/.venv/bin/activate
|
|
||||||
python3 get_data.py --team $team &
|
|
||||||
streamlit run visual.py --server.port 8501 --server.address 0.0.0.0
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x $startup_script
|
|
||||||
|
|
||||||
cat > $service_file << EOF
|
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=RFB Stat v.1.0
|
Description=RFB Data Service
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
User=root
|
User=root
|
||||||
WorkingDirectory=/root/RFB
|
WorkingDirectory=/root/RFB
|
||||||
ExecStart=$startup_script
|
Environment=PATH=/root/RFB/.venv/bin
|
||||||
|
ExecStart=/root/RFB/.venv/bin/python3 get_data.py --team $team
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=3
|
RestartSec=10
|
||||||
|
StandardOutput=journal
|
||||||
|
StandardError=journal
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Сервис для visual
|
||||||
|
local visual_service_file="/etc/systemd/system/rfb-visual.service"
|
||||||
|
|
||||||
|
cat > $visual_service_file << EOF
|
||||||
|
[Unit]
|
||||||
|
Description=RFB Visual Service
|
||||||
|
After=network.target
|
||||||
|
Wants=rfb-data.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=root
|
||||||
|
WorkingDirectory=/root/RFB
|
||||||
|
Environment=PATH=/root/RFB/.venv/bin
|
||||||
|
ExecStart=/root/RFB/.venv/bin/streamlit run visual.py --server.port 8501 --server.address 0.0.0.0
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10
|
||||||
StandardOutput=journal
|
StandardOutput=journal
|
||||||
StandardError=journal
|
StandardError=journal
|
||||||
|
|
||||||
@@ -180,13 +240,13 @@ WantedBy=multi-user.target
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Настройка прав
|
# Настройка прав
|
||||||
chmod 644 $service_file
|
chmod 644 $data_service_file $visual_service_file
|
||||||
|
|
||||||
log_info "Перезагрузка systemd демонов..."
|
log_info "Перезагрузка systemd демонов..."
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
|
|
||||||
log_info "Включение сервиса..."
|
log_info "Включение сервисов..."
|
||||||
systemctl enable rfb-stat.service
|
systemctl enable rfb-data.service rfb-visual.service
|
||||||
}
|
}
|
||||||
|
|
||||||
# Функция проверки файлов
|
# Функция проверки файлов
|
||||||
@@ -212,9 +272,6 @@ check_required_files() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
log_info "Все необходимые файлы присутствуют"
|
log_info "Все необходимые файлы присутствуют"
|
||||||
|
|
||||||
# Проверка прав на выполнение
|
|
||||||
chmod +x visual.py get_data.py
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Функция определения IP и команды
|
# Функция определения IP и команды
|
||||||
@@ -299,27 +356,37 @@ check_port() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# Функция управления сервисом
|
# Функция управления сервисами
|
||||||
manage_service() {
|
manage_services() {
|
||||||
local action="$1"
|
local action="$1"
|
||||||
|
|
||||||
case $action in
|
case $action in
|
||||||
"start")
|
"start")
|
||||||
log_info "Запуск сервиса..."
|
log_info "Запуск сервисов..."
|
||||||
systemctl start rfb-stat.service
|
systemctl start rfb-data.service rfb-visual.service
|
||||||
;;
|
;;
|
||||||
"restart")
|
"restart")
|
||||||
log_info "Перезапуск сервиса..."
|
log_info "Перезапуск сервисов..."
|
||||||
systemctl restart rfb-stat.service
|
systemctl restart rfb-data.service rfb-visual.service
|
||||||
;;
|
;;
|
||||||
"stop")
|
"stop")
|
||||||
log_info "Остановка сервиса..."
|
log_info "Остановка сервисов..."
|
||||||
systemctl stop rfb-stat.service
|
systemctl stop rfb-data.service rfb-visual.service
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Даем время сервису на запуск/остановку
|
# Даем время сервисам на запуск/остановку
|
||||||
sleep 2
|
sleep 3
|
||||||
|
}
|
||||||
|
|
||||||
|
# Функция проверки статуса сервисов
|
||||||
|
check_services_status() {
|
||||||
|
log_info "Статус сервисов:"
|
||||||
|
echo "=== RFB Data Service ==="
|
||||||
|
systemctl status rfb-data.service --no-pager
|
||||||
|
echo ""
|
||||||
|
echo "=== RFB Visual Service ==="
|
||||||
|
systemctl status rfb-visual.service --no-pager
|
||||||
}
|
}
|
||||||
|
|
||||||
# Основная функция
|
# Основная функция
|
||||||
@@ -367,18 +434,16 @@ main() {
|
|||||||
# Проверка порта
|
# Проверка порта
|
||||||
check_port
|
check_port
|
||||||
|
|
||||||
# Создание systemd сервиса
|
# Создание systemd сервисов
|
||||||
create_systemd_service "$final_team"
|
create_systemd_services "$final_team"
|
||||||
|
|
||||||
log_info "Настройка завершена!"
|
log_info "Настройка завершена!"
|
||||||
|
|
||||||
# Запуск сервиса
|
# Запуск сервисов
|
||||||
manage_service "start"
|
manage_services "start"
|
||||||
|
|
||||||
# Проверка статуса
|
# Проверка статуса
|
||||||
sleep 3
|
check_services_status
|
||||||
log_info "Статус сервиса:"
|
|
||||||
systemctl status rfb-stat.service --no-pager
|
|
||||||
|
|
||||||
# Получаем IP еще раз для вывода
|
# Получаем IP еще раз для вывода
|
||||||
ip_address=$(ip a 2>/dev/null | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | head -n1)
|
ip_address=$(ip a 2>/dev/null | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | head -n1)
|
||||||
@@ -389,9 +454,14 @@ main() {
|
|||||||
log_info "Команда: $final_team"
|
log_info "Команда: $final_team"
|
||||||
log_info "Режим: $release"
|
log_info "Режим: $release"
|
||||||
log_info ""
|
log_info ""
|
||||||
log_info "Для просмотра логов: journalctl -u rfb-stat.service -f"
|
log_info "Для просмотра логов:"
|
||||||
log_info "Для перезапуска: systemctl restart rfb-stat.service"
|
log_info " Данные: journalctl -u rfb-data.service -f"
|
||||||
log_info "Для остановки: systemctl stop rfb-stat.service"
|
log_info " Визуал: journalctl -u rfb-visual.service -f"
|
||||||
|
log_info ""
|
||||||
|
log_info "Управление сервисами:"
|
||||||
|
log_info " Перезапуск всех: systemctl restart rfb-data.service rfb-visual.service"
|
||||||
|
log_info " Остановка всех: systemctl stop rfb-data.service rfb-visual.service"
|
||||||
|
log_info " Статус: systemctl status rfb-data.service rfb-visual.service"
|
||||||
log_info "=================================================="
|
log_info "=================================================="
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
cd /root/RFB
|
|
||||||
source /root/RFB/.venv/bin/activate
|
|
||||||
python3 get_data.py --team [0;32m[INFO][0m Определен IP адрес: 10.10.35.29
|
|
||||||
[0;32m[INFO][0m Используется автоопределенная команда: Pari_Nizhny_Novgorod
|
|
||||||
Pari_Nizhny_Novgorod &
|
|
||||||
streamlit run visual.py --server.port 8501 --server.address 0.0.0.0
|
|
||||||
Reference in New Issue
Block a user