diff --git a/install.sh b/install.sh index 98a3947..e19a36f 100644 --- a/install.sh +++ b/install.sh @@ -2,7 +2,6 @@ # Пример использования: ./install.sh --token --user_id [--user ] set -euo pipefail - REPO_URL="https://gitea.creative-tg1.ru/CREATIVE_tg1/server-bot-python.git" DEPLOY_DIR="/opt/server-bot-python" VENV_DIR="$DEPLOY_DIR/venv" @@ -11,50 +10,36 @@ GREEN='\033[0;32m'; RED='\033[0;31m'; NC='\033[0m' log_info() { echo -e "${GREEN}[INFO] $*${NC}"; } log_error() { echo -e "${RED}[ERROR] $*${NC}" >&2; } -# Проверка на root для установки пакетов и копирования файлов if [ "$EUID" -ne 0 ]; then - log_error "Пожалуйста, запустите этот скрипт с sudo или от root" + log_error "Запусти скрипт через sudo или от root!" exit 1 fi -# Проверка наличия git (для клонирования) -if ! command -v git >/dev/null 2>&1; then - log_info "git не найден. Устанавливаю..." - if [ -f /etc/debian_version ]; then - apt update && apt install -y git - elif [ -f /etc/redhat-release ]; then - yum install -y git - else - log_error "Неизвестная ОС. Установите git вручную." - exit 1 +# Обеспечиваем наличие git/python/venv +for PKG in git python3; do + if ! command -v $PKG >/dev/null 2>&1; then + log_info "Устанавливаю $PKG..." + if [ -f /etc/debian_version ]; then + apt update && apt install -y $PKG + elif [ -f /etc/redhat-release ]; then + yum install -y $PKG + else + log_error "Неизвестная ОС!"; exit 1 + fi fi -fi - -# Проверка и установка python3, pip и venv (можно оптимизировать как раньше) -if ! command -v python3 >/dev/null 2>&1; then - log_info "Python3 не найден. Устанавливаю..." - if [ -f /etc/debian_version ]; then - apt update && apt install -y python3 - elif [ -f /etc/redhat-release ]; then - yum install -y python3 - else - log_error "Неизвестная ОС. Установите python3 вручную."; exit 1 - fi -fi - +done if ! python3 -m pip --version >/dev/null 2>&1; then - log_info "pip не найден. Устанавливаю..." + log_info "Устанавливаю pip..." curl -sS https://bootstrap.pypa.io/get-pip.py | python3 fi - if ! python3 -m venv --help >/dev/null 2>&1; then - log_info "venv не найден. Устанавливаю..." + log_info "Устанавливаю python3-venv..." if [ -f /etc/debian_version ]; then apt update && apt install -y python3-venv elif [ -f /etc/redhat-release ]; then yum install -y python3-venv else - log_error "Неизвестная ОС. Установите python3-venv вручную."; exit 1 + log_error "Неизвестная ОС!"; exit 1 fi fi @@ -69,17 +54,22 @@ while [[ $# -gt 0 ]]; do esac done -if [[ -z "$TOKEN" ]]; then read -p "Введите TOKEN: " TOKEN; fi -if [[ -z "$USER_ID" ]]; then read -p "Введите USER_ID: " USER_ID; fi +# Интерактивный запрос, если не передано +if [[ -z "$TOKEN" ]]; then + read -erp "Введите TOKEN: " TOKEN +fi +if [[ -z "$USER_ID" ]]; then + read -erp "Введите USER_ID: " USER_ID +fi -# Клонирование репозитория (или обновление) +# Клонирование или обновление репозитория if [ ! -d "$DEPLOY_DIR/.git" ]; then - log_info "Клонирование репозитория в $DEPLOY_DIR" + log_info "Клонирую репозиторий $REPO_URL в $DEPLOY_DIR" git clone "$REPO_URL" "$DEPLOY_DIR" else - log_info "Репозиторий уже существует. Обновляем..." + log_info "Репозиторий уже существует. Обновляю..." cd "$DEPLOY_DIR" - git pull + git pull --rebase cd - fi @@ -89,9 +79,8 @@ if [[ ! -f "$DEPLOY_DIR/requirements.txt" ]]; then log_error "Файл requirements.txt не найден в $DEPLOY_DIR!"; exit 1 fi -# Создание виртуального окружения if [[ ! -d "$VENV_DIR" ]]; then - log_info "Создаю виртуальное окружение Python..." + log_info "Создаю venv..." sudo -u "$EXEC_USER" python3 -m venv "$VENV_DIR" fi @@ -99,7 +88,6 @@ log_info "Устанавливаю зависимости Python..." sudo -u "$EXEC_USER" "$VENV_DIR/bin/pip" install --upgrade pip sudo -u "$EXEC_USER" "$VENV_DIR/bin/pip" install -r "$DEPLOY_DIR/requirements.txt" -# systemd unit SERVICE_FILE="/etc/systemd/system/server-bot-python.service" cat < "$SERVICE_FILE" [Unit] @@ -109,7 +97,7 @@ After=network.target [Service] Type=simple WorkingDirectory=$DEPLOY_DIR -ExecStart=$VENV_DIR/bin/python $DEPLOY_DIR/src/main.py --token $(printf '%q' "$TOKEN") --user_id $(printf '%q' "$USER_ID") +ExecStart=$VENV_DIR/bin/python -m src.main --token $(printf '%q' "$TOKEN") --user_id $(printf '%q' "$USER_ID") Restart=always User=$EXEC_USER @@ -117,11 +105,10 @@ User=$EXEC_USER WantedBy=multi-user.target EOL -log_info "Перезапуск systemd-сервиса..." - +log_info "Обновляю и запускаю systemd unit..." systemctl daemon-reload systemctl enable server-bot-python.service systemctl restart server-bot-python.service -log_info "Деплой и запуск завершены." -echo "Логи сервиса: journalctl -u server-bot-python -f" \ No newline at end of file +log_info "Успешно! Проверяй логи сервиса:" +echo "journalctl -u server-bot-python -f" \ No newline at end of file