You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将NodeJS服务器部署到AWS CodeDeploy时遇ApplicationStart超时问题

解决CodeDeploy中ApplicationStart脚本超时问题

你的问题核心是npm run start会前台运行Node服务器,阻塞脚本进程导致无法退出,最终触发CodeDeploy的超时机制。以下是几种可行的解决方案:

方案1:用nohup让服务后台运行(快速临时解决)

修改start_server.sh脚本,将npm run start改为后台执行,同时重定向日志:

cd /home/ubuntu/SimpleNodeJSServer
npm run ci-build
# 后台启动服务,将输出写入日志文件,脱离当前终端
nohup npm run start > /home/ubuntu/SimpleNodeJSServer/server.log 2>&1 &
# 可选:等待几秒确保服务启动完成,避免脚本过早退出导致服务未就绪
sleep 3
exit 0
  • nohup:让进程脱离当前终端会话,即使脚本退出也能继续运行
  • > server.log 2>&1:将标准输出和错误输出都写入日志文件,方便后续排查问题
  • &:将进程放到后台执行,释放脚本进程使其继续执行到exit 0

方案2:用pm2管理进程(生产环境推荐)

pm2是Node.js专用的进程管理器,能自动守护进程、重启崩溃服务,更适合生产环境:

  1. 先修改install_dependencies.sh,添加pm2的安装命令:
# 原有的依赖安装命令后添加
npm install -g pm2
  1. 修改start_server.sh脚本:
cd /home/ubuntu/SimpleNodeJSServer
npm run ci-build
# 启动服务并指定进程名,方便后续管理
pm2 start ./dist/src/index.js --name "SimpleNodeJSServer"
# 保存pm2进程列表,服务器重启后自动恢复服务
pm2 save
# 设置pm2开机自启(针对systemd系统)
pm2 startup systemd -u ubuntu --hp /home/ubuntu
exit 0

pm2启动的进程默认在后台运行,脚本执行完命令后会立即退出,不会触发超时,同时还能提供进程监控、日志管理等功能。

方案3:配置systemd服务(最稳定的生产级方案)

用Linux系统的systemd服务管理器来托管Node进程,是最稳定的生产环境部署方式:

  1. 在目标服务器上创建服务文件/etc/systemd/system/simple-node-server.service,内容如下:
[Unit]
Description=Simple Node.js Server
After=network.target

[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/SimpleNodeJSServer
ExecStart=/usr/bin/npm start
Restart=always
RestartSec=10
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target
  1. 修改start_server.sh脚本:
cd /home/ubuntu/SimpleNodeJSServer
npm run ci-build
# 重新加载systemd配置,确保新服务生效
systemctl daemon-reload
# 启动服务
systemctl start simple-node-server.service
# 设置服务开机自启
systemctl enable simple-node-server.service
exit 0

systemd会负责服务的启动、监控和自动重启,CodeDeploy的脚本仅需触发服务启动操作,执行后立即退出,彻底避免超时问题。

内容的提问来源于stack exchange,提问作者Coni Wright

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 12:35:21