使用 Next.js 进行零停机部署

Pet*_*son 4 build downtime node.js next.js

我有一个 Next.js 应用程序,通过运行来部署

next build
next start
Run Code Online (Sandbox Code Playgroud)

在服务器上。

当构建发生时,它会清除.next构建文件夹中的文件,因此如果我尝试使用该应用程序几秒钟,它会给出错误,因为文件不存在:

MissingStaticPage [Error]: Failed to load static file for page: /reporting/letter_exhibits ENOENT: no such file or directory, open '/home/polson/projects/JRP-Web-Tools/.next/server/pages/reporting/letter_exhibits.html'
Run Code Online (Sandbox Code Playgroud)

一旦我等待构建完成,网络应用程序就会按预期工作。

有没有办法改变构建过程,以便在构建过程中不会出现停机?

小智 10

您可以使用这个简单的策略,虽然它不能保证“零”停机,但它会比当前的体验好得多。基本上,您将项目构建到一个temp文件夹中,然后删除现有.next文件夹,并将temp文件夹重命名为.next.

  1. 将其添加到您的next.config.js文件中:
distDir: process.env.BUILD_DIR || '.next',
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个包含以下内容的脚本:
echo "Deployment starting..."

# install dependencies if any
yarn || exit

# set build folder to `temp` and build
BUILD_DIR=temp yarn build || exit

if [ ! -d "temp" ]; then
  echo '\033[31m temp directory does not exist!\033[0m'  
  exit 1;
fi

# delete `.next` folder
rm -rf .next

# rename `temp` folder to `.next`
mv temp .next

# run next start
next start

echo "Deployment done."
Run Code Online (Sandbox Code Playgroud)

不过,您可能应该使用像pm2这样的流程管理器进行部署。