mirror of
https://github.com/anten-ka/gotelegram_pro.git
synced 2026-05-19 18:26:07 +00:00
install.sh в формате kaskad, INSTALL_LINK, готовая однострочная установка
Made-with: Cursor
This commit is contained in:
80
INSTALL_LINK.md
Normal file
80
INSTALL_LINK.md
Normal file
@@ -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 на сервере. Для разовой установки это допустимо; после установки можно отозвать токен или использовать токен с коротким сроком жизни.
|
||||||
|
- Не публикуйте готовую команду с реальным токеном в открытый доступ (сайт, чат, репо). Делитесь ею только с тем, кому доверяете установку на сервер.
|
||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
Инструкция для размещения проекта в **приватном** репозитории и установки на сервер **по SSH-ключу** или **по токену (PAT)**.
|
Инструкция для размещения проекта в **приватном** репозитории и установки на сервер **по SSH-ключу** или **по токену (PAT)**.
|
||||||
|
|
||||||
|
**Установка одной командой с ключом («ключ в ссылке»):** см. **[INSTALL_LINK.md](INSTALL_LINK.md)** — одна строка с подставленным токеном для копирования в терминал.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 1. Размещение в закрытом репозитории
|
## 1. Размещение в закрытом репозитории
|
||||||
|
|||||||
117
install.sh
Normal file
117
install.sh
Normal file
@@ -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
|
||||||
22
install_by_key.sh
Normal file
22
install_by_key.sh
Normal file
@@ -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"
|
||||||
4
install_one_liner.txt
Normal file
4
install_one_liner.txt
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user