我的 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 应用程序已启动。您将需要一个完整的路径。我配置了如果出现问题,应用程序应该简单地重新启动。默认情况下,Amazon 使用的实例没有用户密码。
从磁盘重新加载文件,然后您就可以启动您的服务了。您需要启用它以使其作为服务激活,该服务会在启动时自动启动。
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 系统教程可用here。
如果您运行网络服务器:
您可能会在端口 80 上运行您的网络服务器时遇到一些问题。最简单的解决方案实际上是在不同的端口(例如 4200)上运行您的网络服务器,然后将该端口重定向到端口 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 月更新)
前面提到的解决方案提供了很大的灵活性,但设置它确实需要一些时间。对于每个额外的应用程序,您都需要再次完成整个过程。当您安装第 5 个节点应用程序时,您肯定会开始怀疑:“必须有一个快捷方式”。
PM2 的优势在于它只需安装一项服务。接下来是管理实际应用程序的 PM2。
即使是 PM2 的初始设置也很容易,因为它会自动为您安装 pm2 服务。
npm install pm2 -g
而且添加新服务更加容易:
pm2 start index.js --name "foo"`.
一切正常运行后,您可以保存设置,让它在重新启动时自动启动。
pm2 save
如果您想了解所有正在运行的节点应用程序,
你可以运行pm2 list
PM2 还提供了一个在线(基于 Web)仪表板来远程监控您的应用程序。不过,您可能需要许可证才能访问某些仪表板功能(恕我直言,这有点高估了)。