Добавить mtproto.sh
This commit is contained in:
242
mtproto.sh
Normal file
242
mtproto.sh
Normal 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 "================================="
|
||||
Reference in New Issue
Block a user