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