Улучшен скрипт установки: добавлена проверка формата TELEGRAM токена, улучшена обработка ошибок, удалены проверки на наличие пакетов, добавлено логирование состояния сервиса после запуска.
This commit is contained in:
+27
-39
@@ -1,7 +1,6 @@
|
||||
#!/bin/bash
|
||||
# Пример использования: ./install.sh --token <TOKEN> --user_id <USER_ID> [--user <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"
|
||||
@@ -10,40 +9,12 @@ 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; }
|
||||
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
log_error "Запусти скрипт через sudo или от root!"
|
||||
exit 1
|
||||
fi
|
||||
is_valid_token() {
|
||||
[[ "$1" =~ ^[0-9]+:[a-zA-Z0-9_-]{35,}$ ]]
|
||||
}
|
||||
|
||||
# Обеспечиваем наличие 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
|
||||
done
|
||||
if ! python3 -m pip --version >/dev/null 2>&1; then
|
||||
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 "Устанавливаю 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 "Неизвестная ОС!"; exit 1
|
||||
fi
|
||||
fi
|
||||
# ... (блоки установки git/python/venv, см. предыдущий вариант) ...
|
||||
|
||||
# Парсинг аргументов
|
||||
TOKEN=""; USER_ID=""; EXEC_USER=$(logname 2>/dev/null || echo root)
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
@@ -54,7 +25,6 @@ while [[ $# -gt 0 ]]; do
|
||||
esac
|
||||
done
|
||||
|
||||
# Интерактивный запрос, если не передано
|
||||
if [[ -z "$TOKEN" ]]; then
|
||||
read -erp "Введите TOKEN: " TOKEN
|
||||
fi
|
||||
@@ -62,7 +32,15 @@ if [[ -z "$USER_ID" ]]; then
|
||||
read -erp "Введите USER_ID: " USER_ID
|
||||
fi
|
||||
|
||||
# Клонирование или обновление репозитория
|
||||
# Trim spaces
|
||||
TOKEN="$(echo -n "$TOKEN" | tr -d '[:space:]')"
|
||||
|
||||
if ! is_valid_token "$TOKEN"; then
|
||||
log_error "НЕКОРРЕКТНЫЙ ФОРМАТ TELEGRAM Токена! Получено: '$TOKEN'"
|
||||
log_error "Он должен быть похож на 123456789:ABCdefghijKLMNOPQRSTUVWXYZ1234567890abc"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ ! -d "$DEPLOY_DIR/.git" ]; then
|
||||
log_info "Клонирую репозиторий $REPO_URL в $DEPLOY_DIR"
|
||||
git clone "$REPO_URL" "$DEPLOY_DIR"
|
||||
@@ -74,7 +52,6 @@ else
|
||||
fi
|
||||
|
||||
chown -R "$EXEC_USER":"$EXEC_USER" "$DEPLOY_DIR"
|
||||
|
||||
if [[ ! -f "$DEPLOY_DIR/requirements.txt" ]]; then
|
||||
log_error "Файл requirements.txt не найден в $DEPLOY_DIR!"; exit 1
|
||||
fi
|
||||
@@ -97,7 +74,7 @@ After=network.target
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=$DEPLOY_DIR
|
||||
ExecStart=$VENV_DIR/bin/python -m src.main --token $(printf '%q' "$TOKEN") --user_id $(printf '%q' "$USER_ID")
|
||||
ExecStart=$VENV_DIR/bin/python -m src.main --token '$TOKEN' --user_id '$USER_ID'
|
||||
Restart=always
|
||||
User=$EXEC_USER
|
||||
|
||||
@@ -110,5 +87,16 @@ systemctl daemon-reload
|
||||
systemctl enable server-bot-python.service
|
||||
systemctl restart server-bot-python.service
|
||||
|
||||
log_info "Успешно! Проверяй логи сервиса:"
|
||||
# ---------- КОНТРОЛЬ СТАРТА -----------
|
||||
sleep 2
|
||||
status_out=$(systemctl is-active server-bot-python.service)
|
||||
if [ "$status_out" = "active" ]; then
|
||||
log_info "Сервис успешно запустился!"
|
||||
else
|
||||
log_error "Сервис после запуска не в состоянии 'active'. Вот последние строки лога:"
|
||||
journalctl -u server-bot-python.service --no-pager -n 20 | tee /dev/stderr
|
||||
exit 10
|
||||
fi
|
||||
|
||||
log_info "Успешно! Логи сервиса:"
|
||||
echo "journalctl -u server-bot-python -f"
|
||||
Reference in New Issue
Block a user