mirror of
https://github.com/anten-ka/gotelegram_pro.git
synced 2026-05-19 14:36:05 +00:00
GoTelegram MTProxy + bot (gotelegram_pro)
Made-with: Cursor
This commit is contained in:
139
install_gotelegram_bot.sh
Normal file
139
install_gotelegram_bot.sh
Normal file
@@ -0,0 +1,139 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user