diff --git a/install-systemd-service.sh b/install-systemd-service.sh index 61e7fdb..a2ab9ab 100755 --- a/install-systemd-service.sh +++ b/install-systemd-service.sh @@ -41,12 +41,48 @@ if [ ! -f "$BOT_DIR/.env" ]; then exit 1 fi -# Создаём systemd сервис из шаблона +# Определяем путь к 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 сервиса..." -sed -e "s|%USER%|$BOT_USER|g" \ - -e "s|%WORKDIR%|$BOT_DIR|g" \ - -e "s|%VENV_PATH%|$BOT_VENV/bin|g" \ - "$SERVICE_FILE" > "$SYSTEMD_SERVICE" + +# Создаём сервис с подстановкой путей +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" diff --git a/telegram-bot.service b/telegram-bot.service index a91adf6..b2208e0 100644 --- a/telegram-bot.service +++ b/telegram-bot.service @@ -6,7 +6,9 @@ After=network.target Type=simple User=%USER% WorkingDirectory=%WORKDIR% -Environment="PATH=%VENV_PATH%" +Environment="PATH=%VENV_PATH%:/home/%USER%/.config/nvm/versions/node/v24.13.1/bin:/usr/local/bin:/usr/bin:/bin" +Environment="QWEN_CODE_PATH=%VENV_PATH%/qwen" +Environment="NVM_DIR=/home/%USER%/.nvm" ExecStart=%VENV_PATH%/python bot.py Restart=always RestartSec=10 @@ -19,7 +21,7 @@ NoNewPrivileges=true ProtectSystem=strict ProtectHome=read-only PrivateTmp=true -ReadWritePaths=%WORKDIR% +ReadWritePaths=%WORKDIR% %HOME%/.npm-global %HOME%/.nvm %HOME%/.config/nvm [Install] WantedBy=multi-user.target