diff --git a/mtproto.sh b/mtproto.sh new file mode 100644 index 0000000..d7730ce --- /dev/null +++ b/mtproto.sh @@ -0,0 +1,242 @@ +#!/usr/bin/env bash + +# ----------------------------------------------------------------------------- +# Включает режим немедленного завершения скрипта при любой ошибке. +# Это предотвращает ситуацию, когда одна из команд не выполнилась, +# но скрипт продолжил работу и создал некорректную конфигурацию. +# ----------------------------------------------------------------------------- +set -e + + +# ----------------------------------------------------------------------------- +# Директория установки MTProto Proxy. +# Здесь будут храниться: +# - docker-compose.yml +# - .env +# При необходимости путь можно изменить. +# ----------------------------------------------------------------------------- +INSTALL_DIR="/opt/mtproto" + + +# ----------------------------------------------------------------------------- +# Заголовок установщика +# ----------------------------------------------------------------------------- +echo "=== MTProto Proxy Installer ===" + + +# ----------------------------------------------------------------------------- +# Проверка запуска от root. +# Установка Docker, обновление системы и работа с /opt требуют root прав. +# Если скрипт запущен обычным пользователем — завершаем выполнение. +# ----------------------------------------------------------------------------- +if [ "$EUID" -ne 0 ]; then + echo "Run script as root" + exit 1 +fi + + +# ----------------------------------------------------------------------------- +# Запрос порта для MTProto Proxy. +# Если пользователь просто нажмёт Enter — будет использован порт 443. +# ----------------------------------------------------------------------------- +echo +read -p "Enter MTProto port (default 443): " PORT + +# Если переменная пустая — подставляем значение по умолчанию +PORT=${PORT:-443} + + +# ----------------------------------------------------------------------------- +# Запрос TAG. +# TAG используется для Telegram Ads / статистики прокси. +# Он необязательный, поэтому можно просто нажать Enter. +# ----------------------------------------------------------------------------- +echo +read -p "Enter TAG (optional, press enter to skip): " TAG + + +# ----------------------------------------------------------------------------- +# Генерация SECRET ключа. +# SECRET — это основной ключ доступа к MTProto Proxy. +# Генерируется 16 байт случайных данных (32 hex символа). +# ----------------------------------------------------------------------------- +SECRET=$(openssl rand -hex 16) + + +# ----------------------------------------------------------------------------- +# Вывод сгенерированного секретного ключа пользователю +# ----------------------------------------------------------------------------- +echo +echo "Generated SECRET:" +echo "$SECRET" +echo + + +# ----------------------------------------------------------------------------- +# Обновление системы. +# Это рекомендуется делать перед установкой Docker, +# чтобы избежать проблем с зависимостями. +# ----------------------------------------------------------------------------- +echo "Updating system..." + +apt update +apt upgrade -y + + +# ----------------------------------------------------------------------------- +# Проверяем установлен ли Docker. +# command -v docker возвращает путь к бинарнику если он существует. +# Если Docker не найден — запускается процедура установки. +# ----------------------------------------------------------------------------- +if ! command -v docker >/dev/null 2>&1; then + + echo "Installing Docker..." + + # --------------------------------------------------------------------------- + # Установка необходимых пакетов + # --------------------------------------------------------------------------- + apt install -y ca-certificates curl gnupg + + + # --------------------------------------------------------------------------- + # Создание директории для хранения GPG ключей репозиториев + # --------------------------------------------------------------------------- + install -m 0755 -d /etc/apt/keyrings + + + # --------------------------------------------------------------------------- + # Добавление официального GPG ключа Docker + # --------------------------------------------------------------------------- + curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ + | gpg --dearmor -o /etc/apt/keyrings/docker.gpg + + + # --------------------------------------------------------------------------- + # Разрешение чтения ключа системой + # --------------------------------------------------------------------------- + chmod a+r /etc/apt/keyrings/docker.gpg + + + # --------------------------------------------------------------------------- + # Добавление официального Docker репозитория в систему + # VERSION_CODENAME автоматически определяет версию Ubuntu + # --------------------------------------------------------------------------- + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ + $(. /etc/os-release && echo $VERSION_CODENAME) stable" \ + > /etc/apt/sources.list.d/docker.list + + + # --------------------------------------------------------------------------- + # Обновление списка пакетов после добавления репозитория + # --------------------------------------------------------------------------- + apt update + + + # --------------------------------------------------------------------------- + # Установка Docker Engine и Docker Compose plugin + # --------------------------------------------------------------------------- + apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + + + # --------------------------------------------------------------------------- + # Включаем автозапуск Docker при старте системы + # --------------------------------------------------------------------------- + systemctl enable docker + + # Запускаем Docker сразу + systemctl start docker +fi + + +# ----------------------------------------------------------------------------- +# Создание директории установки MTProto +# ----------------------------------------------------------------------------- +echo "Creating directory $INSTALL_DIR" + +mkdir -p "$INSTALL_DIR" + + +# ----------------------------------------------------------------------------- +# Пути к создаваемым конфигурационным файлам +# ----------------------------------------------------------------------------- +ENV_FILE="$INSTALL_DIR/.env" +COMPOSE_FILE="$INSTALL_DIR/docker-compose.yml" + + +# ----------------------------------------------------------------------------- +# Создание файла .env +# Этот файл хранит переменные окружения для Docker Compose +# ----------------------------------------------------------------------------- +echo "Creating .env" + +cat > "$ENV_FILE" < "$COMPOSE_FILE" <