#!/bin/bash # GoTelegram MTProxy Bot — установка. # curl -sL -H "Authorization: token TOKEN" https://raw.githubusercontent.com/anten-ka/gotelegram_pro/main/install.sh -o /usr/local/bin/gotelegram && chmod +x /usr/local/bin/gotelegram && gotelegram TOKEN set -e RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m' [ "$EUID" -ne 0 ] && { echo -e "${RED}Запустите с sudo.${NC}"; exit 1; } [ -n "$1" ] && export GITHUB_TOKEN="$1" BOT_DIR="/opt/gotelegram-bot" SERVICE_NAME="gotelegram-bot" REPO_RAW="https://raw.githubusercontent.com/anten-ka/gotelegram_pro/main" REPO_GIT="https://github.com/anten-ka/gotelegram_pro.git" echo -e "${GREEN}╔═══════════════════════════════════════════╗${NC}" echo -e "${GREEN}║ GoTelegram MTProxy Bot — установка ║${NC}" echo -e "${GREEN}╚═══════════════════════════════════════════╝${NC}" # ── Зависимости ────────────────────────────────────────────────────────────── install_pkg() { if command -v apt-get &>/dev/null; then apt-get update -qq && apt-get install -y -qq "$@" elif command -v dnf &>/dev/null; then dnf install -y "$@" elif command -v yum &>/dev/null; then yum install -y "$@" fi } for cmd in python3 curl git; do command -v $cmd &>/dev/null || { echo -e "${YELLOW}[*] Установка $cmd...${NC}"; install_pkg $cmd; } done # python3-venv может быть отдельным пакетом python3 -m venv --help &>/dev/null 2>&1 || install_pkg python3-venv 2>/dev/null || true # Docker if ! command -v docker &>/dev/null; then echo -e "${YELLOW}[*] Docker не найден. Устанавливаю...${NC}" curl -fsSL https://get.docker.com | sh systemctl enable --now docker fi # Проверка: Docker запущен? if ! docker info &>/dev/null 2>&1; then systemctl start docker 2>/dev/null || true sleep 2 docker info &>/dev/null 2>&1 || { echo -e "${RED}Docker не запускается. Проверьте вручную: systemctl status docker${NC}" exit 1 } fi # Проверка совместимости: показываем существующие контейнеры EXISTING=$(docker ps --format "{{.Names}}\t{{.Image}}\t{{.Ports}}" 2>/dev/null) if [ -n "$EXISTING" ]; then echo -e "${CYAN}[*] Обнаружены работающие контейнеры:${NC}" echo "$EXISTING" | while IFS= read -r line; do echo " $line"; done echo -e "${GREEN}[*] Бот будет работать параллельно, не затрагивая их.${NC}" fi # ── Файлы бота ─────────────────────────────────────────────────────────────── mkdir -p "$BOT_DIR" download_files() { # Приватный репо: git clone if [ -n "$GITHUB_TOKEN" ]; then echo -e "${GREEN}[*] Клонирование репозитория...${NC}" TMP="/tmp/gotelegram_pro_$$" rm -rf "$TMP" if git clone --depth 1 --branch main "https://${GITHUB_TOKEN}@${REPO_GIT#https://}" "$TMP" 2>/dev/null; then cp -r "$TMP/gotelegram-bot"/* "$BOT_DIR/" rm -rf "$TMP" return 0 fi rm -rf "$TMP" fi # Публичный репо: curl echo -e "${YELLOW}[*] Скачивание файлов...${NC}" local ok=1 for f in bot.py requirements.txt config.example.env; do curl -sL -f "$REPO_RAW/gotelegram-bot/$f" -o "$BOT_DIR/$f" 2>/dev/null || ok=0 done [ "$ok" -eq 1 ] && return 0 return 1 } # Всегда обновляем файлы бота при запуске (чтобы подтягивать обновления) download_files || { echo -e "${RED}Не удалось загрузить файлы бота.${NC}" echo -e " Для приватного репо: ${YELLOW}gotelegram ВАШ_GITHUB_ТОКЕН${NC}" exit 1 } echo -e "${GREEN}[*] Файлы бота обновлены.${NC}" # ── Python venv ────────────────────────────────────────────────────────────── if [ ! -d "$BOT_DIR/venv" ]; then python3 -m venv "$BOT_DIR/venv" fi "$BOT_DIR/venv/bin/pip" install --upgrade pip -q 2>/dev/null "$BOT_DIR/venv/bin/pip" install -r "$BOT_DIR/requirements.txt" -q # ── Конфиг (.env) ──────────────────────────────────────────────────────────── if [ ! -f "$BOT_DIR/.env" ]; then echo "" 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" > "$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:/usr/local/bin [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable "$SERVICE_NAME" 2>/dev/null systemctl restart "$SERVICE_NAME" 2>/dev/null || systemctl start "$SERVICE_NAME" echo "" echo -e "${GREEN}╔═══════════════════════════════════════════╗${NC}" echo -e "${GREEN}║ Установка завершена! ║${NC}" echo -e "${GREEN}╚═══════════════════════════════════════════╝${NC}" echo -e "Бот: systemctl status $SERVICE_NAME" echo -e "Логи: journalctl -u $SERVICE_NAME -f" echo -e "Конфиг: $BOT_DIR/.env" exit 0