在本文中,我将介绍如何使用 cPanel 在 Namecheap 的共享托管服务器上托管 Node.js 应用程序。在本文中,我不会讨论为您的 Web 应用程序设置数据库服务器或 React 前端。相反,我想专注于您在共享托管环境中运行 Node 应用程序时可能面临的挑战。 == 不要拖延,今天主持! == 在开发 Web 应用程序的过程中走得太远之前,最好将稳定版本放到网上。这可能在您的生产环境中,或者在类似于您的生产环境的暂存环境中。大多数人会等到他们的应用程序几乎完成后再将其在线托管——这就是我在开发我的第一个 React 和 Node 网络应用程序时所做的。然而,那时我在让我的 Node API 服务器运行方面遇到了很多挑战,我还必须对我的 React 应用程序进行大量更改。这就是为什么我建议尽早将一个版本放到网上,这样您就可以在编写太多代码之前进行调整。 == 使用共享托管服务 == Namecheap 的共享托管服务器使用 cPanel 作为控制面板界面来管理 Apache 服务器。这些说明还可以帮助任何使用 cPanel 共享托管服务的人,例如 A2 Hosting 和 GoDaddy。 我还为我的 Namecheap 服务器设置了 SSL 证书,cPanel 默认将所有 HTTP 流量重定向到 HTTPS。所以到我服务器的所有流量都是安全的。 您会发现许多指导您如何在 VPS(虚拟专用服务器)托管服务(例如 DigitalOcean)上托管 Node 应用程序的指南。如果您是从头开始,那么使用这样的服务托管将为您提供更多控制权。但它通常比共享主机贵。就我而言,我已经支付了 Namecheap 共享托管服务的费用。 使用 cPanel 和共享主机的一些优势: - 使用简单的 Web 管理控制台进行管理 - 易于配置 - 便宜,特别是如果您已经托管网站/域 - 如果您正在探索不同的技术,可以使用 PHP 等其他技术轻松设置动态网站 一些缺点: - 更少的控制权,因为您无权访问底层操作系统 - 不可扩展 == 一切都去哪儿了? == 首先,您需要为 Node 应用程序的所有源文件创建一个文件夹。我在 /home/username 目录中创建了一个名为 âïÂÃÂnodejsâïÂà 的文件夹,然后在该文件夹中为每个应用程序创建一个子文件夹。现在将所有源文件上传到此子文件夹中。确保你也包含了 package.json 文件。您不上传 Ãâ¢ÃÂà文件夹,因为该文件夹将由包管理器创建之后。 请记住,我们只是在我们的 Web 应用架构示例中托管 Node API 服务器。我们不会使用 Node 托管 React 应用程序(下一篇文章将详细介绍这个主题)。 httpsdavenewman.tech/wp-content/uploads/2020/06/Diagram-5_1.jpg 文件夹布局显示 /home/username/nodejs/mynodeapi 文件夹下的节点源文件,并且有一个/home/username/public_html/myapi 文件夹中的 .htaccess 文件 == 节点应用程序无法访问端口的问题 == 我最大的挑战是让我的 Node API 应用程序运行起来。问题是 Namecheap 的支持文档中给出的示例代码根本不起作用!它尝试创建一个 httpserver 来侦听端口 80 和一个 http **s** 服务器在端口 443 上。但是,我总是收到 EACCESS 错误,说我没有权限使用这些端口。 == 解决方案“节点不需要访问端口! == 最终,我通过阅读用户 SibProgrammer 在一个关于另一个托管控制面板 Plesk 的线程中的评论找到了解决方案。 cPanel 使用 Phusion Passenger 应用程序服务器来托管 Node 应用程序,Plesk 也是如此。总之: 当您从浏览器发送请求时,它会转到 Apache 服务器,然后转到 Phusion Passenger,最后转到您的 Node 应用程序。您的 Node 应用程序不需要拥有该端口,因为它由 Apache 和 Phusion Passenger 应用程序服务器进一步向上游处理。 这简化了在 www.js(或 app.js)文件中创建 httpserver 的代码: * www.js * 测试为 Namecheap 创建 http 服务器。 * Dave */ const http = require('http http.createServer(function(request, response) { response.writeHead(200, {'Content-Type': 'text/html response.endh1>Hello Worldh1 listen(process.env .PORT); console.log('应用正在运行 有几点需要注意: - 监听 process.env.PORT(而不是手动设置 80 或 443)。测试时我注意到 process.env.PORT 是未定义的!但有趣的是,在这种情况下这并不重要。 - 即使您设置了 SSL,也请使用 http 服务器。 cPanel 已将 Apache 配置为将所有 HTTP 流量重定向到 HTTPS,从而通过 HTTPS 响应所有请求。您不需要手动配置您的 Node 应用程序来设置 https 服务器并读取您的 SSL 证书。 == Node API 服务器的最终步骤 == 现在应该是按照说明设置节点应用程序的相对简单的过程。 httpsdavenewman.tech/wp-content/uploads/2020/06/Diagram-5_2.jpg cPanel 的 Node.js 配置页面截图 - 选择合适的Node.js版本和应用模式(推荐Production)。 - “应用程序根目录”将是您之前上传源文件的文件夹(“应用程序根目录”)上例中的 nodejs/mynodeapiâÃÂÃÂ)。 -“应用程序 URL”“应用程序 URL”将是用于访问您的 API 的 URL(“”示例中的 ¢ÃÂ)。您在此框中提供的名称将用于在您的 /home/username/public_html 文件夹中创建一个子文件夹。它不必与应用程序根文件夹名称相同(但经常会)。 -“应用程序启动文件”将是 www.js 或 app.js,具体取决于您创建 Node 应用程序的方式。 - 由您决定如何配置乘客日志文件。 - 一旦您创建了应用程序,您就会看到“运行 NPM 安装”的按钮¡运行此命令,它将创建一个 âÃÂïÂnode_modulesá 一旦您设置并启动了 Node 应用程序,它就会在您的 /home/public_html 文件夹中创建子文件夹。您现在需要转到该文件夹​​并编辑 .htaccess 文件并添加以下行: 重写引擎关闭 这可以防止 Apache 服务器重写(或重定向)任何需要原封不动地转到您的 API 服务器的请求。 就是这样!现在您的 Node API 应用程序应该启动并运行并响应您的 API 调用。 == 那么下一步是什么? == 现在我们已经设置了 Node API 服务器,我们可以在我们的开发环境中更改我们的 React 前端以指向这个 API 服务器。或者我们可以使用 Postman 来测试我们的 API 调用。 在下一篇文章中,我们将探讨在 Namecheap 和 cPanel 上托管 React 应用程序。