【技术实操】银河麒麟操作系统安装Node.js运行环境及其进程管理

了解更多银河麒麟操作系统全新产品,请点击访问

麒麟软件产品专区:https://product.kylinos.cn

开发者专区:https://developer.kylinos.cn

文档中心:https://documentkylinos.cn

前言

Node.js作为一个开源、跨平台的JavaScript运行时环境,自2009年发布以来凭借其独有的事件驱动、非阻塞I/O模型等特性,在高性能web服务器开发中脱颖而出。本文主要介绍如何在银河麒麟操作系统上安装部署Node.js 运行环境,并对其运行进程进行监控和管理。

Node.js 语言特性

  1. 事件驱动:Node.js的事件驱动模型依托libuv的事件循环(Event-Loop)机制,通过不断检查事件队列并依次处理已完成的异步任务,确保程序在单线程环境下能够高效地调度和执行事件处理逻辑。
  2. 非阻塞I/O:非阻塞I/O模型允许系统在执行I/O操作(如文件读取、网络请求等)时,不阻塞主线程继续处理其他任务,所有I/O操作都以异步方式发起,再交由事件循环处理,显著提升了I/O密集型任务响应速度。
  3. 单线程:Node.js应用采用单线程机制,仅维护一个主线程,没有线程间切换的开销,通过事件驱动和非阻塞I/O机制来实现并行处理,适用于高并发I/O密集型应用。
  4. 轻量级:Node.js的运行时环境轻量且快速,因自身代码库简洁可快速启动且易部署维护,又因其单线程事件驱动模型进而内存占用少,此外还可通过丰富的npm生态系统灵活扩展功能而不增加过多自身负担。‌

Node.js 环境安装

Node.js可以通过多种方式进行安装,本文主要介绍最通用的两种方式:手动下载安装、包管理器安装。

手动下载安装

查看操作系统信息

uname -a

前往Node.js官网下载 | Node.js 中文网下载当前系统对应的安装包

解压安装包(以v20.17.0-linux-x64版本为例)

tar -xvf node-v20.17.0-linux-x64.tar.xz

前往解压后目录执行下方命令以查看Node.js版本信息,若正确显示v20.17.0,则表示当前安装包可正常运行。

./node-v20.17.0-linux-x64/bin/node -v

配置环境变量

至此系统已经拥有可运行的Node.js环境,但此时的Node只能通过绝对安装路径访问。通过配置系统环境变量,可以让node成为全局可用的命令。

vim ~/.bashrc

在文件最后追加下方两行代码(NODE_HOME需替换为本地可执行node路径):

export NODE_HOME=/home/kylin/node/node-v20.17.0-linux-x64

export PATH=$PATH:$NODE_HOME/bin

加载环境变量配置:

source ~/.bashrc

查看Node.js 和 npm版本信息

若此时能正常显示node和npm版本信息,则表示环境变量配置成功。

node -v

npm -v

以上是手动下载安装Node.js运行环境的具体过程,该安装方式操作步骤简单、安装稳定性高,但在进行不同版本切换时,需要重复进行下载、安装的操作,过程相对繁琐。因此如果在开发过程中需要频繁进行Node.js版本切换,建议使用下方的包管理器安装方式。

包管理器安装

nvm(Node Version Manager)是一个Node.js版本管理工具,可以方便地进行不同版本的安装、查看和切换操作。通过nvm安装Node.js的具体操作如下:

安装nvm

sudo apt install nvm

加载环境变量配置文件

source ~/.bashrc

查看nvm版本

nvm -v

若此时能正常显示nvm版本信息,则表示nvm安装成功。

nvm查看可安装的Node.js版本

nvm ls-remote

安装目标版本(以V20为例,nvm会自动安装Node 20大版本下的最新LTS版本)

nvm install 20

查看node和npm 版本是否正确

node -v

npm -v

若此时能正常显示node和npm版本信息,则表示Node.js安装成功。

至此系统已经拥有可运行的Node.js环境,nvm作为版本管理工具,日常使用还涉及版本查看、切换等高频操作,以下将介绍相关命令的具体使用:

查看当前系统已安装的Node版本

nvm ls

切换版本(需确保version对应的版本已安装至本地)

nvm use <version>

设置默认版本

nvm alias default <version>

卸载版本

nvm uninstall <version>

Node.js 进程管理

Node.js依靠其单线程和非阻塞 I/O 模型,从而具备强大的高并发处理能力。然而,单线程机制也带来了一些挑战,如无法充分利用多核 CPU,存在单点故障导致进程崩溃的风险。因此,在生产环境中,Node.js 服务通常会借助进程管理工具来优化部署,确保服务的稳定性和性能。

PM2 作为一个开源进程管理器, 提供了生产级的负载均衡、进程守护、日志、监控等能力, 是Node.js服务进程管理的最佳选择之一。以下将介绍在银河麒麟操作系统上如何通过PM2来部署一个Node.js的应用服务。

