重构 frpc 配置流程:支持交互式填写 + 自动创建独立配置
- Step 2 新增 frpc 连接参数交互输入:FRPS_ADDR/FRPS_PORT/FRPS_TOKEN/PROXY_NAME - 找不到 frpc 配置时自动创建 /etc/frp/frpc.toml 完整配置 - 已有配置时追加代理规则(自动备份) - unified build_proxy_block() 函数统一管理 TOML/INI 格式 - frpc 启动逻辑:无 systemd 时自动 nohup 启动 - 部署总结显示真实 frps 地址 - 所有参数支持环境变量覆盖用于管道模式
This commit is contained in:
+91
-65
@@ -214,11 +214,18 @@ else
|
|||||||
log_info "系统已安装 frpc。"
|
log_info "系统已安装 frpc。"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ================= 配置网关与映射端口 =================
|
# ================= 配置网关与 frpc 代理参数 =================
|
||||||
log_step "2/5" "配置动态网关参数:"
|
log_step "2/5" "配置 frpc 连接与网关端口参数:"
|
||||||
|
|
||||||
|
# frps 服务器连接信息
|
||||||
|
FRPS_ADDR="${FRPS_ADDR:-$(read_or_default "请输入 frps 服务器地址 (例: 1.2.3.4): " "")}"
|
||||||
|
FRPS_PORT="${FRPS_PORT:-$(read_or_default "请输入 frps 服务器端口 (默认 7000): " "7000")}"
|
||||||
|
FRPS_TOKEN="${FRPS_TOKEN:-$(read_or_default "请输入 frps 认证 token (默认留空): " "")}"
|
||||||
|
|
||||||
|
# 代理规则
|
||||||
|
PROXY_NAME="${PROXY_NAME:-$(read_or_default "请输入代理名称 (默认 huawei-dynamic-gateway): " "huawei-dynamic-gateway")}"
|
||||||
GATEWAY_PORT="${GATEWAY_PORT:-$(read_or_default "请输入 Python 动态网关的本地监听端口 (默认 8080): " "8080")}"
|
GATEWAY_PORT="${GATEWAY_PORT:-$(read_or_default "请输入 Python 动态网关的本地监听端口 (默认 8080): " "8080")}"
|
||||||
REMOTE_PORT="${REMOTE_PORT:-$(read_or_default "请输入你想在 frps 公网端暴露的端口 (默认 18000): " "18000")}"
|
REMOTE_PORT="${REMOTE_PORT:-$(read_or_default "请输入在 frps 公网端暴露的端口 (默认 18000): " "18000")}"
|
||||||
|
|
||||||
# 端口有效性检查
|
# 端口有效性检查
|
||||||
if ! [[ "$GATEWAY_PORT" =~ ^[0-9]+$ ]] || [ "$GATEWAY_PORT" -lt 1 ] || [ "$GATEWAY_PORT" -gt 65535 ]; then
|
if ! [[ "$GATEWAY_PORT" =~ ^[0-9]+$ ]] || [ "$GATEWAY_PORT" -lt 1 ] || [ "$GATEWAY_PORT" -gt 65535 ]; then
|
||||||
@@ -230,45 +237,84 @@ if ! [[ "$REMOTE_PORT" =~ ^[0-9]+$ ]] || [ "$REMOTE_PORT" -lt 1 ] || [ "$REMOTE_
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ================= 查找 frpc 配置文件 =================
|
# ================= 生成/追加 frpc 配置 =================
|
||||||
log_step "3/5" "检测 frpc 配置文件位置以追加代理规则:"
|
log_step "3/5" "检测并生成 frpc 配置文件..."
|
||||||
FRPC_CONFIG=""
|
FRPC_CONFIG=""
|
||||||
FRPC_TYPE=""
|
FRPC_TYPE="toml"
|
||||||
|
|
||||||
# 按优先级查找配置文件
|
# 按优先级查找现有配置文件
|
||||||
for path in "/etc/frp/frpc.toml" "/etc/frp/frpc.ini" "/usr/local/etc/frp/frpc.toml" "/usr/local/etc/frp/frpc.ini"; do
|
for path in "/etc/frp/frpc.toml" "/etc/frp/frpc.ini" "/usr/local/etc/frp/frpc.toml" "/usr/local/etc/frp/frpc.ini"; do
|
||||||
if [ -f "$path" ]; then
|
if [ -f "$path" ]; then
|
||||||
FRPC_CONFIG="$path"
|
FRPC_CONFIG="$path"
|
||||||
[[ "$path" == *.toml ]] && FRPC_TYPE="toml" || FRPC_TYPE="ini"
|
[[ "$path" == *.ini ]] && FRPC_TYPE="ini"
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# 如果没找到,尝试搜索(限制深度避免长时间等待)
|
# 如果没找到,搜索
|
||||||
if [ -z "$FRPC_CONFIG" ]; then
|
if [ -z "$FRPC_CONFIG" ]; then
|
||||||
FRPC_PATH_SEARCH=$(find /etc /usr/local/etc /opt /home -maxdepth 3 \( -name "frpc.toml" -o -name "frpc.ini" \) 2>/dev/null | head -n 1)
|
FRPC_PATH_SEARCH=$(find /etc /usr/local/etc /opt /home -maxdepth 3 \( -name "frpc.toml" -o -name "frpc.ini" \) 2>/dev/null | head -n 1)
|
||||||
if [ -n "$FRPC_PATH_SEARCH" ]; then
|
if [ -n "$FRPC_PATH_SEARCH" ]; then
|
||||||
FRPC_CONFIG="$FRPC_PATH_SEARCH"
|
FRPC_CONFIG="$FRPC_PATH_SEARCH"
|
||||||
[[ "$FRPC_PATH_SEARCH" == *.toml ]] && FRPC_TYPE="toml" || FRPC_TYPE="ini"
|
[[ "$FRPC_PATH_SEARCH" == *.ini ]] && FRPC_TYPE="ini"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
APPEND_FRP="n"
|
# 构建代理规则块
|
||||||
|
build_proxy_block() {
|
||||||
|
local type=$1 # toml | ini
|
||||||
|
if [ "$type" = "toml" ]; then
|
||||||
|
cat << BLK
|
||||||
|
|
||||||
|
[[proxies]]
|
||||||
|
name = "${PROXY_NAME}"
|
||||||
|
type = "tcp"
|
||||||
|
localIP = "127.0.0.1"
|
||||||
|
localPort = ${GATEWAY_PORT}
|
||||||
|
remotePort = ${REMOTE_PORT}
|
||||||
|
BLK
|
||||||
|
else
|
||||||
|
cat << BLK
|
||||||
|
|
||||||
|
[${PROXY_NAME}]
|
||||||
|
type = tcp
|
||||||
|
local_ip = 127.0.0.1
|
||||||
|
local_port = ${GATEWAY_PORT}
|
||||||
|
remote_port = ${REMOTE_PORT}
|
||||||
|
BLK
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
if [ -n "$FRPC_CONFIG" ]; then
|
if [ -n "$FRPC_CONFIG" ]; then
|
||||||
|
# --- 已有 frpc 配置:追加代理规则 ---
|
||||||
log_info "识别到 frpc 配置: $FRPC_CONFIG (${FRPC_TYPE})"
|
log_info "识别到 frpc 配置: $FRPC_CONFIG (${FRPC_TYPE})"
|
||||||
if confirm_or_default "是否自动将华为云转发规则追加到该文件? (y/n, 默认 y): " "y"; then
|
if confirm_or_default "是否自动将华为云转发规则追加到该文件? (y/n, 默认 y): " "y"; then
|
||||||
APPEND_FRP="y"
|
if grep -q "${PROXY_NAME}" "$FRPC_CONFIG" 2>/dev/null; then
|
||||||
|
log_warn "frpc 配置中已存在 ${PROXY_NAME} 规则,跳过追加"
|
||||||
|
else
|
||||||
|
cp "$FRPC_CONFIG" "${FRPC_CONFIG}.backup.$(date +%Y%m%d%H%M%S)"
|
||||||
|
build_proxy_block "$FRPC_TYPE" >> "$FRPC_CONFIG"
|
||||||
|
log_info "代理规则已追加到 $FRPC_CONFIG (原配置已备份)"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
log_warn "未找到 frpc 配置文件,跳过自动追加"
|
# --- 没有 frpc 配置:自动创建 ---
|
||||||
log_warn "请手动在 frpc 配置中添加以下规则:"
|
log_warn "未找到 frpc 配置文件"
|
||||||
echo -e "${YELLOW}--- TOML 格式 ---${PLAIN}"
|
if confirm_or_default "是否自动创建 frpc 配置文件并添加网关代理规则? (y/n, 默认 y): " "y"; then
|
||||||
echo -e "[[proxies]]"
|
FRPC_CONFIG="/etc/frp/frpc.toml"
|
||||||
echo -e "name = \"huawei-dynamic-gateway\""
|
mkdir -p /etc/frp
|
||||||
echo -e "type = \"tcp\""
|
|
||||||
echo -e "local_ip = \"127.0.0.1\""
|
# 生成主配置
|
||||||
echo -e "local_port = ${GATEWAY_PORT}"
|
cat << BLK > "$FRPC_CONFIG"
|
||||||
echo -e "remote_port = ${REMOTE_PORT}"
|
serverAddr = "${FRPS_ADDR}"
|
||||||
|
serverPort = ${FRPS_PORT}
|
||||||
|
auth.method = "token"
|
||||||
|
auth.token = "${FRPS_TOKEN}"
|
||||||
|
BLK
|
||||||
|
# 追加代理规则
|
||||||
|
build_proxy_block "toml" >> "$FRPC_CONFIG"
|
||||||
|
log_info "已创建 frpc 配置文件: $FRPC_CONFIG"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ================= 安装 Python 依赖 =================
|
# ================= 安装 Python 依赖 =================
|
||||||
@@ -662,50 +708,29 @@ fi
|
|||||||
# 启动服务
|
# 启动服务
|
||||||
safe_start_service "huawei-gateway" "$PYTHON_CMD /usr/local/bin/huawei_gateway.py $GATEWAY_PORT"
|
safe_start_service "huawei-gateway" "$PYTHON_CMD /usr/local/bin/huawei_gateway.py $GATEWAY_PORT"
|
||||||
|
|
||||||
# ================= 追加 frpc 规则 =================
|
# ================= 启动 frpc =================
|
||||||
if [[ "$APPEND_FRP" == "y" || "$APPEND_FRP" == "Y" ]] && [ -n "$FRPC_CONFIG" ] && [ -f "$FRPC_CONFIG" ]; then
|
if [ -n "$FRPC_CONFIG" ] && [ -f "$FRPC_CONFIG" ]; then
|
||||||
if grep -q "huawei-dynamic-gateway" "$FRPC_CONFIG" 2>/dev/null; then
|
if command -v frpc &>/dev/null; then
|
||||||
log_warn "frpc 配置中已存在 huawei-dynamic-gateway 规则,跳过追加"
|
# 重启已运行的 frpc,或首次启动
|
||||||
else
|
if has_systemd; then
|
||||||
# 备份原配置
|
if systemctl list-units --type=service 2>/dev/null | grep -q "frpc"; then
|
||||||
cp "$FRPC_CONFIG" "${FRPC_CONFIG}.backup.$(date +%Y%m%d%H%M%S)"
|
systemctl restart frpc 2>/dev/null && log_info "frpc 服务已重启"
|
||||||
|
else
|
||||||
if [ "$FRPC_TYPE" = "toml" ]; then
|
systemctl enable frpc --now 2>/dev/null && log_info "frpc 服务已通过 systemd 启动"
|
||||||
cat << EOF >> "$FRPC_CONFIG"
|
fi
|
||||||
|
|
||||||
[[proxies]]
|
|
||||||
name = "huawei-dynamic-gateway"
|
|
||||||
type = "tcp"
|
|
||||||
local_ip = "127.0.0.1"
|
|
||||||
local_port = $GATEWAY_PORT
|
|
||||||
remote_port = $REMOTE_PORT
|
|
||||||
EOF
|
|
||||||
else
|
else
|
||||||
cat << EOF >> "$FRPC_CONFIG"
|
restart_service "frpc"
|
||||||
|
nohup frpc -c "$FRPC_CONFIG" > /var/log/frpc.log 2>&1 &
|
||||||
[huawei-dynamic-gateway]
|
echo $! > /var/run/frpc.pid
|
||||||
type = tcp
|
sleep 1
|
||||||
local_ip = 127.0.0.1
|
if kill -0 "$(cat /var/run/frpc.pid)" 2>/dev/null; then
|
||||||
local_port = $GATEWAY_PORT
|
log_info "frpc 已通过 nohup 启动 (PID: $(cat /var/run/frpc.pid))"
|
||||||
remote_port = $REMOTE_PORT
|
else
|
||||||
EOF
|
log_warn "frpc 启动失败,查看日志: /var/log/frpc.log"
|
||||||
fi
|
fi
|
||||||
log_info "frpc 代理规则已追加到 $FRPC_CONFIG"
|
|
||||||
log_info "原配置已备份"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 重启 frpc
|
|
||||||
if has_systemd; then
|
|
||||||
if systemctl list-units --type=service 2>/dev/null | grep -q "frpc"; then
|
|
||||||
systemctl restart frpc 2>/dev/null && log_info "frpc 服务已重启"
|
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
restart_service "frpc"
|
log_warn "frpc 未安装,跳过启动。配置文件已生成: $FRPC_CONFIG"
|
||||||
# 尝试直接启动 frpc
|
|
||||||
if command -v frpc &>/dev/null; then
|
|
||||||
nohup frpc -c "$FRPC_CONFIG" > /var/log/frpc.log 2>&1 &
|
|
||||||
log_info "frpc 已通过 nohup 启动"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -714,9 +739,10 @@ echo -e "\n${BLUE}==================================================${PLAIN}"
|
|||||||
echo -e "${GREEN} 🎉 6小时长效缓存网关部署完成 🎉 ${PLAIN}"
|
echo -e "${GREEN} 🎉 6小时长效缓存网关部署完成 🎉 ${PLAIN}"
|
||||||
echo -e "${BLUE}==================================================${PLAIN}"
|
echo -e "${BLUE}==================================================${PLAIN}"
|
||||||
echo -e "1. 动态网关状态:$(get_service_status huawei-gateway)"
|
echo -e "1. 动态网关状态:$(get_service_status huawei-gateway)"
|
||||||
echo -e "2. 健康检查: http://127.0.0.1:${GATEWAY_PORT}/health"
|
echo -e "2. frpc 配置: $FRPC_CONFIG"
|
||||||
echo -e "3. 您的本地一劳永逸调用地址:"
|
echo -e "3. 健康检查: http://127.0.0.1:${GATEWAY_PORT}/health"
|
||||||
echo -e " - ${GREEN}API Base URL:${PLAIN} http://【你的公网frps_IP】:$REMOTE_PORT/v2"
|
echo -e "4. 您的本地一劳永逸调用地址:"
|
||||||
|
echo -e " - ${GREEN}API Base URL:${PLAIN} http://${FRPS_ADDR}:${REMOTE_PORT}/v2"
|
||||||
echo -e " - ${GREEN}API Key:${PLAIN} sk-anything"
|
echo -e " - ${GREEN}API Key:${PLAIN} sk-anything"
|
||||||
echo -e " - ${GREEN}Model:${PLAIN} glm-5.1"
|
echo -e " - ${GREEN}Model:${PLAIN} glm-5.1"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user