如何在 Namecheap 共享主机上部署 NestJS

在 Namecheap 共享主机上部署 NestJS 与部署静态网站或 PHP 应用不同。你不能只是上传文件并期望它能正常运行。

你必须将 TypeScript 编译为 JavaScript,安装生产环境依赖项,并使用 cPanel 通过 Passenger 来管理该过程。

在找到正确的方法之前,我曾遇到过文件夹为空、缺少构建文件以及 Redis 连接中断等问题。以下是经过验证的工作流程。

设置逻辑

请求遵循以下路径: • 浏览器或 API 客户端 • 域名和 HTTPS • Namecheap 上的 Apache / Passenger • app.js(桥接文件) • dist/main.js(编译后的代码) • NestJS 应用

核心要求

• 一个支持 Node.js 的 Namecheap 托管账户 • 访问 cPanel 和 SSH/终端的权限 • 一个可运行的 NestJS 项目 • 数据库或 Redis 的生产环境凭据

步骤 1:准备代码

不要使用硬编码的端口。在你的 src/main.ts 中,使用 process.env.PORT

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(process.env.PORT || 4000);
}

步骤 2:整理依赖项

@nestjs/common@nestjs/core 等运行时包移动到 package.jsondependencies 部分。如果它们留在 devDependencies 中,你的应用在生产环境中会崩溃。

步骤 3:构建并创建桥接文件

Namecheap 运行的是 JavaScript,而不是 TypeScript。 • 在本地运行 npm run build。 • 确认 dist/main.js 存在。 • 在项目根目录下创建一个 app.js 文件,并写入这一行:require('./dist/main');

这个 app.js 将作为 Passenger 的入口点。

步骤 4:部署策略

最安全的方法是在本地构建并上传构建产物: • 上传 app.js • 上传 dist/ 文件夹 • 上传 package.jsonpackage-lock.json • 在 Namecheap 上运行:npm ci --omit=dev

永远不要上传本地的 node_modules 文件夹。在你的电脑上构建的原生模块无法在 Linux 服务器上运行。

步骤 5:配置 cPanel

在 cPanel 中前往 Setup Node.js App: • 选择正确的 Node.js 版本。 • 将 mode 设置为 Production。 • 将 Application root 设置为你的文件夹。 • 将 Application startup file 设置为 app.js

步骤 6:环境变量

直接在 cPanel 的 Node.js 界面中添加你的密钥(如 DATABASE_URL 或 API 密钥)。你也可以在根目录下使用 .env 文件,但要确保它不在 dist 文件夹内。修改后请重启应用。

常见问题排查

EADDRINUSE:你可能有一个手动运行的进程。请让 Passenger 来管理应用。 • Cannot find module:你的构建文件缺失,或者 app.js 中的路径错误。 • Redis connection failed:检查 Namecheap 是否允许通过你的 Redis 端口进行出站连接。你可能需要联系 Namecheap 支持团队来开启它。

来源:https://dev.to/adesoji/how-to-deploy-and-run-a-nestjs-app-on-namecheap-shared-hosting-5c45