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