安装PM2

npm install pm2 -g

通过下方命令查看 pm2 版本,若版本信息输出正常,则表示pm2 已成功安装。

pm2 -v

启动服务

以下提供一个简易的Node.js服务器脚本以供部署测试使用,脚本命名为app.js,具体内容如下:

const http = require('node:http');

const server = http.createServer((req, res) => {

  res.writeHead(200, { 'Content-Type': 'application/json' });

  res.end(JSON.stringify({

    data: 'Hello World!',

  }));

});

server.listen(8000);

通过PM2直接启动应用:

pm2 start app.js --name app

上图展示了当前启动应用的基本信息,包括应用名称、进程id、应用状态、cpu和内存用量等。通过浏览器访问8000端口验证web服务是否可正常访问:

至此已经通过PM2成功启动了一个基础web服务,但是在生产环境中,考虑到服务的稳定性和运行性能,一般会采用PM2的集群模式部署应用,以充分利用多核CPU资源。

PM2通过-i选项来开启集群模式,其中启动进程数可由PM2自动检测,也可自行指定。

pm2 start app.js --name app -i max

max参数表示PM2会自动检测可用CPU的数量并扩展相同数量的进程。

也可自行指定扩展进程数量:

pm2 start app.js --name app -i 4

服务日志

PM2日志模块会在~/.pm2/logs目录下为每个进程服务分配两个默认的日志文件:${APP_NAME}-out.log用于记录正常输出日志、${APP_NAME}-error.log用于记录错误日志。

服务监控

PM2提供了内置监控工具,允许用户实时查看服务运行状态和性能监控指标。

pm2 monit

小结

本文介绍了在银河麒麟操作系统上部署Node.js运行环境以及通过PM2进行进程管理的相关操作,基于此可完成一个基础应用的部署。因篇幅有限,部分高阶用法未展开详述,如有兴趣可前往Node.js和PM2官网进行深入学习。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

智能BI项目第五期

本期主要内容 系统问题分析异步化业务流程分析线程池讲解&#xff08;入门 原理 实战&#xff09;系统异步化改造开发 1.系统问题分析 当系统面临大量用户请求时&#xff0c;我们后端的 AI 处理能力有限&#xff0c;例如服务器的内存、CPU、网络带宽等资源有限&#xff0c…

前端web端项目运行的时候没有ip访问地址

我们发现 没有netWork 的地址 导致 团队内其他同学无法打开我们的地址 进行访问 在page.json 中的运行 指令中 添加 --host 记得加上空格 这样我们就可以看到这个地址了 团队其他同学 就可以访问我们这个地址了

Nuxt Kit 中的模板处理

title: Nuxt Kit 中的模板处理 date: 2024/9/20 updated: 2024/9/20 author: cmdragon excerpt: 摘要:本文详细介绍了在Nuxt 3框架中,使用Nuxt Kit进行模板处理的方法,包括理解模板基本概念、使用addTemplate动态生成文件、应用addTypeTemplate注册类型模板以增强TypeScr…

spring boot启动报错:so that it conforms to the canonical names requirements

springboot 2.x的版本中对配置文件中的命名规范有了强制性的要求&#xff0c;如下图所示中的dataSource属性属于驼峰格式&#xff0c;但是在springboot 2.x中不允许使用驼峰形式。 根据错误提示可知将其使用 - 来分割即可 错误信息的含义&#xff1a;“Canonical names should…

这年头找工作岗位都能开盲盒了??能给我开个 CEO 当当吗?

大家好&#xff0c;我是鸭鸭&#xff01; 求职季总是让人啼笑皆非&#xff0c;各种骚操作让鸭鸭吃瓜到嘴软。这不&#xff0c;鸭鸭最近就瞅到了一个让人啧啧称奇的“岗位盲盒”。 哎哟喂&#xff01;鸭鸭现在才知道&#xff0c;连找工作都能开盲盒&#xff0c;是我见识短了吗…

你是不是分不清哪些字体是商用,哪些非商用?快来看,免得莫名其妙负债。

前言 最近发现有好多小伙伴在做PPT的时候&#xff0c;都有一个很不好的习惯&#xff1a;没有调整好字体。 这里说的没有调整好字体的意思是&#xff1a;在一些公开发布的内容上使用一些可能造成侵权的字体。 字体侵权‌的后果相当严重。轻者可能面临法律纠纷&#xff0c;重者…

基于YOLOv8/YOLOv9/YOLOv10的河道漂浮物检测识别系统

摘要&#xff1a; 河道漂浮物检测识别是指利用技术手段自动识别河流、湖泊等水体表面的漂浮垃圾或物体的过程。随着环境保护意识的增强和技术的进步&#xff0c;河道漂浮物检测已经成为水环境保护和管理的重要组成部分。这项技术的应用可以帮助及时发现污染源&#xff0c;采取措…

响应式监听localStorage存储?封装个自定义Hook不就好了!

