
Node.js 不仅限于 VPS 服务器。现代共享主机 — 包括基于 DirectAdmin 的设置 — 支持通过 Phusion Passenger 运行 Node.js 应用,这是一个在 Apache 或 Nginx 与 Node.js 应用之间架起桥梁的应用服务器。本指南将逐步指导您在共享主机上部署 Node.js 应用。
Phusion Passenger 是什么?
Phusion Passenger 是支持 Ruby、Python 和 Node.js 的多语言应用服务器。它充当网络服务器(Apache/Nginx)和您的应用之间的中间件。当 HTTP 请求到达时,Passenger 将其转发到 Node.js 进程并返回响应 — 无需手动配置反向代理。
检查您主机上的 Node.js 可用性
部署前,通过 SSH 连接并运行以下命令来验证您的主机是否支持 Node.js:
注意: 共享主机上的 Node.js 比 VPS 更有局限性,因为资源是共享的。对于需要持续运行或处理高流量的应用,从 500 泰铢/月起的 VPS 提供使用 PM2 的完全控制和无限制的 Node.js。
Passenger 上的 Node.js 文件夹结构
步骤 1: 创建 app.js
步骤 2: 创建 package.json
步骤 3: 配置 .htaccess
将 username 替换为您的 DirectAdmin 用户名。
步骤 4: 安装依赖项
步骤 5: 重启 Passenger
修改应用后,通过触摸重启文件来重启 Passenger:
Passenger 上的 Express.js
通过 DirectAdmin 上的 Node.js 选择器部署(无需手动 .htaccess)
许多现代 DirectAdmin 服务器配备了 Node.js 选择器(CloudLinux),允许您完全从控制面板 UI 创建和管理 Node.js 应用 — 无需手写 .htaccess。这种方法对初学者来说很理想,因为每个设置都只需点击一下。AsiaGB 主机运行在 DirectAdmin 上,所以它支持此工作流程。
通过 DirectAdmin Node.js 选择器创建 Node.js 应用:
- 登录 DirectAdmin 并打开 Extra Features → Setup Node.js App(也称为"Node.js 选择器")。
- 单击 CREATE APPLICATION 开始新应用。
- 从下拉菜单中选择 Node.js 版本(例如 18.x 或 20.x LTS)。
- 设置 Application root,例如
nodeapp(映射到/home/username/nodeapp)。 - 设置 Application URL — 应用将服务的域或子域,例如
app.yourdomain.com。 - 设置 Application startup file 为
app.js(您的入口点)。 - 单击 CREATE — 系统会自动配置虚拟环境和 Passenger。
创建后,DirectAdmin 会显示进入虚拟环境的命令(例如 source /home/username/nodevenv/nodeapp/18/bin/activate)。在通过 SSH 使用 npm 前运行它,以便获得正确的 Node.js 版本。
配置应用: 入口点、环境变量和通过 UI 的 npm install
应用存在后,您可以从 Node.js 选择器页面调整所有内容,无需触摸终端:
入口点(启动文件)
Application startup file 字段是应用启动时 Passenger 调用的文件 — 通常是 app.js。如果您的项目使用不同的名称,如 server.js 或 index.js,更新此字段,单击 Save,然后 Restart。
环境变量
应用页面包含一个 "Add Variable" 部分来设置环境变量,如 NODE_ENV=production、DB_HOST 或 API_KEY — 无需 .env 文件。值在重启时注入到进程中,这比在代码中硬编码秘密更安全。
通过 UI 的 npm install
Node.js 选择器有一个 "Run NPM Install" 按钮,它读取您的 package.json 并在正确的环境中安装所有依赖 — 无需 SSH。这对于不公开 SSH 的主机来说很完美。要运行 package.json 中定义的其他脚本,请使用 "Run JS script" 按钮。
提示: 每当您更改环境变量、入口点或添加依赖项时,始终在 Node.js 选择器中单击 Restart(等同于 touch tmp/restart.txt)。否则应用将继续运行旧代码。
共享主机 vs VPS 用于 Node.js
通过 Passenger 在共享主机上运行 Node.js 对小到中型应用效果良好,但在提交前值得了解一些限制。下面的表格比较了共享主机和 VPS 之间的关键差异:
| 方面 | 共享主机(Passenger) | VPS(PM2) |
|---|---|---|
| 进程管理器 | 无(Passenger,延迟启动) | 通过 PM2 / systemd 完全控制 |
| 自定义端口 | 否(Passenger 注入端口) | 任何端口(3000、8080 等) |
| WebSocket / Socket.io | 有限,取决于服务器配置 | 完全支持 |
| RAM / CPU | 与他人共享,配额有限 | 专用分配 |
| Docker / 后台工作程序 | 不支持 | 完全支持 |
| 最适合 | 小网站、轻量 API、演示 | 生产、实时、高流量 |
简而言之,共享主机非常适合实验、小型 API 或流量适中的个人网站。必须持续运行、具有后台作业或使用实时 WebSocket 的应用应在具有完全 root 访问权限的 VPS 上运行。
常见问题和修复(502、端口、重启)
在共享主机上部署 Node.js 时,大多数问题可追溯到一些可修复的原因:
1. 错误 502 Bad Gateway 或应用程序错误
最常见的原因是应用在启动时崩溃 — 通常是缺失依赖或语法错误。首先检查日志:
如果看到 Cannot find module 'xxx',npm install 没有在正确的环境中运行。再次在 Node.js 选择器中单击"Run NPM Install",或在运行 npm 前激活虚拟环境。
2. 应用未在正确的端口上监听
在 Passenger 上,您永远不要硬编码固定端口 — 让应用通过 Passenger 监听。确保您的代码如此:
Passenger 为您设置 process.env.PORT。硬编码的 app.listen(3000) 有时可能工作但不可靠。
3. 代码更改不生效(需要重启)
Passenger 缓存进程,因此单独编辑文件在重启前没有效果。在 Node.js 选择器中单击 Restart 或通过 SSH 运行:
4. 内存限制 / 应用被杀死
如果应用超过您的主机计划的 RAM 配额,系统会杀死进程,导致间歇性 502。检查内存使用情况并修剪不必要的依赖项。如果应用确实需要更多 RAM,将其移至具有专用内存的 VPS。
共享主机上 Node.js 的限制
- 没有 PM2 或进程管理器用于自动崩溃恢复
- 内存和 CPU 受主机计划限制的限制
- WebSocket 支持取决于服务器配置
- 不适合实时应用或高流量应用
需要完整的 Node.js 控制? AsiaGB VPS 从 500 泰铢/月开始,具有完全 Root 访问权限。使用 PM2 运行 Node.js,安装 Docker,绑定任何端口 — 非常适合 API 服务器、实时应用或微服务。位置:泰国和新加坡。
需要完整的 Node.js 能力? 尝试 VPS
从 500 泰铢/月起的 VPS。完全 Root 访问、PM2、Docker、自定义端口。泰国和新加坡位置,99% 正常运行时间。
查看 VPS 计划