Lightsail 是 AWS 中简洁的一角。固定月费,一键创建 Linux 服务器,SSH 登录即可运行代码。没有 EC2 的附加费用,没有繁琐的 IAM 配置。这是在不承受 AWS 复杂性代价的前提下使用 AWS 的最佳选择。
大多数想用小型 Linux 服务器运行 Node API 的人其实并不需要 AWS。DigitalOcean droplets、Hetzner Cloud、Fly machines——这些选择都更简单、更便宜、上手更快。选择 Lightsail 的理由通常只有两种:要么你已经有 AWS 基础设施(S3 存储桶、RDS 数据库、SES 邮件)需要与这台服务器集成;要么你公司有"只用 AWS"的规定。除此之外,Lightsail 不错,但并无突出优势。
Lightsail 之所以存在,是因为 EC2 对于"我只想要一台 $5 的 Linux 服务器"这个需求来说实在太复杂了。EC2 每个实例有六七项计费条目;Lightsail 只收一笔费用。EC2 的公网 IP 藏在弹性 IP 后面——附加时免费,一旦解绑就开始收费;Lightsail 的静态 IP 是包含在内的。EC2 有安全组、网络 ACL、VPC、子网和路由表;Lightsail 只有一个防火墙开关。代价是 Lightsail 的配置选项较少——如果你的工作负载需要更多控制,就该从 Lightsail 迁移到 EC2 了。
本教程将带你完成以下步骤:使用 Node.js 蓝图创建 Lightsail 实例、部署应用、用进程管理器持续运行它、开放防火墙端口、绑定域名,以及申请免费 TLS 证书。最终目标:让 https://api.mybrand.com 指向你的 Node API。实例创建我们会用 AWS 控制台(CLI 也可以,但控制台在这里更直观),其余步骤都在命令行完成。
在 AWS 控制台中打开 Lightsail(注意:它有独立的控制台地址 lightsail.aws.amazon.com,与主 AWS 控制台分开——功能相同,URL 不同)。点击 Create instance(创建实例):
us-east-1 是个稳妥的默认选项。mybrand-api-prod 这样的命名。点击 Create。实例在 60–90 秒内启动完毕。Lightsail 会分配一个公网 IP 和内部名称。新账号在 AWS 免费套餐下,第一个月免费。
两种方式:
~/.ssh/lightsail.pem,执行 chmod 600 ~/.ssh/lightsail.pem,然后:
ssh -i ~/.ssh/lightsail.pem bitnami@<PUBLIC_IP>
# Node.js 蓝图的用户名是 bitnami,Ubuntu 蓝图的用户名是 ubuntu。
登录成功后,Node.js 蓝图的主目录下会有 /opt/bitnami/,里面包含 nginx 和预置的 Node 示例应用。
# 方式 A:git clone(公开仓库或使用 deploy key)
cd ~
git clone https://github.com/you/your-api.git
cd your-api
npm ci --production
# 在 /etc/environment 或应用读取的 .env 文件中设置环境变量。
# 方式 B:从本地用 rsync 推送(服务器无法访问 git)
# 在本地执行:
rsync -avz --exclude node_modules \
-e "ssh -i ~/.ssh/lightsail.pem" \
./ bitnami@<PUBLIC_IP>:/home/bitnami/your-api/
# 然后在服务器上执行:
cd ~/your-api
npm ci --production
先手动测试一下:执行 node server.js(或你的入口文件),确认应用能正常启动并监听端口——通常是 3000 或 8080。停止它(Ctrl+C);下一步我们会让它持续运行。
Node.js 蓝图已预装 PM2。若使用纯 Ubuntu 蓝图,执行:sudo npm i -g pm2。
cd ~/your-api
pm2 start server.js --name api
pm2 save
pm2 startup
# pm2 startup 会打印一条命令——以 root 身份执行它,
# 将 PM2 注册为 systemd 服务,使其在重启后自动恢复。
现在你的 API 已在 http://<PUBLIC_IP>:3000(或你应用监听的端口)上运行。测试一下:
curl http://<PUBLIC_IP>:3000/health
# 目前会超时——防火墙还没放行。那是第 5 步的内容。
常用 PM2 命令:pm2 logs api(实时日志)、pm2 restart api、pm2 monit(交互式监控面板)。
Lightsail 防火墙默认只开放 SSH(22 端口),其余全部屏蔽。开放 Web 端口:
不要直接将 3000 端口暴露到公网——nginx 会在你的 Node 应用前面监听 80/443 端口(蓝图已预装并运行 nginx),并将请求代理转发给 Node 进程。从本地执行 curl http://<PUBLIC_IP>,应该能看到默认的 nginx 页面或蓝图示例应用。
在 Node.js 蓝图上,nginx 配置位于 /opt/bitnami/nginx/conf/server_blocks/。在该目录创建一个文件:
sudo nano /opt/bitnami/nginx/conf/server_blocks/api.conf
粘贴以下内容:
server {
listen 80;
server_name api.mybrand.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
重载:sudo /opt/bitnami/ctlscript.sh restart nginx。现在 nginx 已将 api.mybrand.com:80 的请求代理到 127.0.0.1:3000 上的 Node 进程。
Lightsail 的默认 IP 是"动态"的——重启能保留,但关机重开后会变。绑定真实域名需要一个固定不变的静态 IP:
现在将你的域名指向静态 IP。在 Route 53(或你的 DNS 服务商)中:创建一条 A 记录,名称填 api,值填你的静态 IP。DNS 教程涵盖了各类 DNS 记录的通用说明;这里是最直接的 A 记录场景。
在 Node.js 蓝图上,certbot 已预装。SSH 登录后执行:
sudo /opt/bitnami/bncert-tool
该工具会询问你的域名、邮箱,以及是否启用 HTTP 转 HTTPS 重定向。选择启用重定向。它会自动修改 nginx 配置、签发证书并设置自动续期。整个过程两分钟,无需手动编辑 nginx。
若使用纯 Ubuntu 蓝图(无 Bitnami):执行 sudo apt install certbot python3-certbot-nginx,然后 sudo certbot --nginx -d api.mybrand.com --redirect。效果相同,步骤稍多。
测试:curl -I https://api.mybrand.com/health。你应该看到 HTTP/2 200(或你的健康检查接口返回的状态码)。HTTP→HTTPS 重定向已生效;证书通过 cron 任务每 90 天自动续期。
每次推送更新代码时,常规工作流如下:
# 本地:推送到仓库
git push origin main
# 服务器:拉取并重启
ssh -i ~/.ssh/lightsail.pem bitnami@<STATIC_IP>
cd ~/your-api
git pull
npm ci --production # 如果依赖有变化
pm2 restart api
想要更省事,可以在本地写一个 shell 脚本,通过 SSH 执行同样的命令:
#!/usr/bin/env bash
ssh -i ~/.ssh/lightsail.pem bitnami@<STATIC_IP> \
'cd ~/your-api && git pull && npm ci --production && pm2 restart api'
如果想用真正的 CI/CD,一个 SSH 进服务器并执行相同命令的 GitHub Actions workflow 大约只需 15 行代码。要实现零停机部署(更进一步),可以考虑 PM2 的 reload 命令,或将 PM2 与轻量级反向代理切换方案配合使用。
你需要自动扩缩容。Lightsail 是单实例方案。如果流量超过单台服务器的承载能力,你需要 EC2 + ALB + Auto Scaling Group,或者迁移到像 ECS Fargate 这样的容器编排平台。
你需要 VPC 对等连接或私有子网。Lightsail 实例运行在托管 VPC 中,无法与其他 VPC 对等互联。如果服务器需要访问 RDS、ElastiCache 或 AWS 侧的私有资源,EC2 才是正确选择。
你需要超过 $80/月套餐(32 GB 内存、8 vCPU)的配置。Lightsail 的最大规格是固定的;超过这个上限,只能选择 EC2。