You need to enable JavaScript to run this app. 如何在Dreamhost上部署Typescript(React)应用及Node.js服务?
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dreamhost上部署Typescript(React)应用及Node.js服务?

Dreamhost 部署TS(React)应用+对应Node.js服务操作指南

核心疑问直接答复

  • 无需手动SSH安装npm:Dreamhost的VPS/专服默认预装Node.js与npm,但版本普遍偏旧,不满足新版React、TS的依赖要求,只需通过nvm切换适配的LTS版本即可,不要手动编译安装系统级npm,避免破坏服务器环境。
  • Passenger勾选报错解决:报错触发条件为两类:要么当前使用的是共享主机(非VPS/专用服务器,本身不支持Passenger运行Node服务),要么VPS/专服的操作系统未升级到最新稳定版。对应解决方式:
    1. 若为共享主机:跳过Passenger配置,改用自定义端口绑定的方式部署Node服务;
    2. 若为VPS/专服:在Dreamhost控制台的服务器管理页,将操作系统升级到Debian 12或Ubuntu 22.04及以上版本,升级完成后即可正常勾选Passenger配置。

方案一:符合Passenger配置要求(VPS/专服已升级最新OS)

该方案由Dreamhost自带的Passenger进程管理器自动托管服务,无需额外配置进程守护,稳定性更高。

  1. SSH配置适配Node版本
    连接服务器后,通过nvm官方一键脚本完成版本管理工具安装,执行source ~/.bashrc生效环境变量,再依次执行:
    • nvm install --lts 安装最新LTS版Node.js
    • nvm alias default 已安装的Node版本号 (比如18.20.4)设置默认使用版本
  2. 本地项目预处理
    • TS版React前端项目:执行npm install安装本地依赖,再执行打包命令(Vite/CRA均为npm run build),生成dist/build静态资源目录
    • 后端Node服务:确认所有生产依赖已写入package.json的dependencies字段,排除仅本地使用的dev依赖
  3. 上传项目文件
    通过sftp/rsync将项目文件上传到对应域名的web根目录(一般为~/你的域名/):
    • 将前端打包后的静态资源目录重命名为public,放到web根目录下
    • 将后端Node服务的入口文件(如server.js)放到web根目录下
  4. 服务器端安装生产依赖
    进入web根目录,执行npm install --production,仅安装生产环境所需依赖,避免占用多余服务器空间。
  5. 配置Passenger规则
    • 在web根目录新建.htaccess文件,写入以下内容:
      PassengerAppType node
      PassengerStartupFile server.js
      PassengerBaseURI /
      
    • 在Dreamhost控制台对应域名管理页,勾选Passenger选项,应用类型选择Node.js,确认启动文件路径为刚才配置的server.js。
  6. 后端适配静态资源路由
    后端服务代码中需配置静态资源指向,以Express为例:
    • 加入app.use(express.static('public')) 指向前端静态文件目录
    • 配置兜底路由,所有非接口请求均返回前端index.html,适配SPA前端路由。
  7. 访问对应域名验证部署结果,若报错可查看web根目录下的logs/文件夹中的运行日志排查。

方案二:不符合Passenger配置要求(共享主机/旧OS无法升级)

该方案不依赖Passenger,直接通过自定义端口绑定部署服务。

  1. SSH配置适配Node版本 与方案一的第1步完全一致
  2. 本地项目预处理、上传文件、服务器安装生产依赖 均与方案一的第2、3、4步一致
  3. 进程守护与服务启动
    Dreamhost共享主机禁用80/443端口,需选用1024以上的空闲端口(如3000)运行服务,避免直接断开SSH导致服务停止,需用pm2托管进程:
    • 执行npm install -g pm2安装进程管理工具
    • 进入web根目录,执行pm2 start server.js --name 自定义服务名启动服务
    • 执行pm2 save保存进程列表,再通过crontab配置@reboot自动执行pm2进程恢复命令,实现服务开机自启。
  4. 域名端口绑定
    在Dreamhost控制台对应域名管理页,将域名的web服务指向修改为“代理到自定义端口”,填写你的Node服务运行的端口号(如3000)。
  5. 后端适配静态资源路由的逻辑与方案一第6步一致,访问域名验证即可。

新手部署注意事项

  • 不要将本地的node_modules文件夹打包上传,必须在服务器端执行npm install,避免本地与服务器系统依赖不兼容
  • 若选择直接在服务器上编译TS代码,需提前安装typescript、ts-node等dev依赖,更推荐本地编译后上传,减少服务器资源占用
  • 数据库密钥、API Token等敏感环境变量,需在服务器端新建.env文件存放,配合dotenv包读取,禁止将.env文件上传到公共访问目录
  • 若遇到端口占用报错,执行lsof -i:对应端口号查看占用进程,更换为其他空闲端口即可。

内容的提问来源于stack exchange,提问作者user14280047

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.08 06:36:05