pm2 + linux + nginx

pm2

pm2是一个用于管理node项目的工具

前言

有如下两个文件

index.js

const express = require("express");
const app = express();
const port = 9999;app.get("/index", (req, res) => {res.json({code:200,msg:"songzx001"})
});app.listen(port, () => {console.log(`Example app listening on http://localhost:9999/index`);
});

index2.js

const express = require("express");
const app = express();
const port = 8888;app.get("/index", (req, res) => {res.json({code:200,msg:"songzx002"})
});app.listen(port, () => {console.log(`Example app listening on http://localhost:8888/index`);
});

这是当我们想把这两个项目同时启动时,通常情况下需要开启两个黑窗口

image-20231024141700925

这是我们就可以通过使用pm2来管理多个node项目

安装

npm install -g pm2

查看是否安装成功

pm2 -v

可以看到版本号表示安装成功

image-20231024141809926

使用

启动项目必须在管理员窗口下运行命令

启动项目
pm2 start index.js

image-20231024143831126

还可以接着启动另外的项目

image-20231024143857636

这是就有两个项目的状态是 online

image-20231024143958540

访问这两个项目也可以访问到

停止项目
pm2 stop [name]
# 或者
pm2 stop [id]

image-20231024144058989

重新启动
pm2 restart [name]
# 或者
pm2 restart [id]

image-20231024144539956

删除项目
pm2 delete [id]
查看列表
pm2 list
启动并监听文件变化
pm2 start index --watch

image-20231024144721939

启动后这里的状态会显示是 enabled

我们修改文件后,刷新网页会自动变化

自定义启动名称
pm2 start index.js -n aaa

image-20231024145234910

Linux

安装node

wget 是Linux自带的下载东西的命令

wget https://cdn.npmmirror.com/binaries/node/v14.19.1/node-v14.19.1-linux-x64.tar.xz

查看下载的文件并解压

image-20231024152702103

解压文件,使用tar命令

-c: 压缩
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件

这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出

下面的参数-f是必须的

-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

  • tar -cf all.tar *.jpg 这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
  • tar -rf all.tar *.gif 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
  • tar -uf all.tar logo.gif 这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
  • tar -tf all.tar 这条命令是列出all.tar包中所有文件,-t是列出文件的意思
  • tar -xf all.tar 这条命令是解出all.tar包中所有文件,-x是解开的意思

压缩

  • tar –cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg
  • tar –czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
  • tar –cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
  • tar –cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
  • rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for Linux
  • zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux

解压

  • tar –xvf file.tar //解压 tar包
  • tar -xzvf file.tar.gz //解压tar.gz
  • tar -xjvf file.tar.bz2 //解压 tar.bz2
  • tar –xZvf file.tar.Z //解压tar.Z
  • unrar e file.rar //解压rar
  • unzip file.zip //解压zip

我们使用下面命令解压 node 包

tar -xvf node-v14.19.1-linux-x64.tar.xz
pwd命令

显示当前目录

image-20231024153437447

/node/node-v14.19.1-linux-x64/bin

配置环境变量

进入根目录下的 ect/profile 文件

vi profile

vi 表示编辑 profile,打开后按下 i,进入编辑模式,通过上下箭头控制光标位置,然后在文件默认添加下面的代码

export PATH=$PATH:/node/node-v14.19.1-linux-x64/bin

image-20231024153908412

然后按下 esc,输入 :wq,保存并退出,或者 :q 不保存退出

然后执行下面命令,让配置生效

source profile

image-20231024154103238

现在我们就可以在任意地方使用 node 了

安装pm2

设置淘宝代理

npm config set registry https://registry.npm.taobao.org

安装 pm2

npm install pm2 -g

image-20231024154300766

可以看到版本号表示安装成功

文件

image-20231027211504517

在根目录,执行 ll 可以列出当前目录下的所有文件和文件夹

  • 第一列表示文件权限,RWX 分别表示可读,可写,可执行
  • 第二列数字表示文件数量
  • 第三列表示拥有的角色名称
  • 第四列表示文件大小
  • 后面是日期和文件或者文件夹名称

