如何在单个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

    相关文章

    Python使用openpyxl读取Excel的操作详解

    《Python使用openpyxl读取Excel的操作详解》本文介绍了使用Python的openpyxl库进行Excel文件的创建、读写、数据操作、工作簿与工作表管理,包括创建工作簿、加载工作簿、操作... 目录1 概述1.1 图示1.2 安装第三方库2 工作簿 workbook2.1 创建:Workboo

    使用Go实现文件复制的完整流程

    《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

    postgresql使用UUID函数的方法

    《postgresql使用UUID函数的方法》本文给大家介绍postgresql使用UUID函数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录PostgreSQL有两种生成uuid的方法。可以先通过sql查看是否已安装扩展函数,和可以安装的扩展函数

    如何使用Lombok进行spring 注入

    《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

    MySQL中比较运算符的具体使用

    《MySQL中比较运算符的具体使用》本文介绍了SQL中常用的符号类型和非符号类型运算符,符号类型运算符包括等于(=)、安全等于(=)、不等于(/!=)、大小比较(,=,,=)等,感兴趣的可以了解一下... 目录符号类型运算符1. 等于运算符=2. 安全等于运算符<=>3. 不等于运算符<>或!=4. 小于运

    使用zip4j实现Java中的ZIP文件加密压缩的操作方法

    《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

    Python 字典 (Dictionary)使用详解

    《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)... 目录字典1.基本特性2.创建字典3.访问元素4.修改字典5.删除元素6.字典遍历7.字典的高级特性默认字典

    使用Python构建一个高效的日志处理系统

    《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

    Nginx安全防护的多种方法

    《Nginx安全防护的多种方法》在生产环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

    nginx中端口无权限的问题解决

    《nginx中端口无权限的问题解决》当Nginx日志报错bind()to80failed(13:Permissiondenied)时,这通常是由于权限不足导致Nginx无法绑定到80端口,下面就来... 目录一、问题原因分析二、解决方案1. 以 root 权限运行 Nginx(不推荐)2. 为 Nginx