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 | server { |
启动 nginx
进入 nginx 安装目录下的 sbin 目录,并执行 nginx 文件,即执行./nginx
没有任何提示就表示启动成功了。此时已经可以访问 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 | $ node -v |
还有一个问题,在 npm 下全局安装的模块无法直接在 bash 中执行。例如,我们要在 npm 中安装 pnpm:
1 | $ npm install -g pnpm |
为了解决这个问题,我们需要在 Linux 上手动配置环境变量。编辑 /etc/profile 文件:
sudo vi /etc/profile
在文件的底部,添加下面两行代码:export NODE_HOME=~/app/nodejs/bin
export PATH=$NODE_HOME:$PATH
跟刚才一样,~/app/nodejs 是我们安装的 Nodejs 的路径。
现在,npm 全局安装的模块也可以使用了:
1 | $ pnpm -v |
至此,Nodejs 的安装已经顺利完成,我们可以在服务器上对 Nodejs 为所欲为了!
启动服务
执行启动脚本,pnpm start
接口也可以访问了
现在可以通过域名访问了,但是还是存在一个问题,就是我们刚才执行的 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
成功了,现在就算我们关闭了终端,nodejs 服务也会一直启动着。
pm2 常用命令
1 | $ pm2 list |