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

白如意i 2024-06-24 10:37:01 阅读 89

遵循本教程的要求


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

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

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

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


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

只需全局安装 forever,然后可以在几秒钟内使用 forever:

npm install forever -g

要使用 forever 启动脚本,您需要按照以下步骤进行操作:

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

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

并使用 forever 运行 server/main JavaScript 文件:

forever start --spinSleepTime 10000 main.js

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

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

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


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

要遵循的步骤如下:

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

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

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


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

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

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.conf 中的 http 部分:

server_names_hash_bucket_size 64;

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

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


当 VPS 重新启动时,Forever 在处理应用程序崩溃等方面表现良好,但是当 VPS 重新启动时会发生什么呢?

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

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

#!/bin/shif [ $(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>&1fi

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

此有用的代码片段来自于此处

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

crontab -e

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

@reboot /path/to/starter.sh

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

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

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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。