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
Your browser is out-of-date!

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

×