Files
gotelegram_pro/install_gotelegram_bot.sh
anten-ka 29b6e05866 GoTelegram MTProxy + bot (gotelegram_pro)
Made-with: Cursor
2026-03-06 14:59:00 +03:00

140 lines
5.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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