我的Amazon 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
很遗憾,这种方法
不是持久的,因此每次服务器重新启动时都需要重复执行。
更好的方法是在服务脚本中包含以下命令:
ExecStartPre
添加端口转发
ExecStopPost
删除端口转发
PermissionStartOnly
使用sudo权限执行
因此,可以像这样操作:
[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 cloudyleela
[ec2-user@ip-172-31-39-212 system]$ sudo systemctl start cloudyleela
[ec2-user@ip-172-31-39-212 system]$
针对微服务 (2020年12月更新)
之前提到的解决方案具有很大的灵活性,但需要一些时间来设置。每增加一个应用程序,都需要重新进行整个流程。当您要安装第五个节点应用程序时,您肯定会开始想:"肯定有捷径"。
PM2的优点在于只需安装1个服务。接下来是由PM2管理实际应用程序。
即使是PM2的初始设置也很容易,因为它会自动为您安装pm2服务。
npm install pm2 -g
添加新服务甚至更容易:
pm2 start index.js --name "foo"`.
当所有设定都完成并运行正常后,您可以保存设置,以便在重新启动时自动启动。
pm2 save
如果您想了解所有正在运行的节点应用程序的概述,可以运行
pm2 list
。PM2还提供了一个在线(基于Web)的仪表板,以远程监视您的应用程序。但是,您可能需要许可证才能访问某些仪表板功能(价格有点过高,个人认为)。