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.xdnf.cn/news/1523619.html

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

相关文章

学习硬件测试06:IIC(SHT30)+HMI串口屏+RS485(modbus)+SPI Flash读写+CAN通信(P81、P91、P95、P120、)

文章以下内容全部为硬件相关知识,鲜有软件知识,并且记的是自己需要的部分,大家可能看不明白。 一、IIC(SHT30 数字温湿度传感器) 1.1实验现象 1、软件模拟 I2C 协议与 SHT30 数字温湿度传感器通讯; &am…

怎么把视频转换成mp4:好用的mp4格式转换器免费版推荐

用手机或者其他拍摄设备记录生活已经成为一种日常,当你想把手机里储存的日常小确幸发布到平台上时,才发现你视频的格式在平台上并不被支持。这个事实难免让人丧气。如果你还想继续上传视频的话,就不得不把视频格式转换成被平台支持的mp4格式。…

ELK系列之一---探索ELK奇妙世界:初识日志界大名鼎鼎的ES集群!

目录 一、为什么要使用ELK 二、ELK简介 三、Elaticsearch入门 3.1、什么是elaticsearch 3.2、elaticsearch的底层优点 3.2.1、全文检索 3.2.2、倒排索引 3.3、elaticsearch集群原理 一、为什么要使用ELK 一般我们需要进行日志分析场景:直接在日志文件中 gre…

Redis从入门到入门(上)

1.Redis概述 文章目录 1.Redis概述1.1 什么是Redis1.2 Redis的应用场景 2.Linux下Redis的安装与使用2.1 Redis下载2.2 Redis的启动2.3 Redis配置2.4 连接Redis 1.1 什么是Redis Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库&#xff0…

C语言sprintf函数使用

1 其函数原型为:int sprintf(char *str, const char *format,...)。 具体用法如下: 基本语法: str:目标字符串的指针,用于存储格式化后的结果。format:格式化字符串,用于指定输出的格式。后续是…

数据结构-队列的介绍及循环队列

1.队列的概念 在开始前,请牢记这句话:队列是一个先进先出的数据结构。 队列(queue)是限定在表的一端进行插入,表的另一端进行删除的数据结构,如同栈的学习,请联系前文所学链表,试想…

4.5SQL注入之加解密注入

SQL注入之加解密注入Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。 Less-21关 Cookie加密注入: 通过Burpsuite抓包: 进行Base64解密:

波场(Tron)监听区块交易(TRX,USDT)

前言说明: 本篇文章参考GitHub一位伙伴的代码,再代码基础上优化改良以后的结果,但是一下找不到那位大佬的GitHub链接了,如有侵权请联系作者调整文章,让跟多人收益。谢谢。 实现思路: 波场链是一条很新奇的链&#xff…

Nexus配置npm私服

1,配置npm-hub 2,配置proxy-npm 3,配置group-npm 4,配置local-npm 5,配置淘宝

[overleaf] 论文中含有中文字符导致编译失败

解决方案分为两步: 1. 加入package: UTF8或者xeCJK \usepackage[UTF8]{ctex}二选一 \usepackage{xeCJK} 2. 修改编译方式: Menu -> Setting -> Compiler -> XeLatex

MyPrint打印设计器(七)svg篇-二阶贝塞尔曲线

svg-二阶贝塞尔曲线 介绍一款强大的svg操作库,能够通过简单的代码,实现svg绘制与操纵,实现拖拽等功能 代码仓库 在线体验 代码仓库:github 代码仓库:gitee 实战项目:MyPrint 操作简单,组件丰富…

Ovirt-Engine(4.3.10 )备份恢复

介绍如何进行 oVirt Engine 的备份、恢复以及相关操作,包括自动备份脚本、手动备份步骤、托管引擎的恢复流程,以及恢复后的配置和验证步骤。 1. Engine 备份部分 1.1 备份使用的脚本 以下是一个用于自动备份 oVirt Engine 的 Bash 脚本: …

标签中的ref属性

之前说过了 ref() 函数,现在说的标签中的 ref 属性 和 ref() 函数也存在一定关联。 2、 标签中的 ref 属性分为两种情况: 用在普通DOM标签上,获取的是DOM节点。 用在组件标签上,获取的是组件实例对象 Vue2 中标签上的 ref 属性…

掌握AIGC的魔法:编写高质量提示词的艺术与科学

嘿,技术达人们,🚀 今天我们来聊聊AIGC界的超级明星——提示词(Prompt)。在AI生成内容的奇妙世界里,提示词就是那个点石成金的魔法棒。想要AI小伙伴听你的指挥,创造出令人惊叹的内容吗&#xff1…

9.2~9.3-模型量化学习内容

量化简介 量化是将模型浮点数变为定点数运行的过程。通过一个原始float数值range(scale、min、max),将类似实属域的float数值映射到一个网格比较稀疏的int网络上,中间肯定会产生数值的偏移。 基本概念 :模型量化可以减少模型尺寸&#xff0…

驾驶模拟左拐右拐

目录 根据4个点确定投影变换关系: 驾驶模拟左拐右拐 平移 四个点选 通过3个点定义放射变换:结果不对 根据4个点确定投影变换关系: import cv2 import numpy as npdef apply_perspective_transform(image, src_points, dst_points):# 将选…

spring--小白面试版01

bean 1.Spring框架中的bean是单例的吗? Service Scope("singleton") public class UserServicelmpl implements UserService { } 在Scope中 singleton: bean在每个Spring IOC容器中只有一个实例 prototype:一个bean的定义可以有多个实例 2. Spring框架中的单例bea…

jdk11安装步骤(含安装包)

安装包 通过百度网盘分享的文件:jdk-11.0.15.1_windows-x64_bin.exe 链接:https://pan.baidu.com/s/1IYRnvtPvfgloS8rawtRDvg 提取码:sv1w 一、安装过程 双击安装程序 二、配置环境 右键“此电脑”,点击“属性”,点…

学生管理系统升级(登录注册 + 关联学生管理系统)

新增需求 这是在昨天的基础初代版本上面新增一个登录注册忘记密码的功能 需求分析 注册 登录 忘记密码 user类代码呈现 package StudentSystem;public class User {private String username;private String password;private String personID;private String phoneNumber;pu…

828华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp

828华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务…