diff --git a/setup.sh b/setup.sh index 1e951a4..66914db 100755 --- a/setup.sh +++ b/setup.sh @@ -37,7 +37,7 @@ install_packages() { apt-get update log_info "Установка необходимых пакетов..." - apt-get install -y python3 python3-pip python3-venv git systemd + apt-get install -y python3 python3-pip python3-venv git systemd net-tools # Проверка установки if ! command -v python3 &> /dev/null; then @@ -58,20 +58,21 @@ install_packages() { download_code() { local repo_url="https://git.tvstart.ru/ychernenko/RFB.git" local release="$1" - local target_dir="/opt/RFB" + local target_dir="/root/RFB" log_info "Создание рабочей директории $target_dir..." mkdir -p $target_dir - cd $target_dir - if [ -d ".git" ]; then + if [ -d "$target_dir/.git" ]; then log_info "Обновление существующего репозитория..." + cd $target_dir git fetch --all git checkout $release git pull origin $release else log_info "Клонирование репозитория $repo_url..." - git clone $repo_url . + git clone $repo_url $target_dir + cd $target_dir git checkout $release fi @@ -89,7 +90,7 @@ download_code() { # Функция настройки виртуального окружения setup_venv() { - local target_dir="/opt/RFB" + local target_dir="/root/RFB" cd $target_dir log_info "Создание виртуального окружения..." @@ -103,6 +104,9 @@ setup_venv() { log_info "Активация виртуального окружения и установка зависимостей..." source .venv/bin/activate + # Обновление pip + pip install --upgrade pip + if [ -f "requirements.txt" ]; then log_info "Установка зависимостей из requirements.txt..." pip install -r requirements.txt @@ -121,7 +125,7 @@ setup_venv() { fi log_info "Установленные пакеты:" - pip list + pip list --format=columns } # Функция создания systemd сервиса @@ -131,6 +135,31 @@ create_systemd_service() { log_info "Создание systemd сервиса для команды: $team..." + # Останавливаем сервис если он уже запущен + if systemctl is-active --quiet rfb-stat.service; then + log_info "Остановка работающего сервиса..." + systemctl stop rfb-stat.service + fi + + # Отключаем сервис если он включен + if systemctl is-enabled --quiet rfb-stat.service; then + log_info "Отключение сервиса..." + systemctl disable rfb-stat.service + fi + + # Создаем запускаемый скрипт для избежания проблем с кавычками + local startup_script="/root/RFB/start_rfb.sh" + + cat > $startup_script << 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] Description=RFB Stat v.1.0 @@ -139,9 +168,8 @@ After=network.target [Service] Type=simple User=root -WorkingDirectory=/opt/RFB -Environment=PATH=/opt/RFB/.venv/bin -ExecStart=/bin/bash -c 'cd /opt/RFB && source /opt/RFB/.venv/bin/activate && python3 get_data.py --team "$team" & streamlit run visual.py --server.port 8501 --server.address 0.0.0.0' +WorkingDirectory=/root/RFB +ExecStart=$startup_script Restart=always RestartSec=3 StandardOutput=journal @@ -154,7 +182,7 @@ EOF # Настройка прав chmod 644 $service_file - log_info "Перезагрузка systemd..." + log_info "Перезагрузка systemd демонов..." systemctl daemon-reload log_info "Включение сервиса..." @@ -163,7 +191,7 @@ EOF # Функция проверки файлов check_required_files() { - local target_dir="/opt/RFB" + local target_dir="/root/RFB" cd $target_dir local missing_files=() @@ -260,13 +288,40 @@ setup_firewall() { # Функция проверки порта check_port() { local port=8501 - if netstat -tuln | grep ":$port " > /dev/null; then + if command -v netstat &> /dev/null && netstat -tuln | grep ":$port " > /dev/null; then + log_warn "Порт $port уже занят. Возможно, приложение уже запущено." + return 1 + fi + if command -v ss &> /dev/null && ss -tuln | grep ":$port " > /dev/null; then log_warn "Порт $port уже занят. Возможно, приложение уже запущено." return 1 fi return 0 } +# Функция управления сервисом +manage_service() { + local action="$1" + + case $action in + "start") + log_info "Запуск сервиса..." + systemctl start rfb-stat.service + ;; + "restart") + log_info "Перезапуск сервиса..." + systemctl restart rfb-stat.service + ;; + "stop") + log_info "Остановка сервиса..." + systemctl stop rfb-stat.service + ;; + esac + + # Даем время сервису на запуск/остановку + sleep 2 +} + # Основная функция main() { local team="" @@ -316,17 +371,21 @@ main() { create_systemd_service "$final_team" log_info "Настройка завершена!" - log_info "Запуск сервиса..." - systemctl start rfb-stat.service + + # Запуск сервиса + manage_service "start" # Проверка статуса sleep 3 log_info "Статус сервиса:" systemctl status rfb-stat.service --no-pager + # Получаем 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) + log_info "==================================================" log_info "Установка завершена успешно!" - log_info "Приложение должно быть доступно по адресу: http://$ip_address:8501" + log_info "Приложение должно быть доступно по адресу: http://${ip_address}:8501" log_info "Команда: $final_team" log_info "Режим: $release" log_info "" diff --git a/start_rfb.sh b/start_rfb.sh new file mode 100755 index 0000000..5baa611 --- /dev/null +++ b/start_rfb.sh @@ -0,0 +1,7 @@ +#!/bin/bash +cd /root/RFB +source /root/RFB/.venv/bin/activate +python3 get_data.py --team [INFO] Определен IP адрес: 10.10.35.29 +[INFO] Используется автоопределенная команда: Pari_Nizhny_Novgorod +Pari_Nizhny_Novgorod & +streamlit run visual.py --server.port 8501 --server.address 0.0.0.0 diff --git a/visual.py b/visual.py old mode 100644 new mode 100755