From c6af4d3cdcc0cc69fe6b3b83adc5790ebca5ea37 Mon Sep 17 00:00:00 2001 From: CREATIVE_tg1 Date: Mon, 20 Apr 2026 23:57:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD=20?= =?UTF-8?q?=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20=D1=83=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BA=D0=B8:=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D1=86=D0=B2=D0=B5=D1=82=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B4=D0=BB=D1=8F=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F,=20=D1=83=D0=BB=D1=83?= =?UTF-8?q?=D1=87=D1=88=D0=B5=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D0=B0=20=D0=BD=D0=B0=D0=BB=D0=B8=D1=87=D0=B8=D1=8F?= =?UTF-8?q?=20git,=20python3,=20pip=20=D0=B8=20venv,=20=D1=83=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D1=8B=20=D0=BF=D1=80=D0=B8=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=D0=B5=D0=B3=D0=B8=D0=B8=20sudo=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B5?= =?UTF-8?q?,=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=80=D0=B5=D0=BF=D0=BE=D0=B7=D0=B8=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.sh | 87 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 50 insertions(+), 37 deletions(-) diff --git a/install.sh b/install.sh index f96adfb..98a3947 100644 --- a/install.sh +++ b/install.sh @@ -3,21 +3,40 @@ set -euo pipefail -# Цветной вывод для ошибок и инфо -RED='\033[0;31m' -GREEN='\033[0;32m' -NC='\033[0m' # No Color +REPO_URL="https://gitea.creative-tg1.ru/CREATIVE_tg1/server-bot-python.git" +DEPLOY_DIR="/opt/server-bot-python" +VENV_DIR="$DEPLOY_DIR/venv" +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; } -# Проверка и установка python3, pip и venv +# Проверка на root для установки пакетов и копирования файлов +if [ "$EUID" -ne 0 ]; then + 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 + fi +fi + +# Проверка и установка python3, pip и venv (можно оптимизировать как раньше) if ! command -v python3 >/dev/null 2>&1; then log_info "Python3 не найден. Устанавливаю..." if [ -f /etc/debian_version ]; then - sudo apt update && sudo apt install -y python3 + apt update && apt install -y python3 elif [ -f /etc/redhat-release ]; then - sudo yum install -y python3 + yum install -y python3 else log_error "Неизвестная ОС. Установите python3 вручную."; exit 1 fi @@ -25,22 +44,22 @@ fi if ! python3 -m pip --version >/dev/null 2>&1; then log_info "pip не найден. Устанавливаю..." - curl -sS https://bootstrap.pypa.io/get-pip.py | sudo python3 + curl -sS https://bootstrap.pypa.io/get-pip.py | python3 fi if ! python3 -m venv --help >/dev/null 2>&1; then log_info "venv не найден. Устанавливаю..." if [ -f /etc/debian_version ]; then - sudo apt update && sudo apt install -y python3-venv + apt update && apt install -y python3-venv elif [ -f /etc/redhat-release ]; then - sudo yum install -y python3-venv + yum install -y python3-venv else log_error "Неизвестная ОС. Установите python3-venv вручную."; exit 1 fi fi # Парсинг аргументов -TOKEN=""; USER_ID=""; EXEC_USER="$(whoami)" +TOKEN=""; USER_ID=""; EXEC_USER=$(logname 2>/dev/null || echo root) while [[ $# -gt 0 ]]; do case $1 in --token) TOKEN="$2"; shift 2 ;; @@ -50,45 +69,39 @@ 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 +if [[ -z "$TOKEN" ]]; then read -p "Введите TOKEN: " TOKEN; fi +if [[ -z "$USER_ID" ]]; then read -p "Введите USER_ID: " USER_ID; fi + +# Клонирование репозитория (или обновление) +if [ ! -d "$DEPLOY_DIR/.git" ]; then + log_info "Клонирование репозитория в $DEPLOY_DIR" + git clone "$REPO_URL" "$DEPLOY_DIR" +else + log_info "Репозиторий уже существует. Обновляем..." + cd "$DEPLOY_DIR" + git pull + cd - fi -# DEPLOY_DIR -DEPLOY_DIR="/opt/server-bot-python" -VENV_DIR="$DEPLOY_DIR/venv" +chown -R "$EXEC_USER":"$EXEC_USER" "$DEPLOY_DIR" -sudo mkdir -p "$DEPLOY_DIR" -# Устанавливаем владельца. Предполагаем, что EXEC_USER уже существует -sudo chown -R "$EXEC_USER":"$EXEC_USER" "$DEPLOY_DIR" - -# Исключаем копирование мусора -rsync -a --exclude='.git' --exclude='__pycache__' ./ "$DEPLOY_DIR"/ - -# requirements.txt check if [[ ! -f "$DEPLOY_DIR/requirements.txt" ]]; then log_error "Файл requirements.txt не найден в $DEPLOY_DIR!"; exit 1 fi -# Создание виртуального окружения под EXEC_USER, если не существует +# Создание виртуального окружения if [[ ! -d "$VENV_DIR" ]]; then log_info "Создаю виртуальное окружение Python..." sudo -u "$EXEC_USER" python3 -m venv "$VENV_DIR" fi -# Установка зависимостей под EXEC_USER 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-файл +# systemd unit SERVICE_FILE="/etc/systemd/system/server-bot-python.service" - -cat < /dev/null +cat < "$SERVICE_FILE" [Unit] Description=Server Bot Python After=network.target @@ -106,9 +119,9 @@ EOL log_info "Перезапуск systemd-сервиса..." -sudo systemctl daemon-reload -sudo systemctl enable server-bot-python.service -sudo systemctl restart server-bot-python.service +systemctl daemon-reload +systemctl enable server-bot-python.service +systemctl restart server-bot-python.service log_info "Деплой и запуск завершены." -echo "Логи сервиса: sudo journalctl -u server-bot-python -f" \ No newline at end of file +echo "Логи сервиса: journalctl -u server-bot-python -f" \ No newline at end of file