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

这是我们的教程,在单个VPS上托管多个Node.js应用程序,使用nginx,forever和crontab。

遵循本教程的要求


您需要安装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/

并使用forever运行服务器/主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提供的Nameservers(例如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.com和example.com),你需要将下面的代码添加到该文件/etc/nginx/nginx.confhttp部分:

server_names_hash_bucket_size 64;

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

在重新启动时重新启动Node.js应用程序


永远是好的,当它涉及到保持你的应用程序运行时,当它崩溃等,但是当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应该与您的应用程序的主脚本进行更换。

这个有用的片段已被取自这里

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

crontab -e

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

@reboot /path/to/starter.sh

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

提示:浏览您的starter.sh文件的位置,并显示当前目录pwd

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

:提交基督教飞