108 lines
3.6 KiB
Bash
Executable File
108 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
||
# Скрипт установки systemd сервиса для Telegram CLI Bot
|
||
|
||
set -e
|
||
|
||
BOT_USER="${BOT_USER:-$USER}"
|
||
BOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
BOT_VENV="${BOT_DIR}/venv"
|
||
SERVICE_FILE="${BOT_DIR}/telegram-bot.service"
|
||
SYSTEMD_SERVICE="/etc/systemd/system/telegram-bot.service"
|
||
|
||
echo "🔧 Установка systemd сервиса для Telegram CLI Bot"
|
||
echo "=================================================="
|
||
echo "Пользователь: $BOT_USER"
|
||
echo "Директория: $BOT_DIR"
|
||
echo "Venv: $BOT_VENV"
|
||
echo ""
|
||
|
||
# Проверка что скрипт запущен от root или через sudo
|
||
if [ "$EUID" -ne 0 ]; then
|
||
echo "❌ Запустите скрипт от имени root (sudo ./install-systemd-service.sh)"
|
||
exit 1
|
||
fi
|
||
|
||
# Проверка существования файлов
|
||
if [ ! -f "$BOT_DIR/bot.py" ]; then
|
||
echo "❌ bot.py не найден в $BOT_DIR"
|
||
exit 1
|
||
fi
|
||
|
||
if [ ! -f "$BOT_VENV/bin/python" ]; then
|
||
echo "❌ Venv не найден в $BOT_VENV"
|
||
echo " Запустите: source $BOT_DIR/venv/bin/activate && pip install -r requirements.txt"
|
||
exit 1
|
||
fi
|
||
|
||
if [ ! -f "$BOT_DIR/.env" ]; then
|
||
echo "⚠️ .env файл не найден. Создайте его:"
|
||
echo " cp $BOT_DIR/.env.example $BOT_DIR/.env"
|
||
echo " и отредактируйте переменные окружения"
|
||
exit 1
|
||
fi
|
||
|
||
# Определяем путь к qwen
|
||
QWEN_PATH=$(su - "$BOT_USER" -c "which qwen" 2>/dev/null || echo "")
|
||
if [ -z "$QWEN_PATH" ]; then
|
||
echo "⚠️ qwen не найден. Установите: npm install -g @anthropic/qwen-code"
|
||
fi
|
||
|
||
# Определяем Node.js путь (для nvm)
|
||
NODE_PATH=$(dirname "$(su - "$BOT_USER" -c "which node" 2>/dev/null || echo "")")
|
||
NVM_DIR=$(su - "$BOT_USER" -c "echo \$NVM_DIR" 2>/dev/null || echo "/home/$BOT_USER/.nvm")
|
||
|
||
echo "📝 Создание systemd сервиса..."
|
||
|
||
# Создаём сервис с подстановкой путей
|
||
cat > "$SYSTEMD_SERVICE" << EOF
|
||
[Unit]
|
||
Description=Telegram CLI Bot
|
||
After=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=$BOT_USER
|
||
WorkingDirectory=$BOT_DIR
|
||
Environment="PATH=$BOT_VENV/bin:$NODE_PATH:/usr/local/bin:/usr/bin:/bin"
|
||
Environment="QWEN_CODE_PATH=$BOT_VENV/qwen"
|
||
Environment="NVM_DIR=$NVM_DIR"
|
||
ExecStart=$BOT_VENV/bin/python bot.py
|
||
Restart=always
|
||
RestartSec=10
|
||
StandardOutput=journal
|
||
StandardError=journal
|
||
SyslogIdentifier=telegram-bot
|
||
|
||
# Security hardening с исключениями для работы бота
|
||
NoNewPrivileges=true
|
||
ProtectSystem=strict
|
||
ProtectHome=read-only
|
||
PrivateTmp=true
|
||
ReadWritePaths=$BOT_DIR $NVM_DIR
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
|
||
echo "✅ Сервис установлен в $SYSTEMD_SERVICE"
|
||
|
||
# Перезагружаем systemd и включаем сервис
|
||
echo "🔄 Перезагрузка systemd..."
|
||
systemctl daemon-reload
|
||
|
||
echo "🚀 Включение сервиса..."
|
||
systemctl enable telegram-bot
|
||
|
||
echo ""
|
||
echo "✅ Установка завершена!"
|
||
echo ""
|
||
echo "Управление сервисом:"
|
||
echo " sudo systemctl start telegram-bot - Запустить бота"
|
||
echo " sudo systemctl stop telegram-bot - Остановить бота"
|
||
echo " sudo systemctl restart telegram-bot - Перезапустить бота"
|
||
echo " sudo systemctl status telegram-bot - Проверить статус"
|
||
echo ""
|
||
echo "Просмотр логов:"
|
||
echo " sudo journalctl -u telegram-bot -f - Логи в реальном времени"
|
||
echo " sudo journalctl -u telegram-bot --since today - Логи за сегодня"
|