Nginx+pm2 部署项目

继续 Nginx 入门章节,本章主要讲解基本的 nginx 文件配置和启动一个 nodejs 服务。其中涉及到前端资源存放,环境域名配置、默认端口处理等。

如果顺利,我们将可以访问 http://138.128.222.180/。如果使用域名,则还需要备案才能访问 http://www.weilunaichat.xyz

网站域名配置

简单介绍下,申请个域名,添加一个记录集,将域名指向 IP 地址,也就是指向存放前端资源文件的服务器 IP 地址。
如果使用域名,还需要进行备案才能进行访问。

备案:todo

nginx 配置文件

编辑 nginx 配置文件,使用 http 默认端口号 80 作为网站访问地址的端口号。也就是说,如果我们使用 80 端口 server 块配置资源,页面访问时 url 则不需要带上端口。

第一段 location 代码块中,root设置为前端资源文件所在路径,index设置为 html 文件名
第二段 location,proxy_pass设置为后端服务地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
listen 80;
server_name localhost; // 这里可以使用域名

location / {
root html/frontend/chatgpt-web; // 目录位置,相对于Nginx的安装目录
index index.html index.htm;
# try_files $uri $uri/ /index.html; // 如果是history路由,需要匹配兜底文件
}

location /api {
# 反向代理,代理本机器3002端口
# 如果有其他服务,就指向其他服务
proxy_pass 127.0.0.1:3002;
}
}

启动 nginx

进入 nginx 安装目录下的 sbin 目录,并执行 nginx 文件,即执行./nginx
pic.1709045583924

没有任何提示就表示启动成功了。此时已经可以访问 http://124.70.17887.156

启动后端服务

本地开发时,我们启动项目时,会启动 localhost 作为本地服务器。那么,想要在服务器上启动服务,我们需要在服务器上安装启动服务的工具,再执行启动脚本即可。

以启动后端 nodejs 服务来说,先在服务器上安装 nodejs,再执行启动服务脚本

安装 nodejs

第一步仍然需要下载对应的二进制文件:

wget -c https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-x64.tar.xz

提取文件:

tar -xvf node-v18.16.0-linux-x64.tar.xz

解压之后得到的文件夹就是已经安装好的 Nodejs 了,为了方便我们可以把它重命名一下(在这里我把它放到了

用户根目录下面的 app 的文件夹里,你也可以换成其他路径):

mv node-v18.16.0-linux-x64 ~/app/nodejs

然而,这种方式安装的 Nodejs 并不完美。首先,Nodejs 的命令 node 和 npm 并不能在全局使用。为了解决这个问题,我们需要建立两个软链接:

sudo ln -s ~/app/nodejs/bin/node /usr/local/bin/node

sudo ln -s ~/app/nodejs/bin/npm /usr/local/bin/npm

其中,~/app/nodejs 是我们刚才安装的 Nodejs 的路径,在建立软链接的时候要注意区别。

现在,node 和 npm 可以在全局使用了,同样输入命令 node -v 来检查 Nodejs 是否安装成功:

1
2
$ node -v
v18.16.0 # 出现了对应的版本号信息,说明安装成功

还有一个问题,在 npm 下全局安装的模块无法直接在 bash 中执行。例如,我们要在 npm 中安装 pnpm:

1
2
3
$ npm install -g pnpm
$ pnpm
bash: pnpm: command not found...

为了解决这个问题,我们需要在 Linux 上手动配置环境变量。编辑 /etc/profile 文件:
sudo vi /etc/profile
在文件的底部,添加下面两行代码:
export NODE_HOME=~/app/nodejs/bin
export PATH=$NODE_HOME:$PATH
跟刚才一样,~/app/nodejs 是我们安装的 Nodejs 的路径。
现在,npm 全局安装的模块也可以使用了:

1
2
$ pnpm -v
8.15.3

至此,Nodejs 的安装已经顺利完成,我们可以在服务器上对 Nodejs 为所欲为了!

启动服务

执行启动脚本,pnpm start
pic.1709532090132

接口也可以访问了

pic.1709532156349