用户和权限

img

根据上面这个表计算

R:可读 = 4

W:可写 = 2

X:可执行 = 1

创建一个角色,并设置文某个文件权限为只读

adduser szx
passwd szx

然后新建一个 index.txt 文件,并设置权限

chmod 704 index.txt

704:根据上面的公式计算,最后一个数字表示 szx 用户的权限大小,4 只读

然后使用 szx 登录,查看index.txt

image-20231027213045421

可以看到使用 cat 可以查看文件内容,但是无法使用 echo 往文件内写入内容

Linux 防火墙

1、firewalld的基本使用

启动: systemctl start firewalld

查看状态: systemctl status firewalld

停止:systemctl stop firewalld

禁用:systemctl disable firewalld

2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。

启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl --failed

3.配置firewalld-cmd

查看版本: firewall-cmd --version

查看帮助: firewall-cmd --help

显示状态: firewall-cmd --state

查看所有打开的端口: firewall-cmd --zone=public --list-ports

更新防火墙规则: firewall-cmd --reload

查看区域信息: firewall-cmd --get-active-zones

查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0

拒绝所有包:firewall-cmd --panic-on

取消拒绝状态: firewall-cmd --panic-off

查看是否拒绝: firewall-cmd --query-panic

那怎么开启一个端口呢

添加

firewall-cmd --zone=public --add-port=80/tcp --permanent (–permanent永久生效,没有此参数重启后失效)

重新载入

firewall-cmd --reload

查看

firewall-cmd --zone= public --query-port=80/tcp

删除

firewall-cmd --zone= public --remove-port=80/tcp --permanent

nginx常用名

启动命令

nginx

stop 立即停止

nginx -s stop 

quit 等待当前请求处理完成再停止

nginx -s quit

重载nginx配置文件

nginx -s reload

查看nginx进程

ps -ef | grep nginx

检查配置文件是否正确

nginx -t

nginx反向代理

使用 proxy_pass 代理到需要的地址

server {listen 9001;server_name 8.130.118.240;index index.php index.html index.htm default.php default.htm default.html;root /www/wwwroot/www.cjgj.com;# 反向代理location ^~ /prod-api/ {proxy_pass http://8.130.118.240:9000/;}
}

负载均衡

编写三个接口

index.js

const express = require("express");
const app = express();
const port = 7000;app.get("/list", (req, res) => {console.log("负载均衡001")res.json({code:200,msg:"负载均衡001",})
});app.listen(port, () => {console.log(`Example app listening on http://localhost:${port}/list`);
});

index2.js

const express = require("express");
const app = express();
const port = 7001;app.get("/list", (req, res) => {console.log("负载均衡002")res.json({code:200,msg:"负载均衡002",})
});app.listen(port, () => {console.log(`Example app listening on http://localhost:${port}/list`);
});

index3.js

const express = require("express");
const app = express();
const port = 7002;app.get("/list", (req, res) => {console.log("负载均衡003")res.json({code:200,msg:"负载均衡003",})
});app.listen(port, () => {console.log(`Example app listening on http://localhost:${port}/list`);
});

使用 pm2 启动这三个服务

image-20231027230552379

在配置文件中添加如下配置文件

意思是监听 3333 端口,并添加 api 请求前缀,代理到负载均衡的地址上,默认使用的是轮询机制

