超越静态托管:在 AWS EC2 上部署 Node.js 联系表单 API

发布: (2025年12月20日 GMT+8 20:48)
6 min read
原文: Dev.to

Source: Dev.to

抱歉,我没有看到需要翻译的正文内容。请提供您希望翻译的文本,我会按照要求将其翻译成简体中文并保留原有的格式。

为什么在联系表单中使用 EC2?

为了解释清楚,EC2 并不是托管静态作品集的“最佳”工具。托管服务的存在是有原因的,它们通常在可扩展性、安全性和简易性方面更适合此类使用场景。

然而,EC2 是学习的最佳工具之一。我想了解应用程序如何在真实服务器上运行,后端服务如何部署,流量如何在系统中流动,以及实际中如何处理正常运行时间和可靠性。

具体来说,我想获得在 Linux 服务器上动手操作的经验,管理长期运行的进程,配置反向代理,以及处理真实的 HTTP 请求。正是这个学习目标使得 EC2 成为本项目的正确选择。

我构建的内容

对于这个项目,我构建了一个小型的 Node.js 和 Express API,包含两个简单的端点:

  • GET /api/health – 健康检查
  • POST /api/contact – 接收来自我的作品集的联系表单提交

我没有依赖第三方表单服务,而是让前端直接将表单数据发送到此后端 API,从而对请求流程和服务器行为拥有完全的控制。

Source:

高层架构

在高层次上,架构如下所示:

  1. 用户在浏览器中与我的作品集交互。
  2. 请求通过互联网传输到 AWS EC2 实例。
  3. Nginx 在端口 80 上接收进入的流量。
  4. Nginx 将 API 请求(/api/*)转发到运行在端口 3000 并由 PM2 管理的 Node.js 应用程序。

此设置反映了许多真实生产系统的结构,即使在更大规模时也是如此。

步骤概览

  1. 配置 EC2 安全组 – SSH(端口 22)仅限我的 IP,HTTP(端口 80)对所有人开放。
  2. 启动 EC2 实例 – Ubuntu AMI,符合免费套餐的实例类型。
  3. 使用密钥对通过 SSH 连接;这让我意识到服务器并不是“部署即忘”的资源。
  4. 在服务器上安装 Node.js(LTS)和 npm
  5. 将后端项目复制到 EC2 实例,运行 npm install,并使用 node server.js 验证 API。
  6. 引入 PM2 – 一个进程管理器,可在后台运行应用,崩溃时自动重启,SSH 断开后仍保持运行,并确保在重启时启动。
  7. 安装 Nginx 并将其配置为反向代理:公共流量通过端口 80 进入,而对 /api/* 的请求会被代理到运行在端口 3000 的 Node.js 应用。此步骤涉及实际的请求路由,并需要修复 proxy_pass 配置中的尾斜杠问题。
# Example commands
ssh -i my-key.pem ubuntu@ec2-xx-xx-xx-xx.compute-1.amazonaws.com
sudo apt update && sudo apt install -y nodejs npm
npm install
node server.js
pm2 start server.js --name contact-api
pm2 startup
pm2 save
sudo apt install -y nginx
# Edit /etc/nginx/sites-available/default with proxy_pass configuration
sudo systemctl restart nginx

Source:

测试端到端

一切连线完成后,我对整个设置进行了端到端的测试:

  • 直接在服务器上使用 curl
  • 在浏览器的 Network(网络)面板中检查请求。
  • 从线上作品集提交联系表单。

Network inspection

看到来自云托管后端的一致 200 OK 响应,与本地测试的感觉截然不同,使整个系统显得更加真实。

我学到的

  • 云服务器上的后端服务需要适当的进程管理——PM2 对保持 Node.js 应用持续运行至关重要。
  • Nginx 是常见的前端代理,负责请求路由、TLS 终止以及安全加固。
  • 运营服务不仅仅是运行代码,还包括安全、监控和可靠性等方面的考量。
  • 使用 Linux、AWS EC2、Node.js 和 Nginx 让我对生产级工作流更有信心,并进一步理解了托管服务的存在意义——它们隐藏了大量底层复杂性。

如果你刚踏上云之旅并且想了解底层细节,我强烈建议尝试类似的实践。

Back to Blog

相关文章

阅读更多 »

仓库利用的权威指南

引言 仓库本质上只是一个 3‑D 盒子。利用率只是衡量你实际使用了该盒子多少的指标。虽然物流 c...