现在可以通过域名访问了,但是还是存在一个问题,就是我们刚才执行的 pnpm start 命令,必须打开命令行才有效,一旦关闭命令行,进程也终止了。这时候可以借助 pm2 来解决这个问题。

pm2

PM2 是一个用于管理 Node.js 应用程序的生产过程的流行工具,可以用它部署 运行 监控 应用。
安装:npm i pm2 -g

介绍
进入项目所在目录,执行如下命令启动 node 服务:

1
pm2 start npm --name yourName -- run server
  • pm2 start: 这是 PM2 的命令,用于启动一个 Node.js 应用。
  • npm: 这是 Node.js 的包管理器,用于管理 JavaScript 包和依赖项。
  • --name yourName: 这是一个可选的参数,用于指定应用程序的名称。在这里,您可以将”yourName”替换为您的应用程序的实际名称。
  • -- : 这是一个分隔符,它告诉 npm 后面的内容是要传递给 npm 的命令。
  • run server: 这是 npm 的子命令,它告诉 npm 运行名为”server”的脚本。通常,”server”是一个在package.json文件中定义的脚本名称。例如,如果您的package.json文件包含以下内容:

对于我们的 nodejs 服务,启动脚本为pnpm start,如果我们使用 pm2 来启动的话,就执行pm2 start pnpm --name chatgpt-web-server -- run start
pic.1709045710219
成功了,现在就算我们关闭了终端,nodejs 服务也会一直启动着。

pm2 常用命令

1
2
3
4
5
6
$ pm2 list
$ pm2 show app_name
$ pm2 start app_name
$ pm2 stop app_name
$ pm2 delete app_name
$ pm2 restart app_name

Nginx安装和启动

nginx 是一个轻量 web 服务器。

安装

查看服务器是什么系统

1
uname -a

我是 Linux 系统,可使用 yum 软件包管理器

第一步:先安装 PCRE pcre-devel 和 Zlib,配置 nginx 的时候会用到这两个东西

1
2
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel

第二步:安装 nginx1.18.0

  1. 下载 nginx 文件
1
wget -c https://nginx.org/download/nginx-1.18.0.tar.gz

Linux 系统中的 wget 是一个下载文件的工具

  1. 解压并进入 nginx 目录
1
2
tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
  1. 使用 nginx 的默认配置
1
./configure
  1. 编译安装
1
2
make
make install

nginx 已经安装完成了

查找 nginx 安装路径:

whereis nginx
pic.1709045302233

启动 nginx 服务器。进入 nginx 安装目录下的 sbin 目录,并执行 nginx 文件,即执行./nginx
pic.1709045387708


没有任何提示就表示启动成功了。访问机器 ip,如果显示 welcome to nginx 则表示 nginx 运行成功了。
pic.1709045415961

如果还无法访问服务器 ip 地址,以我的华为云服务器为例,还需要添加安全组规则。http 协议默认 80 端口(https 默认端口为 443),我们添加一个 80 端口:

pic.1709045483441

添加后即可成功访问 nginx 欢迎页面。

查看配置文件目录。这个语句也可以验证 nginx.conf 文件是否正确。正确的格式会提示 test is successful

1
./nginx -t

pic.1709045506823

nginx 常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
查看Nginx安装位置
whereis nginx
常见位置:
/etc/nginx/conf
/usr/local/etc/nginx
/opt/homebrew/etc/nginx

启动
启动代码格式:nginx安装目录地址 -c nginx配置文件地址
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
./nginx
没有任何提示消息就表示成功了

查看Nginx进程
ps -ef|grep nginx
master 是主进程(唯一),worker是工作进程

查看端口情况
lsof -i:80
-i:80 表示只看80端口

杀死进程
kill -QUIT pid

Nginx停止或重启。进入nginx可执行目录sbin下,输入以下命令
./nginx -s signal
quit :优雅停止
stop :立即停止
reload :重载配置文件
reopen :重新打开日志文件

https://segmentfault.com/a/1190000012297511
https://bbs.huaweicloud.com/blogs/304663
https://www.cnblogs.com/ghzjm/p/10677599.html

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×