Добавить mtproto.sh

This commit is contained in:
2026-03-06 18:10:04 +03:00
parent ce14b78bf7
commit 873a1202ee

242
mtproto.sh Normal file
View File

@@ -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" <<EOF
MTPROTO_PORT=$PORT
MTPROTO_SECRET=$SECRET
MTPROTO_TAG=$TAG
EOF
# -----------------------------------------------------------------------------
# Создание docker-compose.yml
# -----------------------------------------------------------------------------
echo "Creating docker-compose.yml"
cat > "$COMPOSE_FILE" <<EOF
services:
mtproto:
image: telegrammessenger/proxy:latest
container_name: mtproto-proxy
restart: unless-stopped
ports:
- "\${MTPROTO_PORT}:443"
environment:
- SECRET=\${MTPROTO_SECRET}
- TAG=\${MTPROTO_TAG}
volumes:
- proxy-data:/data
volumes:
proxy-data:
EOF
# -----------------------------------------------------------------------------
# Запуск контейнера
# -----------------------------------------------------------------------------
echo
echo "Starting proxy..."
cd "$INSTALL_DIR"
docker compose up -d
# -----------------------------------------------------------------------------
# Получение публичного IP сервера
# Используется для формирования ссылки подключения
# -----------------------------------------------------------------------------
IP=$(curl -s ifconfig.me)
# -----------------------------------------------------------------------------
# Финальная информация пользователю
# -----------------------------------------------------------------------------
echo
echo "================================="
echo "MTProto Proxy installed!"
echo
echo "Server: $IP"
echo "Port: $PORT"
echo "Secret: $SECRET"
echo
echo "Connection link:"
echo
echo "tg://proxy?server=$IP&port=$PORT&secret=$SECRET"
echo
echo "Config directory:"
echo "$INSTALL_DIR"
echo "================================="