#!/bin/bash # Установка GoTelegram MTProxy Bot (по образцу gokaskad). # Запуск: curl -sL URL/install_gotelegram_bot.sh -o /tmp/install_gotelegram_bot.sh && sudo bash /tmp/install_gotelegram_bot.sh # Или с токеном GitHub (приватный репо): curl -sL -H "Authorization: token YOUR_GITHUB_TOKEN" URL -o /tmp/install_gotelegram_bot.sh && sudo bash /tmp/install_gotelegram_bot.sh set -e RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' if [ "$EUID" -ne 0 ]; then echo -e "${RED}Запустите скрипт с sudo.${NC}" exit 1 fi BOT_DIR="/opt/gotelegram-bot" SERVICE_NAME="gotelegram-bot" REPO_URL="${GOTETELEGRAM_BOT_REPO:-https://github.com/anten-ka/gotelegram_pro}" # Для приватного репо задайте GITHUB_TOKEN перед запуском или в одной команде: # GITHUB_TOKEN=ghp_xxx curl -sL -H "Authorization: token $GITHUB_TOKEN" ... echo -e "${GREEN}[*] Установка GoTelegram Bot...${NC}" # Зависимости if ! command -v python3 &>/dev/null; then if command -v apt-get &>/dev/null; then apt-get update && apt-get install -y python3 python3-pip python3-venv elif command -v dnf &>/dev/null; then dnf install -y python3 python3-pip python3-virtualenv 2>/dev/null || dnf install -y python3 python3-pip elif command -v yum &>/dev/null; then yum install -y python3 python3-pip else echo -e "${RED}Установите python3 вручную.${NC}" exit 1 fi fi if ! command -v docker &>/dev/null; then echo -e "${YELLOW}[!] Docker не найден. Установите Docker для работы /install.${NC}" fi # Каталог бота mkdir -p "$BOT_DIR" cd "$BOT_DIR" # Откуда брать файлы: локальная папка (клонированный репо) или скачивание SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" if [ -f "$SCRIPT_DIR/gotelegram-bot/bot.py" ]; then echo -e "${GREEN}[*] Копирование файлов из $SCRIPT_DIR/gotelegram-bot${NC}" cp -r "$SCRIPT_DIR/gotelegram-bot"/* "$BOT_DIR/" else # Приватный репо: клонируем по токену (raw URL с токеном для приватного не работает) if [ -n "$GITHUB_TOKEN" ] && command -v git &>/dev/null; then echo -e "${GREEN}[*] Клонирование приватного репозитория (HTTPS + токен)...${NC}" CLONE_DIR="/tmp/gotelegram_pro_fetch_$$" trap "rm -rf '$CLONE_DIR'" EXIT REPO_PATH="${REPO_URL#https://}" REPO_PATH="${REPO_PATH#http://}" git clone --depth 1 --branch "${GIT_BRANCH:-main}" "https://${GITHUB_TOKEN}@${REPO_PATH}" "$CLONE_DIR" 2>/dev/null || { echo -e "${RED}Клонирование не удалось. Проверьте GITHUB_TOKEN и доступ к репо.${NC}" exit 1 } if [ -f "$CLONE_DIR/gotelegram-bot/bot.py" ]; then cp -r "$CLONE_DIR/gotelegram-bot"/* "$BOT_DIR/" fi rm -rf "$CLONE_DIR" trap - EXIT fi # Если файлов всё ещё нет — пробуем raw (только для публичного репо) if [ ! -f "$BOT_DIR/bot.py" ]; then echo -e "${YELLOW}[*] Скачивание файлов из репозитория (публичный доступ)...${NC}" for f in bot.py requirements.txt config.example.env; do if [ -n "$GITHUB_TOKEN" ]; then curl -sL -f -H "Authorization: token $GITHUB_TOKEN" \ "$REPO_URL/raw/main/gotelegram-bot/$f" -o "$BOT_DIR/$f" 2>/dev/null || true fi [ ! -f "$BOT_DIR/$f" ] && curl -sL -f "$REPO_URL/raw/main/gotelegram-bot/$f" -o "$BOT_DIR/$f" 2>/dev/null || true done fi if [ ! -f "$BOT_DIR/bot.py" ]; then echo -e "${RED}Не удалось получить файлы бота.${NC}" echo -e " Для приватного репо: задайте GITHUB_TOKEN и убедитесь, что установлен git." echo -e " Или клонируйте репо вручную и запустите: sudo ./install_gotelegram_bot.sh" exit 1 fi fi # venv и зависимости if [ ! -d "$BOT_DIR/venv" ]; then python3 -m venv "$BOT_DIR/venv" fi "$BOT_DIR/venv/bin/pip" install -r "$BOT_DIR/requirements.txt" -q # Конфиг if [ ! -f "$BOT_DIR/.env" ]; then echo -e "${YELLOW}Введите BOT_TOKEN от @BotFather:${NC}" TOKEN="" while [ -z "$TOKEN" ]; do read -r TOKEN TOKEN=$(echo "$TOKEN" | tr -d '[:space:]') [ -z "$TOKEN" ] && echo -e "${RED}Токен не может быть пустым. Повторите:${NC}" done { echo "BOT_TOKEN=$TOKEN" [ -f "$BOT_DIR/config.example.env" ] && grep -v "^BOT_TOKEN=" "$BOT_DIR/config.example.env" | grep -v "^#" } > "$BOT_DIR/.env" chmod 600 "$BOT_DIR/.env" echo -e "${GREEN}[*] .env создан.${NC}" else echo -e "${GREEN}[*] .env уже есть.${NC}" fi # systemd cat > "/etc/systemd/system/${SERVICE_NAME}.service" << EOF [Unit] Description=GoTelegram MTProxy Bot After=network.target docker.service [Service] Type=simple WorkingDirectory=$BOT_DIR ExecStart=$BOT_DIR/venv/bin/python $BOT_DIR/bot.py Restart=always RestartSec=5 Environment=PATH=$BOT_DIR/venv/bin:/usr/bin [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable "$SERVICE_NAME" systemctl restart "$SERVICE_NAME" 2>/dev/null || systemctl start "$SERVICE_NAME" echo -e "${GREEN}[*] Сервис $SERVICE_NAME установлен и запущен.${NC}" echo -e "Проверка: systemctl status $SERVICE_NAME" echo -e "Логи: journalctl -u $SERVICE_NAME -f" echo -e "Настройки: $BOT_DIR/.env (BOT_TOKEN, ALLOWED_IDS)" exit 0