超越静态托管:在 AWS EC2 上部署 Node.js 联系表单 API
Source: Dev.to
抱歉,我没有看到需要翻译的正文内容。请提供您希望翻译的文本,我会按照要求将其翻译成简体中文并保留原有的格式。
为什么在联系表单中使用 EC2?
为了解释清楚,EC2 并不是托管静态作品集的“最佳”工具。托管服务的存在是有原因的,它们通常在可扩展性、安全性和简易性方面更适合此类使用场景。
然而,EC2 是学习的最佳工具之一。我想了解应用程序如何在真实服务器上运行,后端服务如何部署,流量如何在系统中流动,以及实际中如何处理正常运行时间和可靠性。
具体来说,我想获得在 Linux 服务器上动手操作的经验,管理长期运行的进程,配置反向代理,以及处理真实的 HTTP 请求。正是这个学习目标使得 EC2 成为本项目的正确选择。
我构建的内容
对于这个项目,我构建了一个小型的 Node.js 和 Express API,包含两个简单的端点:
- GET
/api/health– 健康检查 - POST
/api/contact– 接收来自我的作品集的联系表单提交
我没有依赖第三方表单服务,而是让前端直接将表单数据发送到此后端 API,从而对请求流程和服务器行为拥有完全的控制。
Source: …
高层架构
在高层次上,架构如下所示:
- 用户在浏览器中与我的作品集交互。
- 请求通过互联网传输到 AWS EC2 实例。
- Nginx 在端口 80 上接收进入的流量。
- Nginx 将 API 请求(
/api/*)转发到运行在端口 3000 并由 PM2 管理的 Node.js 应用程序。
此设置反映了许多真实生产系统的结构,即使在更大规模时也是如此。
步骤概览
- 配置 EC2 安全组 – SSH(端口 22)仅限我的 IP,HTTP(端口 80)对所有人开放。
- 启动 EC2 实例 – Ubuntu AMI,符合免费套餐的实例类型。
- 使用密钥对通过 SSH 连接;这让我意识到服务器并不是“部署即忘”的资源。
- 在服务器上安装 Node.js(LTS)和 npm。
- 将后端项目复制到 EC2 实例,运行
npm install,并使用node server.js验证 API。 - 引入 PM2 – 一个进程管理器,可在后台运行应用,崩溃时自动重启,SSH 断开后仍保持运行,并确保在重启时启动。
- 安装 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(网络)面板中检查请求。
- 从线上作品集提交联系表单。

看到来自云托管后端的一致 200 OK 响应,与本地测试的感觉截然不同,使整个系统显得更加真实。
我学到的
- 云服务器上的后端服务需要适当的进程管理——PM2 对保持 Node.js 应用持续运行至关重要。
- Nginx 是常见的前端代理,负责请求路由、TLS 终止以及安全加固。
- 运营服务不仅仅是运行代码,还包括安全、监控和可靠性等方面的考量。
- 使用 Linux、AWS EC2、Node.js 和 Nginx 让我对生产级工作流更有信心,并进一步理解了托管服务的存在意义——它们隐藏了大量底层复杂性。
如果你刚踏上云之旅并且想了解底层细节,我强烈建议尝试类似的实践。