Deployment
一个 Node.js 服务的稳定部署:Nginx、HTTPS 与 systemd
把职责拆开
小型服务不需要复杂的平台,但需要清楚的边界。Node.js 只处理业务和 API;Nginx 负责公网 HTTPS、证书、静态文件与反向代理;systemd 负责进程存活与开机启动。任何一层出问题时,排查范围都会更小。
应用不直接暴露公网端口
应用应该监听本机地址,例如 127.0.0.1:8100。Nginx 再将 443 的请求转发给它。这样既不需要让用户看到端口,也减少了应用直接面对扫描流量的机会。
server {
listen 443 ssl;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8100;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}让进程在异常后自行恢复
手工在终端启动服务很容易在 SSH 断开或服务器重启后失效。systemd 的价值不在于命令多,而在于让启动方式可重复、可检查。
[Service]
WorkingDirectory=/opt/app
ExecStart=/usr/bin/node server.js
Restart=on-failure
RestartSec=3
Environment=NODE_ENV=production上线后检查什么
- 公网 HTTPS 是否可访问,HTTP 是否正确跳转。
- 服务重启后是否会自动恢复。
- 日志、数据库和上传文件是否有独立备份。
- 应用端口是否只允许本机或反向代理访问。
稳定上线不是一次成功访问,而是在重启、证书续期和偶发网络问题之后仍能按预期恢复。