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

2024-06-17 11:12

本文主要是介绍如何在单个VPS上使用nginx、forever和crontab托管多个Node.js应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

遵循本教程的要求


您需要安装 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 ]
      thenexport PATH=/usr/local/bin:$PATHforever 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 打印当前目录。

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

    这篇关于如何在单个VPS上使用nginx、forever和crontab托管多个Node.js应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



    http://www.chinasem.cn/article/1069281

    相关文章

    Nginx屏蔽服务器名称与版本信息方式(源码级修改)

    《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

    在Android中使用WebView在线查看PDF文件的方法示例

    《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

    Java Stream流与使用操作指南

    《JavaStream流与使用操作指南》Stream不是数据结构,而是一种高级的数据处理工具,允许你以声明式的方式处理数据集合,类似于SQL语句操作数据库,本文给大家介绍JavaStream流与使用... 目录一、什么是stream流二、创建stream流1.单列集合创建stream流2.双列集合创建str

    Python使用FastAPI实现大文件分片上传与断点续传功能

    《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

    Spring Security简介、使用与最佳实践

    《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

    Nginx部署HTTP/3的实现步骤

    《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

    springboot中使用okhttp3的小结

    《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

    Linux下MySQL数据库定时备份脚本与Crontab配置教学

    《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

    Java使用Javassist动态生成HelloWorld类

    《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

    使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

    《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结