pm2 + linux + nginx

news2024/9/19 10:44:57

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.coloradmin.cn/o/2093028.html

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

相关文章

openGL笔记之序章

本系列来自 youtube 主播cherno的 openGL系列, b站双语版链接 https://www.bilibili.com/video/BV1Ni4y1o7Au?p1&vd_source0be7021510d651441db0edd576304997 openGL 是一个接口规范,定义了一系列接口,我们可以通过使用这些接口来一定程度的操作GP…

[Meachines] [Easy] Safe BOF+ROP链+.data节区注入BOF+函数跳转BOF+KeePass密码管理器密码破译

信息收集 IP AddressOpening Ports10.10.10.147TCP:22,80,1337 $ nmap -p- 10.10.10.147 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4p1 Debian 10deb9u6 (protocol 2.0) | ssh-hostkey: | 2048 …

基于django的在线音乐网站设计/基于python的音乐播放系统

Django在线音乐网站设计 摘要:计算机网络如果结合使用信息管理系统,能够提高管理员管理的效率,改善服务质量。优秀的在线音乐网站设计能够更有效管理音乐资讯规范,帮助管理者更加有效管理音乐网站,可以帮助提高克服人工…

【深度剖析】《黑神话:悟空》员工薪资大曝光,你慕了吗?

《黑神话:悟空》引爆市场,员工薪资却成热议焦点! 自8月20日解锁以来,《黑神话:悟空》以其国产3A游戏的高品质迅速占领市场,引发全球玩家的热烈讨论。深圳市游科互动科技有限公司开发的这款游戏&#xff0c…

C++20 是 C++ 语言的一次重大更新

C20 是 C 语言的一次重大更新,它引入了许多新特性,旨在提高开发者的生产力和代码的现代化。以下是 C20 的一些关键特性的总结: 模块(Modules):C20 引入了模块,这是一种新的编译单元,…

CSS解析:定位和层叠上下文

许多开发人员对定位的理解很粗略,如果不完全了解定位,就很容易给自己挖坑。有时候可能会把错误的元素放在其他元素前面,要解决这个问题却没有那么简单。 一般的布局方法是用各种操作来控制文档流的行为。定位则不同:它将元素彻底…

mysql 不同版本安装不同端口

安装版本为Mysql8.0.11 先解压,解压后,包下创建my.ini文件内容如下: 注意:端口不能给别的mysql一样 [mysqld]# 设置3306端口port3307 # 自定义设置mysql的安装目录,即解压mysql压缩包的目录basedirD:\\rj\\mysql8.0.…

如何将 HEIC 转换为 JPG/PNG

“我刚刚将 iPhone 15 升级到 iOS 18,但新 iPhone 的照片现在变为 HEIC。什么是 HEIC 格式?我可以在 Windows 上使用 HEIC 照片吗?有人知道 HEIC 的技巧吗?谢谢!” 当你换了一部新的iPhone时,你会发现你的图…

TCP协议 配合 Wireshark 分析数据

在TCP连接中,无论是客户端还是服务端,都有可能成为发送端或接收端,这是因为TCP是一个全双工协议,允许数据在同一连接中双向流动 客户端(Client):通常是指主动发起连接请求的一方。例如&#xf…

商家推广怎么利用C#发送视频短信

视频短信,这一融合了视频、音频与文本的创新通信方式,不仅革新了传统短信的单一形式,更以其独特的魅力带领着移动通信的新风尚。它以移动视频格式为载体,实现了信息传输的多元化,为用户带来不一样的通信体验。 支持免费…

windows安全中心永久卸载工具分享

使用方法 博客:h0ck1r丶羽~从零到一 卸载工具下载链接: 夸克网盘分享 一路回车,选项Y即可 耐心等待几秒种,自动重启 此时打开windows安全中心,已经完全不能使用了,响应的杀毒功能也关了 往期推荐 【渗透测…

简易STL实现 | Deque的实现

一种 在内存中存储元素的数据结构,它支持 在两端添加和删除元素(使用循环数组实现) 1、deque的特性(分段deque实现) 1、双端操作: deque支持在前端和后端执行快速的插入和删除操作 2、随机访问&#xff…

Colorfy v3.26 — 修改版,超过2000种图片涂色

Colorfy 是一款适用于安卓设备的涂色书应用,提供了超过 2000 种不同的图片供用户涂色,包括动物、花卉、城市风景等。每日更新新图,支持各种颜色和绘画工具,如水彩笔、铅笔、细线笔等。用户可以放大绘画区域进行精细绘画。此版本由…

Transformer-LSTM神经网络多输入单输出回归预测的MATLAB实现

在现代机器学习和深度学习领域,处理多维时序数据的需求越来越多。在这些应用场景中,我们常常面临需要同时处理多个输入变量,并预测一个输出变量的任务。这类问题通常被称为多输入单输出回归问题。为了有效地应对这类问题,结合 Tra…

在浮躁的时代,保持冷静和沉稳,心怀勇气

在大家阅读之前,我真诚地祝愿大家在浮躁的世界中找到属于自己的宁静与力量,让每一天都充满希望和快乐。 在这个快节奏、信息爆炸的时代,我们每个人都像是被卷入了一个永不停歇的漩涡,不断地被各种声音和画面拉扯着。有时候&#x…

一篇搞懂classpath,resources

Classpath(类路径)在Java开发中是一个非常重要的概念,它指定了Java虚拟机(JVM)和Java编译器寻找类文件和包的位置。具体来说,Classpath告诉Java执行环境在哪些目录下可以找到所要执行的Java程序所需要的类或…

如何打造基于Java SpringBoot和Vue的医院门诊智能预约平台?四步实现高效就医流程,整合MySQL数据库,优化用户体验。

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

【#第三期实战营闯关作业##LMDeploy 量化部署进阶实践 】

今天学习了《LMDeploy 量化部署进阶实践》一课,,收获很大。以下是记录复现过程及截图: 创建一个名为lmdeploy的conda环境 创建成功后激活环境并安装0.5.3版本的lmdeploy及相关包。 相关包install成功 创建好的conda环境并启动InternLM2_5-7…

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

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

让自家的智能语音助手实现todo任务的添加

我家的树莓派在成为了“智能语音助手”后,经过rasa学习训练,已经可以帮忙查日期/时间,查天气预报,进行一些简单的闲聊。但是,我希望它的功能还可以再强大些,比如说,可以帮我记录todo任务。为了实…