Nuxt3 项目部署在 Ubuntu 服务器(Node 服务 + pm2 + Nginx 反向代理)
本文记录了在 Ubuntu 服务器上部署 Nuxt3 项目的步骤。使用 Node.js 和 pm2 启动服务,配置 Nginx 反向代理,实现公网访问。具体步骤包括本地打包、安装 Node.js、Nginx 和 pm2,最后通过配置 Nginx 代理,使项目可通过公网 IP 访问。
初尝 Nuxt.js 项目,本文来记录一下笔者在 Ubuntu 服务器上部署 Nuxt3 项目的过程,用到的服务有:
- Ubuntu 服务器
- 打包后的 Nuxt3 项目
- Node 服务
- pm2
- Nginx
- 公网 IP + 域名
步骤 1:本地打包
使用npm run build
命令打包项目文件,注意文件路径不要含有中文名,否则会打包失败。
打包成功后你可以用node .output/server/index.mjs
命令在本地启动,看看能否成功访问项目,通过http://localhost:3000/
地址在浏览器打开即可。
项目打包成功后,会生成一个.output
文件,把这个文件一整个都上传到服务器中,然后在服务器中启动项目,并配置 nginx 代理,即可让其在公网访问(详情见后文)。
因为项目要用到 pm2 启动(服务器重启后可以自动重启 Nuxt 项目),所以还需要准备一个文件,文件名为ecosystem.config.cjs
或者ecosystem.config.js
。
ecosystem.config.cjs
会被识别为 CommonJS 模块,ecosystem.config.js
文件会被识别为 ES 模块, pm2 会尝试使用 require()
加载这个文件,所以推荐使用.cjs
的文件名,反正我这边用.js
的文件名报错了。
文件内定义的内容如下:
module.exports = {
apps: [
{
name: "project_name", // 启动项目名称,随便取,一般为项目名
exec_mode: "cluster",
instances: "max", // 进程数
port: "3000", // 端口,根据需要指定
script: "./.output/server/index.mjs", // 启动入口,相对于 .output 目录的路径
args: "start",
env: {
MODE: "production"
}
}
]
}
将这个文件上传到服务器,与.output
目录文件同级即可。
步骤 2:安装 Nodejs 环境(可选)
如果服务器没有 node 环境,请先安装,如果有请跳过此步,安装步骤如下,一行命令一行命令运行即可:
# 下载并导入 NodesourceGPG 密钥
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
# 创建 deb 存储库
NODE_MAJOR=18 # 选择 nodejs 的版本为 18.x
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
# 更新并安装
sudo apt-get update
sudo apt-get install nodejs -y
执行以下命令,查看 Node.js 版本。
node -v
回显信息类似如下所示。
jsnoteclub@iZbp1g2d4dpki2mf63b:~$ node -v
v18.xx.x
步骤 3:安装 Nginx(可选)
如果服务器没有 Nginx,请先安装,如果有请跳过此步,安装步骤如下,一行命令一行命令运行即可:
1.依次执行以下命令,更新 Linux 操作系统和软件包。
sudo apt-get update
sudo apt-get upgrade -y
2.安装 Nginx。
sudo apt-get install -y nginx
3.安装完成后,你可以运行nginx -v
命令,查看 Nginx 的版本信息(具体版本可能不一样,以实际为准)。
jsnoteclub@iZbp1g2d4dpki2mf63b:$ nginx -v
nginx version: nginx/1.18.0 (Ubuntu)
步骤 4:安装 pm2(可选)
如果服务器没有 pm2,请先安装,如果有请跳过此步,安装命令如下(注意要先有 node 服务,才能使用下面的安装命令):
npm install pm2 -g
安装完成后,你可以运行pm2 -v
命令,查看 pm2 的版本信息(具体版本可能不一样,以实际为准)。
jsnoteclub@iZbp1g2d4dpki2mf63b:~$ pm2 -v
5.4.2
步骤 5:启动项目
使用 pm2 启动项目的命令,得注意你的文件名是.cjs
还是.js
。
pm2 start ecosystem.config.cjs
状态 online 表示项目启动成功,可以用以下命令查看端口是否在运行:
netstat -nltp
可以使用以下命令设置自动重启,当服务器故障或者需要重启的时候,pm2 会自动重启对应的项目。
1.检查 PM2 进程
pm2 status
2.保存当前的进程列表:
pm2 save
3.设置 PM2 开机自启动
pm2 startup
运行上述命令会输出一条命令,例如:
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u your_user --hp /home/your_user
按照提示运行输出的命令。例如:
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u your_user --hp /home/your_user
现在,PM2 已经配置为开机自启动。可以重启你的服务器并验证 PM2 是否成功启动并恢复你的应用程序。重启后,登录到服务器并检查 PM2 进程:
pm2 status
确保进程列表和日志路径正确。如果在任何时候你更新了 PM2 进程列表,记得保存:
pm2 save
你可以通过以下命令查看和配置 PM2 的日志和路径:
pm2 logs
pm2 describe myapp
通过以上步骤,你的 PM2 将在服务器重启后自动启动并恢复应用程序。注意,这时候项目虽然启动成功了,但是目前是不能在公网访问的,还得配置 Nginx 代理才行。
步骤 6:配置 Nginx 代理,使公网 IP 可访问
要使你的 3000
端口能够通过 nginx 进行反向代理并在公网访问,你需要在 nginx 的配置文件中进行设置。以下是步骤:
1.编辑 nginx 配置文件
通常在 /etc/nginx/sites-available/
目录下手动创建或编辑一个以.conf
为后缀配置文件。你可以创建一个新的文件或修改现有的配置文件,假设创建一个新的文件 example.conf
。
sudo nano /etc/nginx/sites-available/example.conf
2.配置 nginx 反向代理
在配置文件中添加以下内容:
server {
listen 80;
server_name 你的公网 IP;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
server_name
:替换为你的域名或服务器的 IP 地址。proxy_pass
:指向你的应用运行的地址和端口,这里是http://localhost:3000
。
3.启用新配置
创建一个符号链接,将新配置文件链接到 sites-enabled
目录,运行以下命令,记得更改.conf
文件为你所命名的文件。
sudo ln -sf /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/
4.测试 nginx 配置
在应用新配置之前,测试 nginx 配置是否有误:
sudo nginx -t
如果没有错误信息,重新加载 nginx 服务:
sudo systemctl reload nginx
5.通过公网 IP 访问项目
这样,nginx 会将所有到 80 端口(HTTP)的请求转发到你的 Node.js 应用运行的 3000 端口,从而使其能够在公网访问,可在浏览器中输入你的公网 IP 看看成功否。
需要注意的是,如果你希望通过 HTTPS 访问,还需要在 server
块中配置 listen 443 ssl;
并添加 SSL 证书的配置,具体就不展开讲了,有需要的话问一下 GPT 吧。
总结
本文记录了在 Ubuntu 服务器上部署 Nuxt3 项目的步骤。使用 Node.js 和 pm2 启动服务,配置 Nginx 反向代理,实现公网访问。具体步骤包括本地打包、安装 Node.js、Nginx 和 pm2,最后通过配置 Nginx 代理,使项目可通过公网 IP 访问。