102 lines
3.1 KiB
Bash
102 lines
3.1 KiB
Bash
#!/bin/bash
|
|
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; }
|
|
|
|
is_valid_token() {
|
|
[[ "$1" =~ ^[0-9]+:[a-zA-Z0-9_-]{35,}$ ]]
|
|
}
|
|
|
|
# ... (блоки установки git/python/venv, см. предыдущий вариант) ...
|
|
|
|
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
|
|
|
|
# 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"
|
|
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 '$TOKEN' --user_id '$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
|
|
|
|
# ---------- КОНТРОЛЬ СТАРТА -----------
|
|
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" |