使用 systemd 服务运行服务器后无法访问服务器

使用 systemd 服务运行服务器后无法访问服务器

我试图在我的 VPS 上持续运行 NodeJs 服务器,我创建了一个systemd服务并启动了它。

我的服务器仍然无法访问,我可以检查状态并且它可以正常工作:

服务状态:

Node.service - Runs the Node Server for Node API
   Loaded: loaded (/etc/systemd/system/Node.service; disabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-05-12 16:16:38 CEST; 2min 37s ago
 Main PID: 26697 (node)
    Tasks: 10
   Memory: 87.5M
      CPU: 2.734s
   CGroup: /system.slice/Node.service
           └─26697 /root/.nvm/versions/node/v9.11.1/bin/node www

May 12 16:16:38 vps543107 systemd[1]: Started Runs the Node Server for Node API.
May 12 16:16:41 vps543107 node[26697]: Listening on port 3000

服务 :

[Unit]
Description=Runs the Node Server for Node API
Documentation="No Docs"
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/root/Node/bin
ExecStart=/root/.nvm/versions/node/v9.11.1/bin/node www
Restart=on-failure

[Install]
WantedBy=multi-user.target

我无法通过任何 HTTP 请求到达服务器,所有请求都超时。

我的服务有问题吗?

答案1

尝试以下

[Unit]
Description="Runs the Node Server for Node API"
#Requires=After=mysql.service       # If you have any dependency then add it

[Service]
ExecStart=/root/.nvm/versions/node/v9.11.1/bin/node /root/Node/bin/www
Restart=always
# Restart service after 10 seconds if node service crashes
RestartSec=10

# Output to syslog
StandardOutput=syslog
StandardError=syslog
#Change this to find app logs in /var/log/syslog
SyslogIdentifier=nodejs-api
# Followig will require if you are using the PORT or Node from Envirnoment
Environment=NODE_ENV=production PORT=3000

[Install]
WantedBy=multi-user.target

一旦您的服务器计算机启动并且您无法访问服务器,您可以通过以下命令检查 /var/log/syslog 中的日志来进行故障排除

sudo cat /var/log/syslog | grep -r "nodejs-api"

开机启动:sudo systemctl 启用 Rocketchat

答案2

启动您的应用程序以After=network-online.target确保在启动之前网络已完全启动。

您提到该应用程序并非无法通过“HTTP”使用。您是否打算在服务器端口 80(默认 HTTP 端口)上的端口 3000 上运行该应用程序?您是否在运行它的同一端口上测试它?

运行您的应用程序User=root存在安全风险。您的网络应用程序中的安全缺陷可能会直接导致您的 VPS 完全受到损害。考虑以非特权用户身份运行您的应用程序以降低该风险。

如果您的应用程序要在启动时启动,请确保您已systemctl enable your-app启用它在启动时启动。

另外,我看到你正在使用 NVM。它似乎根据您的服务状态工作,但不是我对生产服务的建议。它依赖于环境变量,这使得它更加脆弱。

我建议使用n包管理器改为用于生产,它仅使用符号链接来切换版本,而不使用环境变量。

另请参阅关于手动启动时为何无法在系统下运行的常见问题解答

相关内容