当前位置: 首页 > news >正文

记一次 TanStack Start 部署报 GLIBC_2.32 not found(依赖问题) - Higurashi

背景

项目是TanStack Start + Vite,原本在服务器通过下面命令启动:

npx wrangler dev --config dist/server/wrangler.json --ip 127.0.0.1 --port 3000 --local

服务器环境是Ubuntu 20.04

现象

启动时报错:

[ERROR] write EPIPE
/node_modules/@cloudflare/workerd-linux-64/bin/workerd: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found
/node_modules/@cloudflare/workerd-linux-64/bin/workerd: ... `GLIBC_2.33' not found
/node_modules/@cloudflare/workerd-linux-64/bin/workerd: ... `GLIBC_2.34' not found
/node_modules/@cloudflare/workerd-linux-64/bin/workerd: ... `GLIBC_2.35' not found

注意:EPIPE只是连带错误,真正导致失败的是glibc版本不满足。

根因分析

wrangler dev会拉起本地workerd

当前服务器glibc=2.31,而workerd需要更高版本(至少 2.32+),因此二进制无法启动。

可用命令确认环境:

ldd --version | head -n 1
cat /etc/os-release

解决方案(本次采用)

不再在生产机使用wrangler dev,改为Node + vite preview运行 SSR。

1)修改vite.config.ts

import { defineConfig } from "@lovable.dev/vite-tanstack-config";export default defineConfig({cloudflare: false,vite: {preview: {allowedHosts: ["site.example.cn", "www.site.example.cn", "127.0.0.1", "localhost"],},},
});

说明:

  • cloudflare: false:避免构建依赖workerd
  • allowedHosts:避免反代后出现Blocked request. This host is not allowed.

2)启动脚本start.sh

#!/usr/bin/env bash
set -euo pipefailAPP_DIR="/www/wwwroot/site.example.cn.source"
PORT="${PORT:-3000}"
LOG_DIR="$APP_DIR/logs"
PID_FILE="$APP_DIR/app.pid"cd "$APP_DIR"
mkdir -p "$LOG_DIR"export NODE_ENV=production
export CI=1if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; thenkill "$(cat "$PID_FILE")" || truesleep 1
fipkill -f "wrangler dev" || true
pkill -f "vite preview" || trueif [ ! -d node_modules ]; thennpm ci
finpm run build
nohup npm run preview -- --host 127.0.0.1 --port "$PORT" > "$LOG_DIR/app.out.log" 2>&1 &
echo $! > "$PID_FILE"

3)Nginx 反向代理

location ^~ / {proxy_pass http://127.0.0.1:3000;proxy_http_version 1.1;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_read_timeout 60s;
}

发布与验证

cd /www/wwwroot/site.example.cn.source
./start.sh
ss -lntp | grep :3000
tail -n 100 /www/wwwroot/site.example.cn.source/logs/app.out.log
curl -k -I https://site.example.cn

预期:

  • 127.0.0.1:3000node ... vite preview监听
  • 日志出现Local: http://127.0.0.1:3000/
  • 站点返回HTTP/2 200

其他可选方案

  1. 升级服务器到Ubuntu 22.04+ / Debian 12+,继续使用wrangler/workerd
  2. 直接部署到 Cloudflare(wrangler deploy),不在本机跑workerd
http://www.jsqmd.com/news/630007/

相关文章:

  • 如何排查RAC节点被驱逐Eviction_CSS日志与宕机重启原因分析
  • OpCore Simplify完全手册:零基础构建完美Hackintosh系统的终极教程
  • Graph Wavelet Neural Network (GWNN) 实战:如何在Cora数据集上实现高效节点分类
  • ADC测量不准?可能是Vref惹的祸!手把手教你用万用表校准参考电压
  • 动态水印:为LLM生成内容打造可追溯与语义无损的隐形标记
  • 4K@60Hz带宽不够用?详解HDMI2.1的FRL模式与传统TMDS差异(含实测数据对比)
  • Rustup终极指南:如何快速安装和管理Rust工具链
  • 保姆级教程:OpenWrt 21.02升级,用sysupgrade还是mtd?看完这篇再也不纠结
  • 政务工作流实战——突破Activiti的五个关键决策(综述)
  • LVGL嵌入式UI中文显示实战:从字体生成到界面优化
  • 基于dq解耦控制的STATCOM研究:PI控制与无差拍控制的对比分析
  • 记一次综合型流量分析 | 添柴不加火衅
  • 告别OFDM?聊聊6G候选波形AFDM在车联网感知中的独特优势与仿真对比
  • 手把手教你写Python节点:将ROS的Twist消息转换为阿克曼模型的Gazebo控制指令
  • SpringAI与Ollama:Java开发者如何轻松构建本地LLM应用
  • TimesNet:解锁时间序列多周期性奥秘的二维建模新范式
  • 基于深度学习的YOLO11飞鸟识别系统 飞鸟图像分割识别系统附代码 飞鸟识别数据集 空中威胁识别系统
  • 从魔方到代码:手把手教你用Python实现科先巴二阶段算法(附完整源码)
  • Windows Cleaner:3步解锁C盘空间,让Windows告别卡顿时代
  • Qwen3-ASR-1.7B开源ASR模型教程:模型路径/root/ai-models/Qwen/定位与替换
  • 网页时光机深度解析:让互联网记忆永不消失的浏览器扩展
  • 别再死记硬背了!用Multisim仿真带你5分钟搞懂OTL、OCL功放电路的区别
  • 延凡低成本低空无人机AI巡检方案
  • 深度探索HackRF射频架构:从系统集成到性能优化的技术解析
  • MKS Monster8 8轴主板终极指南:如何为Voron 2.4构建高性能3D打印控制系统
  • Virtuoso新手必看:从反相器到2-4译码器的完整电路仿真流程(附HSPICE配置)
  • OpenAI获1220亿美元融资,估值达8520亿美元创纪录 | AI信息日报 | 2026年4月12日 星期日
  • 2026q2四川球场厂家地址解析:运动球场跑道/防静电地板/防静电高架地板/防静电高架陶瓷地板/epdm球场/选择指南 - 优质品牌商家
  • 视频内容创作利器:Chord工具帮你自动生成视频脚本与场景描述
  • OpenCore-Configurator:告别复杂配置,让黑苹果引导变得简单直观