Files
server-bot-python/install.sh
T

114 lines
3.5 KiB
Bash

#!/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"
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
# Обеспечиваем наличие 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
# Парсинг аргументов
TOKEN=""; USER_ID=""; EXEC_USER=$(logname 2>/dev/null || echo root)
while [[ $# -gt 0 ]]; do
case $1 in
--token) TOKEN="$2"; shift 2 ;;
--user_id) USER_ID="$2"; shift 2 ;;
--user) EXEC_USER="$2"; shift 2 ;;
*) log_error "Неизвестный параметр $1"; exit 1 ;;
esac
done
# Интерактивный запрос, если не передано
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 "Клонирую репозиторий $REPO_URL в $DEPLOY_DIR"
git clone "$REPO_URL" "$DEPLOY_DIR"
else
log_info "Репозиторий уже существует. Обновляю..."
cd "$DEPLOY_DIR"
git pull --rebase
cd -
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
if [[ ! -d "$VENV_DIR" ]]; then
log_info "Создаю venv..."
sudo -u "$EXEC_USER" python3 -m venv "$VENV_DIR"
fi
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"
SERVICE_FILE="/etc/systemd/system/server-bot-python.service"
cat <<EOL > "$SERVICE_FILE"
[Unit]
Description=Server Bot Python
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")
Restart=always
User=$EXEC_USER
[Install]
WantedBy=multi-user.target
EOL
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"