如何在单个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 打印当前目录。

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

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/28684.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    手把手教学!新一代 Kaldi: TTS Runtime ASR 实时本地语音识别 语音合成来啦

    简介 本文向大家介绍如何在新一代 Kaldi的部署框架 **sherpa-onnx**中使用 TTS。 注:sherpa-onnx 提供的是一个TTS runtime, 即部署环境。它并不支持模型训练。 本文使用的测试模型,都是来源于网上开源的 VITS 预训练模型。 我们提供了 ONNX 导出的支持。如果你也有 VITS 预…

    你应该知道的口语连读技巧

    [共24课]连读弱读-发音课程已上线 第一课 辅音和元音的连读 linking consonant to vowel 辅音和元音连读 第二课 h和th的删除不读 h-删除|deletion|elision|drop he/her/have/here/him... them-->/əm/ 第三课 t的删去不读(1) t-deletion|elision(1) drop t after…

    GEO ISP图像调试-PFC(蓝紫边校正)

    目录 1、简单介绍 2、调试策略 3、输出结果 1、简单介绍 GEO中中调整图像蓝紫边可分为两步,第一步:调整蓝紫边检测区域,第二步:设置去蓝紫边强度。 2、调试策略 图1 该图像蓝紫边较严重 主要原因是由于蓝紫边检测不准导致的&…

    Java7之后的Java版本主要升级内容

    自Java 7之后,Java的各个版本引入了许多重要的特性和改进。以下是Java 8到Java 17每个版本的主要升级内容: Java 8 (2014) Java 8 是一个具有重大里程碑意义的版本,包含了许多重要的特性和改进: Lambda 表达式:引入…

    从零制作一个docker的镜像

    近期docker的镜像仓库不好用了,很多国内的源也无法使用了,所有今天给大家分享一下怎么从零制作一个CentOS镜像。 准备CentOS7最小环境 mkdir /centos7.9-root# 在该目录准备centos的最小环境 sudo yum --installroot/centos7.9-root --releasever7 ins…

    【面试题】MySQL常见面试题总结

    备战实习,会定期给大家整理常考的面试题,大家一起加油! 🎯 系列文章目录 【面试题】面试题分享之JVM篇【面试题】面试题分享之Java并发篇【面试题】面试题分享之Java集合篇(三) 注意:文章若有错…

    杂谈-C和C++有什么不同

    C和C是两种流行的编程语言,它们在很多方面都有相似之处,但也有很多关键的区别。以下是对C和C之间差异的详细比较,旨在清晰地解释两者之间的不同点。 一、设计思想和语法规范 设计思想: C语言:C语言是一种面向过程的语…

    将 Python3 程序打包成 APK 并运行在 ARM 的 Android 系统中

    作为一个开发者,我们经常需要将我们的 Python 程序部署到移动端,以便更好地服务于用户。然而,直接在 Android 系统上运行 Python 程序却存在一定的挑战,因为 Android 系统默认不支持 Python。这篇文章将介绍如何将 Python3 程序打…

    LeetCode435无重叠区间

    题目描述 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 解析 由于要删除尽可能少的区间 ,因此区间跨度大的一定是要先删除的,这样就有两种贪心思想了…

    API接口:解锁社交电商的创新潜力

    摘要 在数字化营销的浪潮中,某音作为一个集社交与电商于一体的平台,其API接口为品牌和商家提供了前所未有的机遇。本文深入探讨了某音API接口如何助力社交电商,实现个性化营销和增强用户体验。 关键词 某音、​​API接口​​、社交电商、个…

    FreeRtos-13资源管理

    一、临界资源是什么 要独占式地访问临界资源,有3种方法: 1.公平竞争:比如使用互斥量,谁先获得互斥量谁就访问临界资源,这部分内容前面讲过。 谁要跟我抢,我就灭掉谁: 2.中断要跟我抢?我屏蔽中断 3.其他任务要跟我抢?我禁止调度器,不运行任务切换 二、暂停调度器…

    API 类别 - 特效核心

    API 类别 - 特效核心 引言 在当今的数字时代,应用程序编程接口(API)已成为软件开发和互联网服务的重要组成部分。API作为一种中间件,允许不同的软件系统之间进行交互和数据交换。其中,特效核心API是一类专门用于处理和渲染视觉特效的接口,广泛应用于游戏开发、视频编辑…

    接口postman

    前后端 前端:是肉眼所能见到的界面 后端:处理数据,数据逻辑 接口:提供前后端交互的通道 接口测试:校验接口返回的响应数据是否与预期的一致 接口测试可以绕过前端,直接对服务器进行测试 请求方式 pos…

    微信小游戏5月畅销榜,新老产品更替显著,亿级爆款频出

    小游戏由于微信的平台扶持,被视为可以大力发掘的蓝海,成为国内游戏最大的增长机会之一,随着越来越多的大厂和中小厂转向了小游戏赛道,每个月的小游戏畅销榜单都有不同变化。 5月的小游戏畅销榜显示,小游戏市场正经历显…

    互联网宗教信息服务许可证怎么办理?

    一、什么是互联网宗教信息 互联网宗教信息是指通过网站、应用程序、论坛、博客、微博、公众账号、即时通讯工具、网络直播等形式,以图文或音视频等方式传播有关宗教教义教规、宗教知识、宗教文化、宗教活动等涉及宗教的信息。 根据《互联网宗教信息服务管理办法》…

    【 Python高级编程】Pythonz中Pandas表格读取与数据处理

    Python中的Pandas表格读取与数据处理 Pandas 是 Python 中一个强大的数据处理与分析库,特别适合处理表格数据。本文将介绍如何使用 Pandas 读取表格文件并进行基本的数据处理操作。 一、读取表格数据 Pandas 可以读取多种格式的表格数据,常见的有 CSV…

    Python深度学习:Bi-LSTM和LSTM在网络上有什么区别,对比来看

    文章目录 LSTM代码解释类定义和构造函数前向传播方法 (`forward`)总结Bi-LSTMLSTM 代码 class BaseLSTMModel(nn.Module):def __init__(self, input_dim, hidden_dim, layer_dim, class_num):super().__init__

    [BSidesCF 2020]Had a bad day1

    看到页面有两个按钮 先随便点一个试一下,当我们点击之后发现url是有变动的 感觉url是有点东西的,可能是某种注入,先尝试一下sql注入,发现给出了报错 通过报错我们可以确定是文件包含漏洞,那我们试试php伪协议去读取一下…

    保密工作应党而生、伴党而行、为党而兴

    1.(C )工作应党而生、伴党而行、为党而兴,始终是党和国家的一项重要工作。 A. 农业 B. 国防 C. 保密 D. 文化 2.机关、单位对所产生的国家秘密事项,应当按照国家秘密及其密级的具体范围的规定确定密级,同时确定&#x…

    JDBC操作数据库的方法

    目录 一、JDBC介绍 二、使用方法(以MySQL为例) (1)MySQL的jar包,导入到IDEA (2)使用代码,操作数据库 1)设置数据源 1.创建MysqlDataSource对象,使用set…