轮询
# 默认是轮询机制
upstream node {server 127.0.0.1:7000;server 127.0.0.1:7001;server 127.0.0.1:7002;
}
server {listen       3333;server_name  localhost;location ^~ /api/ {proxy_pass http://node/;}
}

使用浏览器访问:http://localhost:3333/api/list ,发现依次展示三个接口返回的内容

通过 pm2 log 日志可以看到

image-20231027230928250

权重
upstream node {server 127.0.0.1:7000 weight=3;server 127.0.0.1:7001 weight=2;server 127.0.0.1:7002 weight=1;
}
server {listen       3333;server_name  localhost;location ^~ /api/ {proxy_pass http://node/;}
}

这种情况下权重高的会命中的次数多

image-20231027231217289

超时
upstream node {server 127.0.0.1:7000 fail_timeout=60;server 127.0.0.1:7001 fail_timeout=20;server 127.0.0.1:7002;
}
server {listen       3333;server_name  localhost;location ^~ /api/ {proxy_pass http://node/;}}

fail_timeout是故障等待超时时间

backup是备用服务器参数,可以为一个upstream设置一个backup的server,在生产server全部都出问题之后,可以自动切换到备用server上,为回复服务争取时间

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

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

相关文章

Web3常见概念

Layer0 到 Layer3 的对比差异 层级定义主要功能举例Layer0基础设施层 提供区块链底层技术和基础设施 Avalanche、Cosmos、Horizen、PolkadotLayer1区块链层提供主要区块链协议和功能,处理交易和智能合约以太坊、Polkadot、EOSLayer2协议增强层优化交易速度和费用&a…

【单片机原理及应用】实验: 8位数码显示器

目录 一、实验目的 二、实验内容 三、实验步骤 四、记录与处理 五、思考 六、成果文件提取链接 一、实验目的 学习8位数码管串行扩展原理,掌握74HC595与动态显示编程方法。 二、实验内容 【参照图表】 (1)创建一个包含80C51固件&#x…

【网络】WebSocket协议详解

WebSocket协议详解 一 、WebSocket 诞生背景二、WebSocket 特点三、WebSocket 的握手环节四、WebSokect 的数据格式1、 第一个字节2、第二个字节3、Masking-key4、playload Data5、一些注意细节 WebSocket 的官方文档 WebSocket 的中文文档(非官方) 一 、WebSocket 诞生背景 在…

进阶SpringBoot之 Shiro(2)环境搭建

Spring Boot 创建 Web 项目&#xff0c;pom.xml 导入 Thymeleaf 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency> resources 目录下 templates 包新…

tomcat 相关

使用内置JDK jdk免配置环境变量&#xff0c;内置tomcat里面启动_64位自带1.8jdk tomcat,无需配置环境变量直接启动-CSDN博客 乱码&#xff1a; 打开tomcat文件下的conf文件&#xff0c;打开logging.properties文件&#xff1b; 然后java.util.logging.ConsoleHandler.encod…

WiFi标签注册(电脑版)

安装WiFi-Tool工具 需要windows系统电脑并且有WiFi功能 下载软件安装包&#xff1a;http://a.picksmart.cn:8088/picksmart/app/WiFi-Tool-Setup-V1.0.37.zip 配置操作流程 登录WiFi标签管理系统到设备管理-产品管理&#xff0c;复制“产品ApiKey”参数&#xff0c;打开“WiFi-…

ip地址变化是什么意思?手机地址ip一直变化怎么办

IP地址作为互联网设备的唯一标识&#xff0c;‌其稳定性对于网络连接至关重要。‌然而&#xff0c;‌手机IP地址频繁变动可能带来一系列问题。‌本文将深入探讨IP地址变化的含义、‌IP地址频繁变动的原因&#xff0c;‌以及提供手机地址IP一直变化的有效应对策略。‌ 一、IP地址…

当AI遇上制药:加速跑向未来的快车道,还是布满荆棘的征途?

01 在全球科技领域&#xff0c;AI的崛起无疑掀起了一场变革的风暴&#xff0c;其影响力已渗透至各行各业&#xff0c;促使各领域积极寻求与AI技术的深度融合&#xff0c;以提升效率、创新产品及优化服务。在医疗健康领域&#xff0c;AI与制药的结合自2007年起航&#xff0c;历…

计网_整体概念逻辑简单过一遍

1. 简述四层TCP/IP 网络模型 由于 OSI 模型实在太复杂&#xff0c;提出的也只是概念理论上的分层&#xff0c;并没有提供具体的实现方案。 事实上&#xff0c;我们比较常见&#xff0c;也比较实用的是四层模型&#xff0c;即 TCP/IP 网络模型&#xff0c; 1.1 应用层 在四…

WPF ToolkitMVVM IOC IServiceConllection

用微软自带的 IOC 需要安装 using Microsoft.Extensions.DependencyInjection; using System.Configuration; using System.Data; using System.Windows;namespace WpfApp3 {/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class…

EXO:StandardNode _process_tensor

目录 EXO:StandardNode _process_tensor EXO:StandardNode _process_tensor 这段代码是在处理某种分片(sharding)逻辑时使用的,特别是在处理大型模型或数据处理任务时,这些任务被分割成多个较小的部分(即分片)来并行处理。这里,代码片段关注于根据特定的调试级别(DEBU…

Windows系统安装MySQL

下载MySQL 打开网址MySQL :: Download MySQL Community Server点击图下所示位置Download 进入图下所示界面&#xff0c;点击图下所示位置不登录下载 已下载完成 安装MySQL 将下载好的压缩包解压到一个专门的位置&#xff0c;该软件为绿色版软件&#xff0c;解压即可使用 配置…

若依,前后端分离项目,部署到服务器

1.后端项目用maven打包 正式服的话&#xff0c;测试不用加。 application.yml加上context-path: /prod-api 一定要选择root的ruoyi&#xff0c;他会把你自动打包其他模块的依赖 全部成功。然后去ruoyi-admin拿到这个包&#xff0c;java -jar ruoyi-admin.jar就可以了 将jar上…

VM ware虚拟机下载安装教程

1.安装包下载 目前VM ware官网无法直接下载虚拟机安装包&#xff0c;需要跳转到Broadcom&#xff08;点击此处&#xff09;官网进行下载 点击链接自动进入登录界面&#xff0c;没有注册过可以通过邮箱进行注册&#xff0c;接下来将为您介绍注册流程。 Username即注册邮箱&…

Mac/Linux系统matplotlib中文支持问题

背景 matplotlib是python中最常用的数据可视化分析工具&#xff0c;Mac和Linux系统无中文字体&#xff0c;不支持中文显示&#xff08;希望后续可以改进&#xff09;&#xff0c;需要进行字体的下载和设置才能解决。笔者经过实践&#xff0c;发现Mac系统和Linux系统解决方案略…

raw.githubusercontent.com未能解析” 解决方案

1.操作场景 通过windows11 powershell 下载依赖包 2.报错信息如下 irm : 未能解析此远程名称: raw.githubusercontent.com 所在位置 行:1 字符: 27 & ([scriptblock]::Create((irm "https://win11debloat.raphi.re/"))) ~~~~~~~~~…

SpringBoot SSM vue在线作业考试系统

SpringBoot SSM vue在线作业考试系统 首页 图片轮播 作业信息 通知公告 登录注册 留言板 个人中心 我的收藏 后台管理 登录注册 个人中心 教师信息管理 学生信息管理 学院信息管理 专业信息管理 班级信息管理 作业信息管理 作业提交管理 通知公告管理 试卷管理 试题管理 系统…

【C++ 第十八章】C++11 新增语法(4)

前情回顾&#xff1a; 【C11 新增语法&#xff08;1&#xff09;&#xff1a;1~6 点】 C11出现与历史、花括号统一初始化、initializer_list初始化列表、 auto、decltype、nullptr、STL的一些新变化 【C11 新增语法&#xff08;2&#xff09;&#xff1a;7~8 点】 右值引用和…

基于ASO-BP原子探索优化BP神经网络实现数据预测Python实现

本文提出了一种基于ASO算法优化BP神经网络的数据预测方法。通过ASO算法对BP神经网络的权值和阈值进行优化&#xff0c;克服了BP神经网络易陷入局部最优解和对初始权值敏感的缺点。实验结果表明&#xff0c;优化后的BP神经网络在预测精度上得到了显著提升&#xff0c;为数据预测…

Java 入门指南:Java 并发编程 —— 线程安全问题与锁机制

线程安全的概念 线程安全可以简单理解为在多线程环境下&#xff0c;一个方法或实例在并发执行时能够保持数据的一致性和完整性&#xff0c;不会因为多个线程的交替执行而导致错误的结果。 线程不安全的原因 线程不安全通常由以下几个原因引起&#xff1a; 原子性问题&#x…