如何在单个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
打印当前目录。
对于每个域/服务,重复上述步骤。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。