我如何能够自动在亚马逊的Linux AMI在AWS上使Node.js应用程序?(How can I

2019-06-25 22:29发布

是否有一个简短的指南,以说明如何在实例启动和运行启动一个应用程序? 如果是通过安装在服务的一个yum话,我想我可以使用/sbin/chkconfig将其添加到该服务。 (使它肯定,是正确的吗?)

不过,我只是想运行哪个不是通过安装程序yum 。 要运行的node.js程序,我将不得不运行脚本sudo node app.js在家目录每当系统启动。

我不习惯亚马逊的Linux AMI所以我有一点麻烦找到一个“正确”的方式,在每次启动时自动运行一些脚本。

有一种优雅的方式来做到这一点?

Answer 1:

一种方法是创建一个暴发户的工作。 这样,你的应用程序将启动,一旦Linux的加载,如果它崩溃会自动重新启动,你就可以开始/停止/启动由它sudo start yourapp / sudo stop yourapp / sudo restart yourapp

下面是开始步骤:

1)安装新贵实用程序(可预先安装,如果你使用一个标准的Linux亚马逊AMI):

sudo yum install upstart

对于Ubuntu的:

sudo apt-get install upstart

2)为您的节点的应用程序创建脚本新贵:

/etc/init添加文件yourappname.conf具有以下几行代码:

#!upstart
description "your app name"

start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

env NODE_ENV=development

# Warning: this runs node as root user, which is a security risk
# in many scenarios, but upstart-ing a process as a non-root user
# is outside the scope of this question
exec node /path_to_your_app/app.js >> /var/log/yourappname.log 2>&1

3)启动您的应用程序sudo start yourappname



Answer 2:

您可以使用永久服务的部署节点脚本作为服务和启动时自动启动。 下面的命令将做要紧,

npm install -g forever-service
forever-service install test

这就会把app.js在当前目录中通过一个永远的服务。 该服务将自动重启,每次重新启动系统。 也停止时,它会尝试正常停止。 该脚本规定的logrotate脚本也是如此。

Github上网址: https://github.com/zapty/forever-service

截至目前,永远服务支持亚马逊的Linux,CentOS的,对于其他Linux发行版红帽的支持,Mac和Windows都在作品..

注:我永远服务的作者。



Answer 3:

快速解决方案,你会从开始您的应用程序/etc/rc.local ; 只需添加您的命令在那里。

但是,如果你想要去的优雅的方式,你必须打包在rpm文件您的应用程序,有去启动脚本/etc/rc.d ,这样就可以使用chkconfig关于您的应用程序,然后安装rpm您的实例。

也许这还是这帮助。 (或只是谷歌“创造的rpm包”)



Answer 4:

您可以创建一个脚本,可以启动和停止的应用程序,并将其放置在/etc/init.d; 使脚本坚持的chkconfig的约定(如下图),然后使用命令行工具来设置它,当其他服务开始启动。

你可以选择从/etc/init.d中作为例子来使用现有的脚本; 本文介绍了要求,这基本上是:

  • 标识所需的外壳可执行脚本(即#!/斌/庆典)
  • 形式#chkconfig的的注释:其中往往是345,startprio指示了服务的顺序启动,并stopprio就是在服务才能停止。 我一般选择那些已经存在类似的服务,并以此作为对这些价值导向(即,如果你有一个网站相关的服务,开始在同一水平的httpd,具有类似的启动和停止的优先级)。

一旦你的脚本设置,您可以使用

 chkconfig --add yourscript 
 chkconfig yourscript on 

你应该是好去。 (一些发行版可能需要您手动符号链接到脚本/etc/init.d/rc.d,但我相信,当你使脚本您的AWS发行会为你做的。



Answer 5:

使用弹性魔豆:)提供了自动缩放,SSL终止,蓝/绿部署,支持等



Answer 6:

我的亚马逊的Linux实例在Ubuntu上运行,而我用systemd来进行设置。

首先,你需要创建一个<servicename>.service文件。 (在我的情况cloudyleela.service

sudo nano /lib/systemd/system/cloudyleela.service

键入此文件中的以下内容:

[Unit]
Description=cloudy leela
Documentation=http://documentation.domain.com
After=network.target

[Service]
Type=simple
TimeoutSec=0
User=ubuntu
ExecStart=/usr/bin/node /home/ubuntu/server.js
Restart=on-failure

[Install]
WantedBy=multi-user.target

在这种应用中的node启动应用程序。 在这里你会需要一个完整的路径。 我配置了,如果出现错误的程序应该简单地重新启动。 亚马逊使用的情况下,为他们的用户在默认情况下没有密码。

重新从磁盘上的文件,然后你就可以开始你的服务。 您需要启用它,使之积极作为一种服务,它在启动时自动启动。

ubuntu@ip-172-31-21-195:~$ sudo systemctl daemon-reload
ubuntu@ip-172-31-21-195:~$ sudo systemctl start cloudyleela
ubuntu@ip-172-31-21-195:~$ sudo systemctl enable cloudyleela
Created symlink /etc/systemd/system/multi-user.target.wants/cloudyleela.service → /lib/systemd/system/cloudyleela.service.
ubuntu@ip-172-31-21-195:~$

对于node.js的教程伟大systemd,请点击这里 。

如果你运行一个Web服务器:

你可能会在80端口上运行你的web服务器的一些问题和简单的解决方案,实际上是一个不同的端口(例如4200)上运行您的Web服务器,然后重定向端口到端口80。你可以用下面的命令做到这一点:

sudo iptables -t nat -A PREROUTING -i -p tcp --dport 80 -j REDIRECT --to-port 4200

不幸的是,这是不是持久的 ,所以你必须重复它时,您的服务器重新启动。 更好的方法是在我们的服务脚本还包括以下命令:

  1. ExecStartPre添加端口转发
  2. ExecStopPost删除端口转发
  3. PermissionStartOnly与须藤功率做到这一点

所以,这样的事情:

[Service]
...
PermissionsStartOnly=true
ExecStartPre=/sbin/iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 4200
ExecStopPost=/sbin/iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 4200

不要忘了重新加载,然后重新启动服务:

[ec2-user@ip-172-31-39-212 system]$ sudo systemctl daemon-reload
[ec2-user@ip-172-31-39-212 system]$ sudo systemctl stop zbaduk.ishida
[ec2-user@ip-172-31-39-212 system]$ sudo systemctl start zbaduk.ishida
[ec2-user@ip-172-31-39-212 system]$


Answer 7:

您可以使用screen 。 运行crontab -e ,并添加这一行:

@reboot  screen -d -m bash -c "cd /home/user/yourapp/; node app"


Answer 8:

一直在使用永远在AWS上,它做得很好。 安装使用

 [sudo] npm install forever -g

要添加应用程序的使用

 forever start path_to_application

并停止应用程序使用

 forever stop path_to_application

这是一个有用的文章,帮助我设置它。



文章来源: How can I automatically start a node.js application in Amazon Linux AMI on aws?