sub2api/deploy/build-push-tls-proxy.sh
win a72ba424cc
Some checks failed
CI / test (push) Failing after 1m32s
CI / golangci-lint (push) Failing after 33s
Security Scan / backend-security (push) Failing after 32s
Security Scan / frontend-security (push) Failing after 32s
feat: Node.js TLS 指纹代理 + 网络隔离防泄露
- 新增 Node.js TLS Forward Proxy (tools/node-tls-proxy/)
  原生 Node.js TLS 栈发起上游 HTTPS,JA3/JA4 天然匹配 Claude CLI
  SSE 流式透传,支持上游 HTTP CONNECT 代理
  零依赖,Node.js 24.13.0 锁定版本

- Go 集成 (config.go + http_upstream.go)
  新增 NodeTLSProxyConfig 配置
  DoWithTLS 优先走 Node.js 代理模式,URL 重写 https→http://localhost:3456

- Docker 网络隔离 (docker-compose.tls-proxy.yml)
  sub2api 容器仅 internal 网络,物理隔离外网
  node-tls-proxy 唯一出站通道,IPv6 内核级禁用

- iptables 防泄露脚本 (tools/firewall/)
  QUIC/UDP 443 全局 DROP,仅 nodeproxy 用户可出站 TCP 443

- 镜像切换为 zfc931912343/ 仓库
2026-03-22 00:18:43 +08:00

80 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
# =============================================================================
# Build and push node-tls-proxy multi-arch image
# =============================================================================
# Usage:
# ./build-push.sh # build + push latest
# ./build-push.sh v1.0.0 # build + push with tag
# ./build-push.sh --local # build locally only (no push)
#
# Prerequisites:
# docker login # login to Docker Hub first
# docker buildx create --use # enable multi-arch builds (one-time)
# =============================================================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
CONTEXT_DIR="${SCRIPT_DIR}/../tools/node-tls-proxy"
IMAGE="zfc931912343/sub2api-tls-proxy"
PLATFORMS="linux/amd64,linux/arm64"
TAG="${1:-latest}"
PUSH=true
if [ "$TAG" = "--local" ]; then
TAG="latest"
PUSH=false
fi
echo "============================================="
echo " Node.js TLS Proxy Image Builder"
echo "============================================="
echo " Image: ${IMAGE}:${TAG}"
echo " Platforms: ${PLATFORMS}"
echo " Push: ${PUSH}"
echo " Context: ${CONTEXT_DIR}"
echo "============================================="
# Verify context
if [ ! -f "${CONTEXT_DIR}/proxy.js" ]; then
echo "ERROR: proxy.js not found in ${CONTEXT_DIR}"
exit 1
fi
if [ "$PUSH" = true ]; then
echo ""
echo "[1/2] Building multi-arch image..."
docker buildx build \
--platform "${PLATFORMS}" \
--tag "${IMAGE}:${TAG}" \
--tag "${IMAGE}:latest" \
--push \
--file "${CONTEXT_DIR}/Dockerfile" \
"${CONTEXT_DIR}"
echo ""
echo "[2/2] Verifying..."
docker manifest inspect "${IMAGE}:${TAG}" | head -20
else
echo ""
echo "[1/1] Building local image (current arch only)..."
docker build \
--tag "${IMAGE}:${TAG}" \
--file "${CONTEXT_DIR}/Dockerfile" \
"${CONTEXT_DIR}"
fi
echo ""
echo "============================================="
echo " Done!"
if [ "$PUSH" = true ]; then
echo " Pushed: ${IMAGE}:${TAG}"
echo " Pushed: ${IMAGE}:latest"
echo ""
echo " Cloud deploy:"
echo " cd deploy"
echo " docker compose -f docker-compose.yml -f docker-compose.tls-proxy.yml up -d"
fi
echo "============================================="