我正在使用 Bitbucket 管道将我的 Node 应用程序部署到运行 Linux 的 EC2 实例。我创建了一个脚本来启动我的应用程序:
# Source nvm and load Node.js environment for root user
export NVM_DIR="/home/ec2-user/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# Navigate to the API directory
cd /api
# Start the node server
npm start
我从 AppSpec.yml 中调用该脚本,如下所示:
hooks:
AfterInstall:
- location: deploy/nodestart.sh
timeout: 30
runas: root
管道执行失败。通过AWS控制台我可以看到应用程序的启动实际上成功了,但是Node服务器的启动是一个阻塞事件。脚本挂起,然后超过超时,被终止,然后部署失败。
如何与部署异步启动 Node,以便部署干净地终止?谢谢您的建议!
最终,我将其设置为作为服务运行,并在 /etc/systemd/system 中包含 lcapi.service 定义文件。
我将其复制作为管道部署的一部分。这些命令启用服务,重新加载操作系统的新服务定义,然后启动服务。
systemctl启用/etc/systemd/system/lcapi.service systemctl 守护进程重新加载 systemctl 启动 lcapi.service
有关设置 Linux 服务的更多信息,请参阅:https://natancabral.medium.com/run-node-js-service-with-systemd-on-linux-42cfdf0ad7b2