Konstantin GARSHENIN
@AntenkaAI_bot посмотри скрипт. Я тебе больше доверяю))
#!//bin/bash
set -e
echo "=== Автоматизированное развёртывание: веб‑сайт + MTProto‑прокси (TeleMT) + 3‑x‑ui ==="
# Запрашиваем данные у пользователя
read -p "Введите основной домен (например, example.com): " MAIN_DOMAIN
read -p "Введите поддомен для веб‑сайта (по умолчанию www.$MAIN_DOMAIN): " WEB_SUBDOMAIN
WEB_SUBDOMAIN=${WEB_SUBDOMAIN:-www.$MAIN_DOMAIN}
read -p "Введите поддомен для Telegram‑прокси MTProto (по умолчанию tg.$MAIN_DOMAIN): " TG_SUBDOMAIN
TG_SUBDOMAIN=${TG_SUBDOMAIN:-tg.$MAIN_DOMAIN}
read -p "Введите поддомен для 3‑x‑ui (по умолчанию proxy.$MAIN_DOMAIN): " PROXY_SUBDOMAIN
PROXY_SUBDOMAIN=${PROXY_SUBDOMAIN:-proxy.$MAIN_DOMAIN}
read -p "Введите публичный IP‑адрес сервера: " SERVER_IP
# Порты по умолчанию
WEB_PORT=8443
TG_PORT=10443
PROXY_PORT=4443
NGINX_STREAM_PORT=443
echo "Используемые поддомены: $WEB_SUBDOMAIN, $TG_SUBDOMAIN, $PROXY_SUBDOMAIN"
echo "IP‑адрес сервера: $SERVER_IP"
# Функция для проверки прав root
check_root() {
if [[ $EUID -ne 0 ]]; then
echo "Ошибка: запустите скрипт с правами root (sudo)."
exit 1
fi
}
# Обновление системы и установка базовых пакетов
install_base_packages() {
apt update && apt upgrade -y
apt install -y curl wget git ufw certbot nginx
}
# Настройка фаервола
configure_firewall() {
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow $NGINX_STREAM_PORT/tcp
ufw --force enable
}
# Получение SSL‑сертификатов Let's Encrypt
obtain_certificates() {
mkdir -p /var/www/html
systemctl start nginx
certbot certonly --webroot -w /var/www/html \
-d $WEB_SUBDOMAIN -d $TG_SUBDOMAIN -d $PROXY_SUBDOMAIN \
--agree-tos --email admin@$MAIN_DOMAIN --non-interactive
}
# Создание структуры для Nginx Stream
setup_nginx_stream() {
mkdir -p /etc/nginx/stream-available /etc/nginx/stream-enabled
# Добавляем include в nginx.conf, если его нет
if ! grep -q "include /etc/nginx/stream-enabled/\*.conf" /etc/nginx/nginx.conf; then
sed -i '/http {/a \ include /etc/nginx/stream-enabled/*.conf;' /etc/nginx/nginx.conf
fi
}
# Конфигурация Nginx Stream для SNI‑роутинга
configure_nginx_stream() {
cat > /etc/nginx/stream-available/sni_router.conf << EOF
stream {
map \$ssl_preread_server_name \$backend {
hostnames;
$WEB_SUBDOMAIN web_backend;
$TG_SUBDOMAIN telegram_backend;
$PROXY_SUBDOMAIN xray_backend;
default web_backend;
}
upstream web_backend {
server 127.0.0.1:$WEB_PORT;
}
upstream telegram_backend {
server 127.0.0.1:$TG_PORT;
}
upstream xray_backend {
server 127.0.0.1:$PROXY_PORT;
}
server {
listen $NGINX_STREAM_PORT reuseport;
listen [::]:$NGINX_STREAM_PORT reuseport;
proxy_pass \$backend;
ssl_preread on;
}
}
EOF
ln -sf /etc/nginx/stream-available/sni_router.conf /etc/nginx/stream-enabled/
}
# Установка и настройка веб‑сайта
setup_web_server() {
mkdir -p /var/www/$MAIN_DOMAIN
echo "<h1>Welcome to $MAIN_DOMAIN</h1>" > /var/www/$MAIN_DOMAIN/index.html
cat > /etc/nginx/sites-available/$MAIN_DOMAIN << EOF
server {
listen 127.0.0.1:$WEB_PORT ssl http2;
server_name $WEB_SUBDOMAIN;
ssl_certificate /etc/letsencrypt/live/$MAIN_DOMAIN/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$MAIN_DOMAIN/privkey.pem;
root /var/www/$MAIN_DOMAIN;
index index.html;
location / {
try_files \$uri \$uri/ =404;
}
}
EOF
ln -sf /etc/nginx/sites-available/$MAIN_DOMAIN /etc/nginx/sites-enabled/
}
# Установка и настройка TeleMT для MTProto
install_telemt() {
wget https://github.com/telemt/telemt/releases/download/v3.0.0/telemt-linux-x86_64.tar.gz
tar -xzf telemt-linux-x86_64.tar.gz
mv telemt /usr/local/bin/
chmod +x /usr/local/bin/telemt
mkdir -p /etc/telemt /etc/telemt/certs
cp /etc/letsencrypt/live/$MAIN_DOMAIN/fullchain.pem /etc/telemt/certs/
cp /etc/letsencrypt/live/$MAIN_DOMAIN/privkey.pem /etc/telemt/certs/
# Генерация секретного ключа MTProto
MT_SECRET=$(openssl rand -hex 16)
echo "Сгенерирован секретный ключ MTProto: $MT_SECRET"
echo "Сохраните его для настройки клиентов!"
cat > /etc/telemt/config.toml << EOF
[general]
use_middle_proxy = false
[server]
port = $TG_PORT
[[server.listeners]]
ip = "127.0.0.1"
[general.modes]
tls = true
mtproto = true
[censorship]
tls_domain = "$TG_SUBDOMAIN"
mask = false
[access.users]
mtproto_user = "$MT_SECRET"
[server.tls]
cert_file = "/etc/telemt/certs/fullchain.pem"
key_file = "/etc/telemt/certs/privkey.pem"
EOF
cat > /etc/systemd/system/telemt.service << EOF
[Unit]
Description=TeleMT MTProto Telegram Proxy
After=network.target
[Service]
Type=simple
User=nobody
ExecStart=/usr/local/bin/telemt -c /etc/telemt/config.toml
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable telemt
systemctl start telemt
}
# Установка 3‑x‑ui
install_3x_ui() {
bash <(curl -Ls https://raw.githubusercontent.com/begugla0/selfsniscripts/main/3x-ui/install.sh)
}
# Основная функция
main() {
check_root
echo "Шаг 1: Установка базовых пакетов..."
install_base_packages
echo "Шаг 2: Настройка фаервола..."
configure_firewall
echo "Шаг 3: Получение SSL‑сертификатов..."
obtain_certificates
echo "Шаг 4: Настройка Nginx Stream..."
setup_nginx_stream
configure_nginx_stream
echo "Шаг 5: Настройка веб‑сервера..."
setup_web_server
echo "Шаг 6: Установка и настройка TeleMT..."
install_telemt
echo "Шаг 7: Установка 3‑x‑ui..."
install_3x_ui
echo "Шаг 8: Перезагрузка сервисов..."
nginx -t
systemctl reload nginx
echo