Please enable Javascript to view the contents

NextJS 项目部署:Node Server + PM2 + Nginx + Linux

 ·  ☕ 2 分钟

最近nextjs 13发布,于是用它写了个小项目妹子图-魔力美少女,部署在阿里云上,简单记录一下过程。

妹子图-魔力美少女

nextjs 官方文档Deployment | Next.js有详细的部署指南,主要是三种方式:

其中 Vercel.com 我访问不了,静态文件 不支持某些特性,Docker 暂时没用过,所以就选了 Node.js Server 方式。

安装 Node Server环境

Node Server 环境主要涉及到:

  • 运行环境:Node.js
  • 包管理器:npm/cnpm/yarn
  • 版本管理:nvm

安装过程略。

nextjs要求node版本在16以上,我本地也是16,所以没什么问题。但部署上去的时候,我发现我的服务器上的node版本是14,于是我就安装了nvm,用nvm安装了node16。

运行项目

下载项目文件到服务器。在next项目文件 package.json 会有 “build” 和 “start” 两个命令:

1
2
3
4
5
6
7
{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start"
  }
}

首先,运行 build 来构建您的应用程序。然后,运行 next start 启动 Node.js 服务器。该服务器支持 Next.js 的所有功能。

PM2进程守护

PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单。

安装 PM2

1
npm install pm2 -g

启动项目

1
pm2 start npm --name "nextjs" -- start

设置端口(默认为3000)

1
sudo pm2 start npm --name "nextjs" -- run start -- --port=8080

也可以在 package.json 文件中添加端口:

1
2
3
4
5
6
7
{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start -p 8080"
  }
}

查看进程

1
2
pm2 list
pm2 show nextjs

进程监控

1
pm2 monit

关闭、重启、删除进程

1
2
3
pm2 stop nextjs
pm2 restart nextjs
pm2 delete nextjs

查看日志

1
pm2 logs nextjs

pm2 服务开机、重启自启动

1
pm2 startup

绑定域名

我服务器上用的是nginx。nginx 是一个高性能的HTTP和反向代理服务器,同时也提供了IMAP/POP3/SMTP服务。反向代理配置如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
server {
  server_name   meizitu.mzh.ren;

  location / {
    proxy_pass             http://127.0.0.1:8080;
    proxy_read_timeout     60;
    proxy_connect_timeout  60;
    proxy_redirect         off;

    # Allow the use of websockets
    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;
  }
}

Linux 目录权限问题

因为我不经常使用Linux,部署的时候遇到了一些权限问题,比如:

1
Error: EACCES: permission denied, mkdir '/root/.next/cache'

给目录加上权限就好了:

1
sudo chmod -R 777 /root/.next

参考资料

分享

码中人
作者
码中人
Web Developer