Files
gotelegram_pro/install.sh

151 lines
6.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 — установка.
# 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