Files
Scripts/remna_xhttp.sh
2026-03-30 12:24:08 +03:00

225 lines
5.5 KiB
Bash
Raw 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
# ==========================================
# XHTTP NODE SETUP SCRIPT (PRODUCTION READY)
# ==========================================
# Что делает:
# 1. Генерирует конфиг ноды
# 2. Ждет подтверждения
# 3. Перезапускает node контейнер
# 4. Вставляет location блок в nginx
# 5. Проверяет nginx конфиг
# 6. В случае ошибки — открывает nano
# 7. Финальный чек-лист + XHTTP config
# ==========================================
set -e
# =========================
# CONFIG
# =========================
NGINX_CONF="/opt/remnawave/nginx.conf"
NODE_CONTAINER="remnanode"
NGINX_CONTAINER="remnawave-nginx"
# =========================
# UTILS
# =========================
# Yes/No (Enter = YES)
ask_yes_no() {
while true; do
read -r -p "$1 [Y/n]: " answer
if [[ -z "$answer" ]]; then
return 0
fi
case "$answer" in
[Yy]*) return 0 ;;
[Nn]*) echo "Повторите подтверждение." ;;
*) echo "Введите Y или N (Enter = Y)" ;;
esac
done
}
# Execute command safely
run_cmd() {
echo ">> $1"
if ! eval "$1"; then
echo "❌ Ошибка выполнения"
exit 1
fi
}
# =========================
# STEP 1 — NODE CONFIG
# =========================
read -r -p "Введите название ноды (например USA): " NODE_NAME
TAG="${NODE_NAME}_XHTTP"
echo
echo "========== СКОПИРУЙ И ВСТАВЬ =========="
cat <<EOF
{
"tag": "${TAG}",
"listen": "/dev/shm/xrxh.socket,0666",
"protocol": "vless",
"settings": {
"clients": [],
"fallbacks": [],
"decryption": "none"
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls",
"quic"
]
},
"streamSettings": {
"network": "xhttp",
"xhttpSettings": {
"mode": "auto",
"path": "/xhttppath/",
"extra": {
"noSSEHeader": true,
"xPaddingBytes": "100-1000",
"scMaxBufferedPosts": 30,
"scMaxEachPostBytes": 1000000,
"scStreamUpServerSecs": "20-80"
}
}
}
}
EOF
echo "======================================="
echo
ask_yes_no "Вы вставили конфиг?"
echo "Перезапуск ноды..."
run_cmd "docker restart ${NODE_CONTAINER}"
# =========================
# STEP 2 — NGINX PATCH
# =========================
echo
echo "Проверка nginx конфига..."
if grep -q "grpc_pass unix:/dev/shm/xrxh.socket;" "$NGINX_CONF"; then
echo "✔ Блок уже существует"
else
echo "Добавляю location блок..."
# Backup
cp "$NGINX_CONF" "${NGINX_CONF}.bak"
TMP_FILE=$(mktemp)
# Insert after add_header
awk '
BEGIN { inserted=0 }
{
print
if ($0 ~ /add_header X-Robots-Tag/ && inserted==0) {
print " location /xhttppath/ {"
print " client_max_body_size 0;"
print " grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for;"
print " client_body_timeout 5m;"
print " grpc_read_timeout 315;"
print " grpc_send_timeout 5m;"
print " grpc_pass unix:/dev/shm/xrxh.socket;"
print " }"
inserted=1
}
}
' "$NGINX_CONF" > "$TMP_FILE"
mv "$TMP_FILE" "$NGINX_CONF"
fi
# =========================
# VALIDATE NGINX
# =========================
echo
echo "Проверка nginx конфигурации..."
if docker exec ${NGINX_CONTAINER} nginx -t; then
echo "✔ nginx конфиг валиден"
echo "Перезапуск nginx..."
run_cmd "docker restart ${NGINX_CONTAINER}"
else
echo "❌ nginx конфиг сломан!"
echo "Открываю nano..."
nano "$NGINX_CONF"
echo "Повторная проверка..."
if ! docker exec ${NGINX_CONTAINER} nginx -t; then
echo "❌ Ошибка не исправлена"
echo "Восстанавливаю бэкап..."
cp "${NGINX_CONF}.bak" "$NGINX_CONF"
exit 1
fi
echo "✔ Исправлено, перезапуск nginx..."
run_cmd "docker restart ${NGINX_CONTAINER}"
fi
# =========================
# STEP 3 — FINAL CHECKLIST
# =========================
echo
echo "=== Финальная проверка ==="
ask_yes_no "Создали хост?"
ask_yes_no "Настроили ли вы пути и защиту? (путь: /xhttppath/)"
echo
echo "========== ДОБАВЬ В XHTTP CONFIG =========="
cat <<EOF
{
"xmux": {
"cMaxReuseTimes": 0,
"maxConcurrency": "16-32",
"maxConnections": 0,
"hKeepAlivePeriod": 0,
"hMaxRequestTimes": "600-900",
"hMaxReusableSecs": "1800-3000"
},
"noGRPCHeader": false,
"xPaddingBytes": "100-1000",
"scMaxEachPostBytes": 1000000,
"scMinPostsIntervalMs": 30,
"scStreamUpServerSecs": "20-80"
}
EOF
echo "==========================================="
echo
ask_yes_no "Добавили ли вы XHTTP конфиг?"
ask_yes_no "Включили хост?"
ask_yes_no "Добавили конфиг к ноде?"
ask_yes_no "Добавили в внутренний сквад?"
# =========================
# FINAL STEP
# =========================
echo
echo "Финальный перезапуск ноды..."
run_cmd "docker restart ${NODE_CONTAINER}"
echo
echo "✅ Готово"