背景 项目上有个更改时区的全局组件&#xff0c;同时还有一个可以更改时区的局部组件&#xff0c;想让更改时区的时候能联动起来&#xff0c;实时响应起来。 其实每次设置完时区的数据之后是存在了前端的 localStorage 里边&#xff0c;时&#xfffd;&#xfffd;&#xfff…

SaltStack的state定义主机状态及Jinja模版的使用

在前面我们学习了远程执行模块&#xff0c;这些模块的执行类似语段 she11 脚本&#xff0c;每次执行都会触发一次相同的功能&#xff0c;在大量的 minion 上运行远程命令当然是重要的&#xff0c;但是对于 minion 的环境控制&#xff0c;使用状态进行管理更为合适&#xff0c;转…

从零开始制作AI无人直播插件!

AI无人直播插件应运而生&#xff0c;它利用人工智能技术&#xff0c;实现了直播内容的自动化生成与播放&#xff0c;极大地降低了直播的人力成本和时间成本&#xff0c;本文将带你从零开始&#xff0c;探索如何制作一个AI无人直播插件&#xff0c;并分享五段关键的源代码。 AI…

谷歌深度学习研究揭示OpenAI O1模型优化策略:比规模更重要的计算效率

引言 近年来&#xff0c;大型语言模型&#xff08;LLMs&#xff09;如OpenAI的GPT-4和Google DeepMind的Palm 2已成为自然语言处理领域的佼佼者&#xff0c;它们通过生成类人文本、回答复杂问题、编写代码等能力&#xff0c;改变了许多行业的工作方式。然而&#xff0c;随着这…

IO流体系(FiletOutputStream)

书写步骤&#xff1a; 1.创建字节输出流对象 细节1:参数是字符串表示的路径或者是File对象都是可以的 细节2:如果文件不存在会创建一个新的文件&#xff0c;但是要保证父级路径是存在的。 细节3:如果文件已经存在&#xff0c;则会清空文件 2.写数据 细节:write方法的参数…

大白话解读末日期权是什么意思?末日期权与黑天鹅!

今天带你了解大白话解读末日期权是什么意思&#xff1f;末日期权与黑天鹅&#xff01;末日期权与黑天鹅事件的关系主要体现在风险和波动性管理上&#xff0c;交易者需要谨慎对待这两者的互动。 末日期权和期权黑天鹅事件之间的关系主要体现在风险管理和市场波动性上。 末日期…

没有那个文件或目录 #include <bits/libc-header-start.h>

Ubuntu 18.04 编译需要编译32位系统 gcc -ggdb -m32 -c -o exploit.o exploit.c gcc -m32 -L/usr/lib32 exploit.o -o exploit 报错&#xff1a; 解决方法&#xff1a; sudo apt-get install libc6-dev-i386sudo apt-get install gcc-multilib

【C++】哈希表:字母异位词分组(体会泛型编程的强大)

1.题目 2.思路 利用map的特性&#xff0c;第一个值存排好序的string&#xff0c;第二个值存vector<string>。这样就可以很好的将异位词分组。 3.代码 class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {un…

25届计算机专业毕设选题推荐-基于python的二手电子设备交易平台【源码+文档+讲解】

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于python的二手电子设备交…

六西格玛绿带培训多少钱?从授“鱼”到授“渔”

六西格玛作为一种全球公认的质量管理方法&#xff0c;其影响力日益扩大&#xff0c;而六西格玛绿带培训作为这一体系中的关键环节&#xff0c;更是吸引了众多希望在职场上脱颖而出的专业人士。本文&#xff0c;深圳天行健企业管理咨询公司将从多个维度深入探讨“六西格玛绿带培…

【大模型】初识大模型(非常详细)零基础入门到精通,收藏这一篇就够了_大模型入门

大模型的定义 大模型是指具有数千万甚至数亿参数的深度学习模型。近年来&#xff0c;随着计算机技术和大数据的快速发展&#xff0c;深度学习在各个领域取得了显著的成果&#xff0c;如自然语言处理&#xff0c;图片生成&#xff0c;工业数字化等。为了提高模型的性能&#xf…

游戏如何应对云手机刷量问题

云手机的实现原理是依托公有云和 ARM 虚拟化技术&#xff0c;为用户在云端提供一个安卓实例&#xff0c;用户可以将手机上的应用上传至云端&#xff0c;再通过视频流的方式&#xff0c;远程实时控制云手机。 市面上常见的几款云手机 原本需要手机提供的计算、存储等能力都改由…

在校三个月备考软考中项顺利拿证,经验分享

作为一名在校生&#xff0c;我在三个月的备考软考中项后成功拿到证书&#xff0c;对于软考中项的考试技巧有着丰富的经验。首先&#xff0c;我给你分享一些备考技巧&#xff1a; 1. 不要死记硬背&#xff01;最好是结合跟班学习和教材双管齐下。先过一遍所有知识点&#xff08…