Files
Scripts/mtproto.sh
2026-03-06 18:29:17 +03:00

251 lines
10 KiB
Bash
Raw Permalink 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.
#!/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 8443): " PORT
# Если переменная пустая — подставляем значение по умолчанию
PORT=${PORT:-8443}
# -----------------------------------------------------------------------------
# Если установлен UFW — открываем порт
# -----------------------------------------------------------------------------
if command -v ufw >/dev/null 2>&1; then
echo "Opening port $PORT in UFW firewall..."
ufw allow "$PORT"/tcp comment "MTPROTO-TCP" || true
ufw allow "$PORT"/udp comment "MTPROTO-UDP" || true
fi
# -----------------------------------------------------------------------------
# Запрос 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 "================================="