mirror of
https://github.com/anten-ka/gotelegram_pro.git
synced 2026-05-19 14:26:02 +00:00
151 lines
6.6 KiB
Bash
151 lines
6.6 KiB
Bash
#!/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
|