如何使用nginx、forever和crontab在单个VPS上托管多个Node.js应用程序

来自菜鸟教程
跳转至:导航、​搜索

遵循本教程的要求


您需要安装 nginx 和 Node.js,并且在 DigitalOcean 上已经有关于这些主题的编写良好的教程:

如何安装nginx如何安装Node.js

此外,您应该已经拥有一个域,以便将正在运行的 Node.js 服务映射到一个域名,而不是导航到 http://[your-vps-ip]:[port]。

使用 Forever 运行您的 Node.js 应用程序


Forever 是一个简单的命令行工具,用于确保 Node.js 应用程序连续运行(即 永远)。 这意味着如果您的应用程序遇到错误并崩溃,永远会处理此问题并为您重新启动它。

只需在全球范围内永久安装,并且可以在几秒钟内永久使用:

npm install forever -g

要永久启动脚本,您需要执行以下步骤:

导航到您的 Node.js 应用程序:

cd /path/to/your/node/app/

并永远运行服务器/主 JavaScript 文件:

forever start --spinSleepTime 10000 main.js

其中 --spinSleepTime 10000 是指启动崩溃脚本之间的最短正常运行时间(以毫秒为单位)。 该命令几乎适用于所有情况。

现在将您的浏览器指向 http://[your-vps-ip]:[port] 并查看您的应用程序正在运行。

将域映射到您的 Node.js 应用程序


现在您需要在 DigitalOcean 控制面板中添加 DNS 记录,以将您的域名映射到您的 Droplet (VPS)。

要遵循的步骤是:

  1. 登录 DigitalOcean.com
  2. 点击左侧边栏中的“DNS”部分
  3. 通过单击“添加域”按钮添加域,选择您选择的 VPS 并在“名称”字段中输入您注册的域名
  4. 复制 DigitalOcean 提供的域名服务器(例如 NS1.DIGITALOCEAN.COM .) 并将每一项添加到域名注册商控制面板中的 DNS 记录中。

注意:更改不会立即生效,因为 DNS 最多可能需要 24 小时才能传播。

使用 nginx 将域映射到在您的 VPS 上运行的服务


在本节中,您将学习如何通过几个简单的步骤使用 nginx 设置 反向代理

首先,使用您喜欢的编辑器(我将使用 nano)在 /etc/nginx/conf.d/ 中为您想要的域创建一个文件。 出于一致性原因,该文件应以域名命名。

nano /etc/nginx/conf.d/example.com.conf

注意:您可以随意调用文件,重要的部分是 .conf 扩展名。

在此文件中,您需要复制以下代码片段并将其粘贴到之前创建的文件中:

server {
    listen 80;

    server_name your-domain.com;

    location / {
        proxy_pass http://localhost:{YOUR_PORT};
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

现在只需将 your-domain.com 替换为您注册的域,将 YOUR_PORT 替换为您的 Node.js 应用程序在您的 VPS 上监听的端口。

注意:为了能够为一个 Node.js 应用程序引用多个域(如 www.example.comexample.com),您需要将以下代码添加到文件 [ http 部分中的 X171X]:

server_names_hash_bucket_size 64;

如果 DNS 更改被传播,您可以将 Web 浏览器指向您的域,您应该会看到您的应用程序正在运行,可以从 Internet 访问。

在重启时重启你的 Node.js 应用


Forever 在崩溃时保持应用程序运行等方面非常有用。 但是当 VPS 重新启动时会发生什么?

这是一个简单的 cronjob 可以防止您的应用程序和用户意外停机的地方。

在应用程序的主文件夹中创建一个名为 starter.sh 的文件并复制以下代码:

#!/bin/sh

if [ $(ps -e -o uid,cmd | grep $UID | grep node | grep -v grep | wc -l | tr -s "\n") -eq 0 ]
then
        export PATH=/usr/local/bin:$PATH
        forever start --sourceDir /path/to/your/node/app main.js >> /path/to/log.txt 2>&1
fi

其中 main.js 应替换为应用程序的主脚本。

这个有用的片段取自here

要在每次重新启动时启动此脚本,您需要使用以下命令编辑 crontab:

crontab -e

并将以下代码附加到此文件

@reboot /path/to/starter.sh

现在设置 starter.sh 文件的绝对路径。

提示:导航到 starter.sh 文件所在的位置,并使用 pwd 打印当前目录。

对您的每个域/服务重复上述步骤。

提交人: [[“%3Ca|https]] ://twitter.com/christian_fei [[“%3C/a|”>克里斯蒂安·费]]