From 54bdf6b0d5f8d0d248c809378653bfd33567e66c Mon Sep 17 00:00:00 2001 From: anten-ka Date: Fri, 6 Mar 2026 15:11:39 +0300 Subject: [PATCH] =?UTF-8?q?install.sh=20=D0=B2=20=D1=84=D0=BE=D1=80=D0=BC?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=20kaskad,=20INSTALL=5FLINK,=20=D0=B3=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=D0=B0=D1=8F=20=D0=BE=D0=B4=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D1=87=D0=BD=D0=B0=D1=8F=20=D1=83=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- INSTALL_LINK.md | 80 +++++++++++++++++++++++++++++ INSTALL_PRIVATE.md | 2 + install.sh | 117 ++++++++++++++++++++++++++++++++++++++++++ install_by_key.sh | 22 ++++++++ install_one_liner.txt | 4 ++ 5 files changed, 225 insertions(+) create mode 100644 INSTALL_LINK.md create mode 100644 install.sh create mode 100644 install_by_key.sh create mode 100644 install_one_liner.txt diff --git a/INSTALL_LINK.md b/INSTALL_LINK.md new file mode 100644 index 0000000..2264eba --- /dev/null +++ b/INSTALL_LINK.md @@ -0,0 +1,80 @@ +# Установка по ссылке (ключ в команде) + +Чтобы клиент или вы могли ставить бота **одной командой**, в неё подставляется ключ (GitHub Personal Access Token). «Ссылка» = эта одна строка, которую копируют и вставляют в терминал сервера. + +--- + +## 1. Одна команда с ключом (готовый шаблон) + +Подставьте свой **GITHUB_TOKEN** (один раз) в команду ниже и сохраните получившуюся строку. Её можно: +- отправить клиенту (пусть вставит в SSH-сессию и запустит); +- сохранить у себя как «ссылку для установки». + +**Шаблон (замените `ghp_ВАШ_ТОКЕН` на свой токен):** + +```bash +GITHUB_TOKEN=ghp_ВАШ_ТОКЕН bash -c 'git clone --depth 1 "https://${GITHUB_TOKEN}@github.com/anten-ka/gotelegram_pro.git" /tmp/gp && sudo -E /tmp/gp/install_gotelegram_bot.sh' +``` + +**Важно:** переменная `GITHUB_TOKEN` задаётся перед `bash -c`, поэтому во внутренней команде `${GITHUB_TOKEN}` подставится на сервере при выполнении. Токен попадёт в `git clone` и в установочный скрипт. + +--- + +## 2. Через скрипт из репозитория (то же самое, но через raw-ссылку) + +Если репозиторий **публичный**, можно дать такую «ссылку» (подставьте свой токен): + +```bash +GITHUB_TOKEN=ghp_ВАШ_ТОКЕН curl -sL https://raw.githubusercontent.com/anten-ka/gotelegram_pro/main/install_by_key.sh | sudo -E bash +``` + +Если репо **приватный**, raw-файл без доступа не откроется, поэтому используйте вариант 1 выше (клонирование по токену в одной команде). + +--- + +## 3. Короткая «ссылка» через публичный Gist (приватный репо) + +Чтобы команда была короче и не светить репо, можно выложить **только** маленький скрипт установки в публичный Gist. Тогда «установка по ссылке» = одна команда с ключом, а скрипт берётся по публичной ссылке. + +### Шаг 1: создать Gist + +1. Перейдите на https://gist.github.com +2. Создайте новый Gist (публичный). +3. Имя файла: `install_gotelegram_pro.sh` +4. Вставьте содержимое (подставьте свой репо, если другой): + +```bash +#!/bin/bash +set -e +T="${GITHUB_TOKEN:?Задайте GITHUB_TOKEN}" +R="https://${T}@github.com/anten-ka/gotelegram_pro.git" +D="/tmp/gp_$$" +trap "rm -rf $D" EXIT +git clone --depth 1 --branch main "$R" "$D" +sudo -E "$D/install_gotelegram_bot.sh" +``` + +5. Нажмите **Create public gist** и скопируйте **Raw**-ссылку на файл (например `https://gist.githubusercontent.com/USER/ID/raw/xxx/install_gotelegram_pro.sh`). + +### Шаг 2: «ссылка» для установки + +Вы даёте клиенту одну команду (вместо `ghp_ВАШ_ТОКЕН` — свой токен, вместо `ССЫЛКА_НА_RAW_GIST` — ссылку из шага 1): + +```bash +GITHUB_TOKEN=ghp_ВАШ_ТОКЕН curl -sL ССЫЛКА_НА_RAW_GIST | sudo -E bash +``` + +Пример: + +```bash +GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx curl -sL https://gist.githubusercontent.com/anten-ka/xxxxxxxx/raw/xxx/install_gotelegram_pro.sh | sudo -E bash +``` + +Клиент только копирует эту строку, вставляет в терминал сервера и запускает — установка идёт по ключу из команды. + +--- + +## 4. Безопасность + +- Токен в команде виден в истории shell на сервере. Для разовой установки это допустимо; после установки можно отозвать токен или использовать токен с коротким сроком жизни. +- Не публикуйте готовую команду с реальным токеном в открытый доступ (сайт, чат, репо). Делитесь ею только с тем, кому доверяете установку на сервер. diff --git a/INSTALL_PRIVATE.md b/INSTALL_PRIVATE.md index e54ccde..ebdf7ff 100644 --- a/INSTALL_PRIVATE.md +++ b/INSTALL_PRIVATE.md @@ -2,6 +2,8 @@ Инструкция для размещения проекта в **приватном** репозитории и установки на сервер **по SSH-ключу** или **по токену (PAT)**. +**Установка одной командой с ключом («ключ в ссылке»):** см. **[INSTALL_LINK.md](INSTALL_LINK.md)** — одна строка с подставленным токеном для копирования в терминал. + --- ## 1. Размещение в закрытом репозитории diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..5660875 --- /dev/null +++ b/install.sh @@ -0,0 +1,117 @@ +#!/bin/bash +# Установка GoTelegram MTProxy Bot. +# Формат как kaskad: 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 && systemctl restart gotelegram-bot 2>/dev/null; GITHUB_TOKEN=TOKEN gotelegram + +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_RAW="${GOTETELEGRAM_REPO_RAW:-https://raw.githubusercontent.com/anten-ka/gotelegram_pro/main}" + +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 curl + elif command -v dnf &>/dev/null; then + dnf install -y python3 python3-pip python3-virtualenv curl 2>/dev/null || dnf install -y python3 python3-pip curl + elif command -v yum &>/dev/null; then + yum install -y python3 python3-pip curl + else + echo -e "${RED}Установите python3 и curl.${NC}" + exit 1 + fi +fi +if ! command -v docker &>/dev/null; then + echo -e "${YELLOW}[!] Docker не найден. Нужен для /install в боте.${NC}" +fi + +mkdir -p "$BOT_DIR" +cd "$BOT_DIR" + +# Скачивание файлов бота по raw URL (с токеном для приватного репо) +fetch_file() { + local f="$1" + if [ -n "$GITHUB_TOKEN" ]; then + curl -sL -f -H "Authorization: token $GITHUB_TOKEN" "$REPO_RAW/gotelegram-bot/$f" -o "$BOT_DIR/$f" 2>/dev/null && return 0 + fi + curl -sL -f "$REPO_RAW/gotelegram-bot/$f" -o "$BOT_DIR/$f" 2>/dev/null && return 0 + return 1 +} + +if [ ! -f "$BOT_DIR/bot.py" ]; then + echo -e "${GREEN}[*] Загрузка файлов из репозитория...${NC}" + OK=1 + for f in bot.py requirements.txt config.example.env; do + fetch_file "$f" || { OK=0; break; } + done + if [ "$OK" -eq 0 ] && [ -n "$GITHUB_TOKEN" ] && command -v git &>/dev/null; then + echo -e "${GREEN}[*] Клонирование по токену...${NC}" + TMP="/tmp/gotelegram_pro_$$" + git clone --depth 1 --branch main "https://${GITHUB_TOKEN}@github.com/anten-ka/gotelegram_pro.git" "$TMP" 2>/dev/null && { + cp -r "$TMP/gotelegram-bot"/* "$BOT_DIR/" + rm -rf "$TMP" + } + fi + if [ ! -f "$BOT_DIR/bot.py" ]; then + echo -e "${RED}Не удалось загрузить файлы. Для приватного репо: GITHUB_TOKEN=токен gotelegram${NC}" + 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" > "$BOT_DIR/.env" + [ -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}" +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" +exit 0 diff --git a/install_by_key.sh b/install_by_key.sh new file mode 100644 index 0000000..ca16caa --- /dev/null +++ b/install_by_key.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Установка по ключу «в ссылке»: одна команда с токеном. +# Вариант 1 — подставьте свой GITHUB_TOKEN в команду и дайте её клиенту: +# GITHUB_TOKEN=ghp_ВАШ_ТОКЕН bash -c 'curl -sL https://raw.githubusercontent.com/anten-ka/gotelegram_pro/main/install_by_key.sh | sudo -E bash' +# Вариант 2 — если этот файл выложен в публичный Gist, «ссылка» будет короче (см. INSTALL_LINK.md). + +set -e +REPO="${GOTETELEGRAM_REPO:-https://github.com/anten-ka/gotelegram_pro.git}" +BRANCH="${GIT_BRANCH:-main}" +DIR="/tmp/gotelegram_pro_$$" +trap "rm -rf $DIR" EXIT + +if [ -z "$GITHUB_TOKEN" ]; then + echo "Задайте GITHUB_TOKEN. Пример:" + echo " GITHUB_TOKEN=ghp_xxx curl -sL ВАША_ССЫЛКА | sudo -E bash" + exit 1 +fi + +echo "[*] Клонирование репозитория..." +git clone --depth 1 --branch "$BRANCH" "https://${GITHUB_TOKEN}@${REPO#https://}" "$DIR" +echo "[*] Запуск установки..." +exec sudo -E "$DIR/install_gotelegram_bot.sh" diff --git a/install_one_liner.txt b/install_one_liner.txt new file mode 100644 index 0000000..324b8f1 --- /dev/null +++ b/install_one_liner.txt @@ -0,0 +1,4 @@ +# Готовая ссылка в формате kaskad +# Замените YOUR_GITHUB_TOKEN на свой токен (https://github.com/settings/tokens, право repo) + +curl -sL -H "Authorization: token YOUR_GITHUB_TOKEN" https://raw.githubusercontent.com/anten-ka/gotelegram_pro/main/install.sh -o /usr/local/bin/gotelegram && chmod +x /usr/local/bin/gotelegram && systemctl restart gotelegram-bot 2>/dev/null; GITHUB_TOKEN=YOUR_GITHUB_TOKEN gotelegram