Files
jiedian/scripts/render-client.sh
T
dekun 1fc3b8a89c fix: improve VLESS link compatibility and add Reality repair script
Only encode SNI dots, keep pbk/sid raw, copy links via API, prefer xray keygen, and add repair-reality.sh for server-side fixes.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-27 23:58:14 +08:00

50 lines
1.9 KiB
Bash

#!/usr/bin/env bash
# 本地根据 .env 渲染客户端配置(无需在 VPS 上运行)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
ENV_FILE="${ROOT_DIR}/.env"
OUT_DIR="${ROOT_DIR}/client/generated"
[[ -f "$ENV_FILE" ]] || { echo "缺少 .env,请先 cp .env.example .env 并填写"; exit 1; }
# shellcheck disable=SC1090
source "$ENV_FILE"
for var in VPS_IP DOMAIN UUID REALITY_SERVER_NAME REALITY_PUBLIC_KEY REALITY_SHORT_ID HY2_PASSWORD; do
[[ -n "${!var:-}" ]] || { echo "缺少 .env 变量: $var"; exit 1; }
done
mkdir -p "$OUT_DIR"
urlencode() {
python3 -c "import sys; print(sys.argv[1].replace('.', '%2E'))" "$1"
}
REALITY_SNI_ENC="$(urlencode "$REALITY_SERVER_NAME")"
REALITY_PBK_ENC="$REALITY_PUBLIC_KEY"
REALITY_SID_ENC="$REALITY_SHORT_ID"
HY2_PASSWORD_ENC="$(python3 -c "import sys, urllib.parse; print(urllib.parse.quote(sys.argv[1], safe=''))" "$HY2_PASSWORD")"
DOMAIN_SNI_ENC="$(urlencode "$DOMAIN")"
sed -e "s|\${VPS_IP}|${VPS_IP}|g" \
-e "s|\${DOMAIN}|${DOMAIN}|g" \
-e "s|\${UUID}|${UUID}|g" \
-e "s|\${REALITY_SERVER_NAME}|${REALITY_SERVER_NAME}|g" \
-e "s|\${REALITY_PUBLIC_KEY}|${REALITY_PUBLIC_KEY}|g" \
-e "s|\${REALITY_SHORT_ID}|${REALITY_SHORT_ID}|g" \
-e "s|\${HY2_PASSWORD}|${HY2_PASSWORD}|g" \
"$ROOT_DIR/client/sing-box-client.json.template" > "$OUT_DIR/sing-box-client.json"
cat > "$OUT_DIR/share-links.txt" <<EOF
========== VLESS + Reality (主力) ==========
vless://${UUID}@${VPS_IP}:443?type=tcp&security=reality&encryption=none&flow=xtls-rprx-vision&sni=${REALITY_SNI_ENC}&fp=chrome&pbk=${REALITY_PBK_ENC}&sid=${REALITY_SID_ENC}&spx=%2F#Reality-Main
========== Hysteria2 (备用) ==========
hy2://${HY2_PASSWORD_ENC}@${DOMAIN}:8443?sni=${DOMAIN_SNI_ENC}#Hysteria2-Backup
EOF
echo "已生成:"
echo " $OUT_DIR/sing-box-client.json"
echo " $OUT_DIR/share-links.txt"